日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

微服务、容器、DevOps三者之间的演进关系,你清楚吗?

發(fā)布時(shí)間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务、容器、DevOps三者之间的演进关系,你清楚吗? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

微服務(wù)、容器、DevOps三者之間的演進(jìn)關(guān)系

容器的普及,帶來(lái)了微服務(wù)架構(gòu)和DevOps的高速發(fā)展。

1 微服務(wù)的弊端

1.1 測(cè)試、發(fā)布工作量劇增

單體應(yīng)用拆分成多個(gè)微服務(wù)后,雖能實(shí)現(xiàn)快速開(kāi)發(fā)迭代,但帶來(lái)更大測(cè)試和運(yùn)維部署的成本。

  • 很多業(yè)務(wù)早期就是一個(gè)大的單體Web應(yīng)用,測(cè)試和運(yùn)維時(shí),只需把Web應(yīng)用打WAR包,部署到Tomcat完事,

  • 拆成微服務(wù)后,很多業(yè)務(wù)需求就需同時(shí)修改多個(gè)服務(wù)的代碼。測(cè)試和運(yùn)維要把這些服務(wù)打包、測(cè)試、發(fā)布上線,同時(shí)還要測(cè)試這些服務(wù)接口的功能,最后發(fā)布上線多個(gè)系統(tǒng),工作量增劇增。

  • 這個(gè)時(shí)候就需要減輕測(cè)試和運(yùn)維的負(fù)擔(dān),我在上一講給出的解決方案是DevOps。

  • DevOps可理解為開(kāi)發(fā)和運(yùn)維的結(jié)合。服務(wù)的開(kāi)發(fā)者不再只負(fù)責(zé)服務(wù)的代碼開(kāi)發(fā),還要負(fù)責(zé)服務(wù)的測(cè)試、上線發(fā)布和故障處理等全生命周期過(guò)程,這樣就能把測(cè)試和運(yùn)維從微服務(wù)拆分后所帶來(lái)的復(fù)雜工作中解放出來(lái)。

    DevOps要求開(kāi)發(fā)、測(cè)試和發(fā)布流程自動(dòng)化,這就需保證開(kāi)發(fā)人員將自己本地部署測(cè)試通過(guò)的代碼和運(yùn)行環(huán)境,能夠復(fù)制到測(cè)試環(huán)境,測(cè)試通過(guò)后再?gòu)?fù)制到線上環(huán)境發(fā)布。雖然看上去就是復(fù)制代碼,但實(shí)際上本地環(huán)境、測(cè)試環(huán)境和線上環(huán)境往往是隔離的。軟件配置環(huán)境差異很大,會(huì)導(dǎo)致開(kāi)發(fā)、測(cè)試和發(fā)布流程割裂。

    1.2 機(jī)器初始化復(fù)雜度劇增

    彈性擴(kuò)縮容時(shí),不同微服務(wù)所要求的軟件運(yùn)行環(huán)境差異,帶來(lái)了機(jī)器初始化復(fù)雜度的提升。拆分后的微服務(wù)相比原來(lái)大單體應(yīng)用更靈活,需根據(jù)實(shí)際訪問(wèn)量做在線擴(kuò)縮容,并且通常會(huì)采用在公有云上創(chuàng)建的ECS擴(kuò)縮容。
    這意味著又給運(yùn)維帶來(lái)了挑戰(zhàn)。因?yàn)楣性粕蟿?chuàng)建的ECS通常只包含基本os環(huán)境,微服務(wù)運(yùn)行依賴(lài)的軟件配置等需運(yùn)維單獨(dú)初始化,因不同微服務(wù)的軟件配置依賴(lài)不同,服務(wù)部署的初始化工作十分繁瑣。比如Java服務(wù)依賴(lài)JDK,就需在ECS安裝JDK,而且不同微服務(wù)JDK版本也可能不同。

    2 還好有你:容器

    容器技術(shù)解決了本地、測(cè)試、線上環(huán)境的隔離,解決部署服務(wù)初始化繁瑣的問(wèn)題。
    容器,即Container,可翻譯成集裝箱。在港口用集裝箱把貨物封裝起來(lái),然后通過(guò)貨輪從海上運(yùn)輸?shù)搅硪粋€(gè)港口,再在港口卸載后通過(guò)大貨車(chē)運(yùn)送到目的地。如此貨物便可在任何地方流轉(zhuǎn)時(shí),都封裝在集裝箱,無(wú)需根據(jù)是在貨輪還是大貨車(chē)而對(duì)貨物重新裝配。
    軟件的容器也是這個(gè)原理。它封裝的是軟件的運(yùn)行環(huán)境。容器本質(zhì)是Linux里的進(jìn)程,但容器通過(guò)Namespace和Cgroups,可有自己的root文件系統(tǒng)、網(wǎng)絡(luò)配置、進(jìn)程空間,甚至自己的用戶(hù)ID空間,如此容器里的進(jìn)程就像運(yùn)行在宿主機(jī)上的另外一個(gè)單獨(dú)的os內(nèi),從而實(shí)現(xiàn)與宿主機(jī)os里運(yùn)行的其他進(jìn)程隔離。

    Docker即是基于Linux內(nèi)核的Cgroups、Namespace實(shí)現(xiàn)進(jìn)程的封裝和隔離。
    雖然容器解決了應(yīng)用程序運(yùn)行時(shí)隔離問(wèn)題,但要想實(shí)現(xiàn)應(yīng)用從一臺(tái)機(jī)器遷移到另外一臺(tái)機(jī)器上還能正常運(yùn)行,就必須保證另外一臺(tái)機(jī)器上的os一致,而且應(yīng)用程序依賴(lài)的各種環(huán)境也必須一致。Docker鏡像就解決了這個(gè)痛點(diǎn)。
    即Docker鏡像不僅可打包應(yīng)用程序本身,而且還可打包應(yīng)用程序的所有依賴(lài),甚至包含整個(gè)os。這樣在本機(jī)上運(yùn)行通過(guò)的應(yīng)用程序,就可使用Docker鏡像把應(yīng)用程序文件、所有依賴(lài)的軟件以及os都打包成一個(gè)鏡像,可在任何一個(gè)安裝了Docker的地方運(yùn)行。

    Docker鏡像解決了DevOps中微服務(wù)運(yùn)行的環(huán)境難以在本地環(huán)境、測(cè)試環(huán)境以及線上環(huán)境保持一致的難題。如此一來(lái),開(kāi)發(fā)就可以把在本地環(huán)境中運(yùn)行測(cè)試通過(guò)的代碼,以及依賴(lài)的軟件和操作系統(tǒng)本身打包成一個(gè)鏡像,然后自動(dòng)部署在測(cè)試環(huán)境中進(jìn)行測(cè)試,測(cè)試通過(guò)后再自動(dòng)發(fā)布到線上環(huán)境上去,整個(gè)開(kāi)發(fā)、測(cè)試和發(fā)布的流程就打通了。

    無(wú)論使用內(nèi)部物理機(jī)還是公有云的機(jī)器部署服務(wù),都可利用Docker鏡像封裝微服務(wù)運(yùn)行環(huán)境,從而屏蔽機(jī)器內(nèi)部物理機(jī)和公有云機(jī)器運(yùn)行環(huán)境的差異,實(shí)現(xiàn)同等對(duì)待,降低運(yùn)維復(fù)雜度。

    3 微服務(wù)容器化實(shí)踐

    Docker解決了服務(wù)運(yùn)行環(huán)境遷移問(wèn)題,因?yàn)樵谑褂肈ocker鏡像時(shí)并非把業(yè)務(wù)代碼、依賴(lài)的軟件環(huán)境以及os直接打包鏡像,而是利用Docker鏡像的分層機(jī)制,在每層編寫(xiě)Dockerfile逐層打包鏡像。
    因?yàn)殡m然不同微服務(wù)依賴(lài)的軟件環(huán)境不同,但還是存在相同,因此打包Docker鏡像時(shí),可以分層設(shè)計(jì)、逐層復(fù)用,減少每層鏡像文件大小。

    4 業(yè)務(wù)案例

    看看生產(chǎn)環(huán)境如何使用Docker鏡像。某Docker鏡像分為四層。

    基礎(chǔ)環(huán)境層
    定義操作系統(tǒng)運(yùn)行的版本、時(shí)區(qū)、語(yǔ)言、yum源、TERM等

    運(yùn)行時(shí)環(huán)境層
    定義了業(yè)務(wù)代碼的運(yùn)行時(shí)環(huán)境,比如Java代碼的運(yùn)行時(shí)環(huán)境JDK的版本。

    Web容器層
    定義了業(yè)務(wù)代碼運(yùn)行的容器的配置,比如Tomcat容器的JVM參數(shù)

    業(yè)務(wù)代碼層
    定義了實(shí)際的業(yè)務(wù)代碼的版本,比如是V4業(yè)務(wù)還是blossom業(yè)務(wù)。

    如此每層鏡像都基于上層添加新內(nèi)容,比如V4業(yè)務(wù)的Dockerfile。

    FROM registry.intra.xxx.com/xxx_rd_content/tomcat_feed:jdk8.0.40_tomcat7.0.81_g1_dns ADD confs /data1/confs/ ADD node_pool /data1/node_pool/ ADD authconfs /data1/authconfs/ ADD authkey.properties /data1/ ADD watchman.properties /data1/ ADD 200.sh /data1/xxx/bin/200.sh ADD 503.sh /data1/xxx/bin/503.sh ADD catalina.sh /data1/xxx/bin/catalina.sh ADD server.xml /data1/xxx/conf/server.xml ADD logging.properties /data1/xxx/conf/logging.properties ADD ROOT /data1/xxx/webapps/ROOT/ RUN chmod +x /data1/xxx/bin/200.sh /data1/xxx/bin/503.sh /data1/xxx/bin/catalina.sh WORKDIR /data1/xxx/bin
    • FROM代表上層鏡像文件為:tomcat_feed:jdk8.0.40_tomcat7.0.81_g1_dns,可見(jiàn)該層包含了Java運(yùn)行時(shí)環(huán)境JDK和Web容器Tomcat及Tomcat版本和JVM參數(shù)等;

    • ADD,即要在該層鏡像添加的文件,主要包含業(yè)務(wù)的代碼和配置RUN,該層鏡像啟動(dòng)時(shí)需要執(zhí)行的命令;

    • WORKDIR,該層鏡像啟動(dòng)后的工作目錄。如此便可通過(guò)Dockerfile基于上層鏡像完成該層鏡像制作。

    5 總結(jié)

    正是因?yàn)镈ocker可做到一處通過(guò)、到處運(yùn)行,對(duì)業(yè)務(wù)價(jià)值極大,解決了以前應(yīng)用程序在開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境及生產(chǎn)環(huán)境間移植難,提高了運(yùn)維自動(dòng)化水平,也為DevOps理念的流行和業(yè)務(wù)上云提供了基礎(chǔ)。

    當(dāng)然Docker也會(huì)帶來(lái)新問(wèn)題,如舊的針對(duì)物理機(jī)的運(yùn)維模式就無(wú)法適應(yīng)了,需要一種新的針對(duì)容器的運(yùn)維模式。

    于是又有了k8s等新的解決方案,本文不再展開(kāi)了。

    關(guān)于k8s:首先,他是一個(gè)全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案。Kubernetes(k8s)是Google開(kāi)源的容器集群管理系統(tǒng)(谷歌內(nèi)部:Borg)。在Docker技術(shù)的基礎(chǔ)上,為容器化的應(yīng)用提供部署運(yùn)行、資源調(diào)度、服務(wù)發(fā)現(xiàn)和動(dòng)態(tài)伸縮等一系列完整功能,提高了大規(guī)模容器集群管理的便捷性。

    總結(jié)

    以上是生活随笔為你收集整理的微服务、容器、DevOps三者之间的演进关系,你清楚吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。