专注服务,而非容器
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
現(xiàn)階段而言,容器聽起來可能很酷,但這種現(xiàn)狀或許不會持續(xù)太久。可以預(yù)見的是,容器將來也僅僅是一種基礎(chǔ)設(shè)施。經(jīng)驗(yàn)豐富的開發(fā)人員對部署應(yīng)用程序的方法和其它幾種類型的基礎(chǔ)設(shè)施可能已經(jīng)很熟悉了。容器對他們來說沒什么大不了的。
然而,通過容器架構(gòu)應(yīng)用程序,能為基礎(chǔ)設(shè)施帶來新機(jī)遇,并且市場前景巨大,這就是為什么微服務(wù)應(yīng)用程序中的服務(wù)比其運(yùn)行的容器化基礎(chǔ)設(shè)施要重要得多。
模塊化一直是應(yīng)用程序架構(gòu)的目標(biāo),如今,微服務(wù)的設(shè)想已成為可能,如何構(gòu)建這些服務(wù)最終決定了它們將在哪里運(yùn)行以及它們將以何種方式部署。應(yīng)用程序的功能通過服務(wù)滿足用戶需求,其價(jià)值也通過服務(wù)來實(shí)現(xiàn)。
這就是為什么如果你想充分利用容器,那你應(yīng)該考慮的不應(yīng)該僅僅只是容器。你必須關(guān)注服務(wù),因?yàn)樗鼈兪侨萜鲉⒂玫年P(guān)鍵。
服務(wù)和容器
為了便于對話,服務(wù)和容器是可以互換使用的,因?yàn)槿萜骰瘧?yīng)用程序的理想用例是解構(gòu)到服務(wù)中,每個服務(wù)都被部署為一個或多個容器。
但是,策略不盡相同。服務(wù)是一種隱含的基礎(chǔ)設(shè)施,更重要的是應(yīng)用程序體系結(jié)構(gòu)。當(dāng)您談到作為應(yīng)用程序一部分的服務(wù)時,該服務(wù)是持久性的。例如,在沒有登錄頁面或購物車的情況下,你無法臨時擁有一個應(yīng)有程序,還指望其進(jìn)展順意。
另一方面,容器的生命周期在設(shè)計(jì)之初就被限定在極短的范圍內(nèi)。理想情況下, 在每次部署或還原時, 一旦新的部署生效并且流量被路由到該容器就被終止。因此容器并不持久。如果交貨鏈正常運(yùn)行,那根本就不重要。只要新部署已存在并且通信流路由到該容器, 就會立即將其殺死。所以容器不是持久的。如果交付鏈正常運(yùn)行, 即使容器終止也無關(guān)緊要。
微服務(wù),既是一個應(yīng)用程序,也是一個基礎(chǔ)設(shè)施術(shù)語,它有一些與之相關(guān)聯(lián)的獨(dú)特元素,從而使它進(jìn)一步分化。
- 單個服務(wù)可以部署在多個區(qū)域。
- 每個區(qū)域都可以有多個版本——例如,A / B測試或Canary版本。
- 每個服務(wù)可能具有不同的生命周期。特定于后端的服務(wù)可能比前端服務(wù)部署的要少。
它甚至不一定意味著一個服務(wù)等于一個容器或一個主機(jī)。該服務(wù)是來自應(yīng)用程序中功能的邏輯抽象,并不直接與任何基礎(chǔ)設(shè)施相關(guān)。
以服務(wù)為中心意味著什么?
專注于您的服務(wù)意味著開發(fā)人員不會花時間優(yōu)化或修改容器編排或配置。如果最終版本的鏡像已經(jīng)準(zhǔn)備好,開發(fā)者只要關(guān)心提交他們的代碼就可以了。如果開發(fā)人員還需要把容器也納入考慮范圍,那就會打破某種平衡。
開發(fā)人員只有在開發(fā)環(huán)境中才需要考慮容器相關(guān)的事宜。開發(fā)環(huán)境和生產(chǎn)環(huán)境之間的平衡非常重要。要確保開發(fā)人員正在對正確的Docker鏡像進(jìn)行測試,并能夠訪問其他服務(wù),而左移QA是緩解“它在我的機(jī)器上明明能正常工作”這一問題的唯一途徑。這是通過強(qiáng)大的容器鏡像倉庫實(shí)現(xiàn)的。
然而,即使是開發(fā)環(huán)境也應(yīng)該被放在最末來考慮。
如何實(shí)現(xiàn)以服務(wù)為中心的工作流
我希望我可以說,專注于服務(wù)是一項(xiàng)獨(dú)立的開發(fā)任務(wù),但其實(shí)不是。開發(fā)人員已著眼于正在構(gòu)建的功能,如果他們因容器和業(yè)務(wù)流程而分心,那也是因?yàn)樗麄兪羌夹g(shù)狂人,他們想要修補(bǔ)問題,而不是因?yàn)樗麄冇X得這是他們的主要職責(zé)。
以服務(wù)為中心,是團(tuán)隊(duì)中的每個人的責(zé)任。包括如何架構(gòu)交付鏈——不僅要快,而且要避免更廣泛的團(tuán)隊(duì)需要與之進(jìn)行交互。因此,“以服務(wù)為中心”需要從管理開始,下放到傳遞鏈(或DevOps),再到工具,最終,開發(fā)人員要么保留基礎(chǔ)設(shè)施包,要么可以自由工作。以下是服務(wù)重點(diǎn)的三個關(guān)鍵原則:
- 規(guī)范開發(fā)環(huán)境。您可以通過找到一個強(qiáng)大的容器鏡像倉庫、審查圖像和標(biāo)準(zhǔn)化開發(fā)人員在其框中的工具來執(zhí)行此操作。由于服務(wù)是獨(dú)立開發(fā)的,其中一個挑戰(zhàn)是在整個應(yīng)用程序的服務(wù)中看到新的功能。因此,開發(fā)人員每次提交都可以部署的按需集成環(huán)境就顯得尤為重要。
- 保持不可變,不要只是掛在嘴邊。要想要以服務(wù)中心,你必須將“基礎(chǔ)設(shè)施不可變”付諸實(shí)踐,而不僅僅是嘴上說說。這意味著在部署容器后將不得再進(jìn)行更改,只能選擇運(yùn)行或刪除。嚴(yán)格禁止Snowflake鏡像或配置,除了服務(wù)本身所需功能之外,不允許訪問單個容器。
- 創(chuàng)建可見性。基于服務(wù)的應(yīng)用程序確實(shí)有多個單片應(yīng)用程序的移動部件。這意味著創(chuàng)建可見性并為所有涉眾提供訪問權(quán)限至關(guān)重要。可見性還應(yīng)支持基礎(chǔ)設(shè)施和應(yīng)用程序可見性。團(tuán)隊(duì)?wèi)?yīng)該能夠查看整個應(yīng)用程序及其中的所有服務(wù),并能檢查單個容器。因此對開發(fā)團(tuán)隊(duì)來說,應(yīng)用程序的可見性是最重要的。
為避免發(fā)生重大故障,DevOps團(tuán)隊(duì)還需要盡可能地減少網(wǎng)絡(luò)和安全性的影響,其目標(biāo)是盡可能多地卸載編排工具。
專注于服務(wù)的目標(biāo)是避免分心,只專注于服務(wù)功能。如果開發(fā)人員專注于構(gòu)建一個偉大的產(chǎn)品,而DevOps則專注于構(gòu)建最佳的交付鏈,那么工具鏈和流程將會隨之就緒以提供支持——如今,這種偉大的產(chǎn)品誕生了,那就是容器和強(qiáng)大的編排工具。
用戶總是傾向于使用更優(yōu)質(zhì)的應(yīng)有程序,這就促使公司更加精益求精、日臻完善,至于達(dá)到這一目標(biāo)的機(jī)制,并非問題的關(guān)鍵所在。因此,下次您再談?wù)摰饺萜鲿r,不妨考慮把重點(diǎn)放在如何構(gòu)建更好的服務(wù)上。
9月27日,北京海航萬豪酒店,容器技術(shù)大會Container Day 2017即將舉行。
CloudStack之父、海航科技技術(shù)總監(jiān)、華為PaaS部門部長、恒豐銀行科技部總經(jīng)理、阿里云PaaS工程總監(jiān)、民生保險(xiǎn)CIO······均已加入豪華講師套餐!
11家已容器落地企業(yè),15位真·云計(jì)算大咖,13場純·技術(shù)演講,結(jié)合實(shí)戰(zhàn)場景,聚焦落地經(jīng)驗(yàn)。免費(fèi)參會+超高規(guī)格,詳細(xì)議程及注冊鏈接請戳
轉(zhuǎn)載于:https://my.oschina.net/u/3330830/blog/1539617
總結(jié)
- 上一篇: IntelliJ IDEA的使用操作链接
- 下一篇: Oh-My-Zsh 操作 Git 的快捷