有關(guān)云可移植性的三個(gè)考量:二微服務(wù)架構(gòu)?
在這一系列文章中,我們將從架構(gòu)、設(shè)計(jì)等不同方面來(lái)探討,在云的可移植性方面,具體都需要考慮哪些細(xì)節(jié)問(wèn)題,如何最大限度避免云時(shí)代的技術(shù)鎖定,充分發(fā)揮云的靈活性優(yōu)勢(shì)。
延伸閱讀,了解 Akamai cloud-computing
出海云服務(wù),選擇Akamai cloud-computing!
下文將簡(jiǎn)要探討云原生和容器技術(shù)。歡迎點(diǎn)擊這里回顧上篇內(nèi)容,了解云原生和容器技術(shù)在云可移植性方面的注意事項(xiàng)。
微服務(wù)應(yīng)該是可擴(kuò)展的,并且是專注于單一職能的,由每個(gè)自包含的模塊化單元負(fù)責(zé)處理一個(gè)更大規(guī)模系統(tǒng)中的一個(gè)特定功能,而大型應(yīng)用程序往往就可以由這種模塊化的組件或服務(wù)(如容器或無(wú)服務(wù)器計(jì)算)構(gòu)建而成。
我們可以將微服務(wù)看作由不同部門、預(yù)算和要求組成的業(yè)務(wù)。每年,這些要求都會(huì)根據(jù)公司需求的變化而變。隨著時(shí)間推移,我們的應(yīng)用程序也會(huì)面對(duì)不斷變化的要求,其中的某些方面可能會(huì)產(chǎn)生更多需求,有些方面則需要我們投入更多關(guān)注。此外,應(yīng)用程序中的不同方面可能還需要進(jìn)行不同程度的擴(kuò)展或縮放。微服務(wù)可以幫助我們?cè)诓挥绊懫渌矫娴那闆r下,以獨(dú)立的方式對(duì)應(yīng)用程序中的某些方面進(jìn)行縮放或擴(kuò)展。
相信大家都還記得編程領(lǐng)域所謂的“單一職責(zé)原則”(Single responsibility principle)。微服務(wù)在這方面也是一樣的。微服務(wù)應(yīng)該只負(fù)責(zé)做一件事,并且做好這件事。當(dāng)然,通過(guò)使用微服務(wù),我們還能在彈性和容錯(cuò)能力方面獲得一些固有的好處。微服務(wù)架構(gòu)旨在通過(guò)將故障約束到單個(gè)服務(wù)來(lái)防止出現(xiàn)影響整個(gè)系統(tǒng)的故障。如果出現(xiàn)特定故障,我們將知道故障位于哪里,并能在不影響其他東西的情況下解決這種故障。
另外還要注意可發(fā)現(xiàn)(Discoverable)問(wèn)題。通過(guò)使用諸如HashiCorp的Consul這種服務(wù)網(wǎng)絡(luò)解決方案,我們將能知道新服務(wù)何時(shí)上線,并能使用一個(gè)集中的系統(tǒng)充當(dāng)服務(wù)目錄,從而定義這些服務(wù)的用途以及服務(wù)之間的通信方式。
為何使用微服務(wù)
- 更快的上市時(shí)間:微服務(wù)可以并行開發(fā)和部署多個(gè)組件,從而加速整體開發(fā)流程,縮短交付新功能所需的時(shí)間。
- 提高可擴(kuò)展性:微服務(wù)可以獨(dú)立擴(kuò)展,從而讓企業(yè)更高效地分配資源,同時(shí)更高效地處理不同工作負(fù)載或流量模式。
- 增強(qiáng)彈性:微服務(wù)去中心化的本質(zhì)特性降低了系統(tǒng)范圍內(nèi)故障的風(fēng)險(xiǎn),保證了持續(xù)的服務(wù)可用性以及更高的系統(tǒng)整體可靠性。
- 靈活性和適應(yīng)性:微服務(wù)可以讓企業(yè)為不同組件使用不同技術(shù)和框架,從而更容易適應(yīng)不斷變化的需求或融入新技術(shù)。
- 簡(jiǎn)化維護(hù)和更新:微服務(wù)的模塊化設(shè)計(jì)簡(jiǎn)化了系統(tǒng)的維護(hù)和更新,因?yàn)槊總€(gè)組件都可以在不影響整體系統(tǒng)的前提下單獨(dú)升級(jí)或替換。
微服務(wù)最佳實(shí)踐
保持微服務(wù)規(guī)模小巧、專注于負(fù)責(zé)單一業(yè)務(wù)能力,這一點(diǎn)至關(guān)重要。這樣我們才能輕松添加額外的功能并避免蔓延。然而,每個(gè)微服務(wù)的理想規(guī)模是多少,這并沒有什么明確標(biāo)準(zhǔn),這需要我們根據(jù)具體應(yīng)用及實(shí)際需求來(lái)決定。
我們還需要針對(duì)失敗進(jìn)行相關(guān)設(shè)計(jì)。雖然多個(gè)服務(wù)和微服務(wù)運(yùn)行過(guò)程中,按照設(shè)計(jì)本身就具備與生俱來(lái)的容錯(cuò)能力,但額外的設(shè)計(jì)可以增加額外的彈性,例如重試機(jī)制、斷路器以及隔板。想象一下船舶為什么會(huì)安裝隔板。這些隔板可以保證船舶的結(jié)構(gòu)完整性,而如果船艙漏水,隔板關(guān)閉,也可以保證船不會(huì)沉沒。很多基于事件驅(qū)動(dòng)的架構(gòu)使用了一種所謂的死信隊(duì)列(Dead letter queue),如果某條消息無(wú)法傳遞,就會(huì)被放入一個(gè)特殊的隊(duì)列,接下來(lái)就可以檢查該隊(duì)列中的消息來(lái)確定失敗原因。
微服務(wù)應(yīng)該圍繞領(lǐng)域驅(qū)動(dòng)(Domain-driven)的設(shè)計(jì)原則來(lái)設(shè)計(jì),這意味著要基于業(yè)務(wù)能力對(duì)服務(wù)建模,并使用通用語(yǔ)言來(lái)保障服務(wù)符合業(yè)務(wù)需求。領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)側(cè)重于圍繞對(duì)業(yè)務(wù)的深入理解來(lái)打造軟件系統(tǒng),其原則有助于指導(dǎo)設(shè)計(jì)過(guò)程,確保軟件與領(lǐng)域保持一致且能為業(yè)務(wù)提供價(jià)值。這些原則共同促進(jìn)了對(duì)業(yè)務(wù)領(lǐng)域的深入理解,有助于確保開發(fā)工作能與業(yè)務(wù)需求和不斷變化的要求緊密契合。
采取以API為先的方法進(jìn)行設(shè)計(jì)并實(shí)現(xiàn)API網(wǎng)關(guān),借此即可提供中央連接點(diǎn),從而促進(jìn)微服務(wù)和第三方子系統(tǒng)之間的通信。API網(wǎng)關(guān)負(fù)責(zé)處理大部分路由工作,以及身份驗(yàn)證、認(rèn)證、速率限制等工作。API的設(shè)計(jì)模式對(duì)于微服務(wù)的模塊化和可復(fù)用能力至關(guān)重要。
此外對(duì)于微服務(wù),還有下列這些最佳實(shí)踐:
- 自動(dòng)化測(cè)試和部署:使用持續(xù)集成和持續(xù)部署(CI/CD)管道等自動(dòng)化工具測(cè)試和部署微服務(wù),從而降低錯(cuò)誤風(fēng)險(xiǎn),確保以快速、一致的方式部署服務(wù)。
- 使用容器:容器提供了一種輕量級(jí)、可移植的方式來(lái)打包和部署微服務(wù)。使用容器有助于簡(jiǎn)化部署流程,改善應(yīng)用程序的可擴(kuò)展性和可移植性。
- 監(jiān)視和觀察:微服務(wù)需要不斷監(jiān)視和記錄,以確保按照預(yù)期運(yùn)行,并及時(shí)發(fā)現(xiàn)存在的問(wèn)題或錯(cuò)誤。日志聚合器和應(yīng)用程序性能監(jiān)視(APM)工具可以幫助我們做到這一切。通過(guò)跟蹤,我們還可以進(jìn)一步了解分布式系統(tǒng)中的數(shù)據(jù)流。這三大能力有助于針對(duì)性能獲得端到端的可見性。
- 保護(hù)服務(wù):應(yīng)通過(guò)身份驗(yàn)證、認(rèn)證授權(quán)、加密等最佳實(shí)踐措施保護(hù)微服務(wù)的安全,當(dāng)然,容器本身的安全性也不容忽略!為減小整體攻擊面,我們應(yīng)該通過(guò)強(qiáng)制執(zhí)行的策略來(lái)定義微服務(wù)能與其他服務(wù)通信的內(nèi)容。安全性應(yīng)該成為所有設(shè)計(jì)工作的一部分,并且需要在開發(fā)過(guò)程的每個(gè)階段進(jìn)行徹底的檢查,這樣才能獲得更安全的應(yīng)用程序,并妥善保護(hù)敏感數(shù)據(jù)。
這篇文章的內(nèi)容感覺還行吧?有沒有想要立即在 Linode 平臺(tái)上親自嘗試一下?別忘了,現(xiàn)在注冊(cè)可以免費(fèi)獲得價(jià)值 100 美元的使用額度,快點(diǎn)自己動(dòng)手體驗(yàn)本文介紹的功能和服務(wù)吧↓↓↓
歡迎關(guān)注Akamai ,第一時(shí)間了解高可用的MySQL/MariaDB參考架構(gòu),以及豐富的應(yīng)用程序示例