分布式計(jì)算、云計(jì)算與大數(shù)據(jù) 第2版 課件 第7章 云原生技術(shù)_第1頁
分布式計(jì)算、云計(jì)算與大數(shù)據(jù) 第2版 課件 第7章 云原生技術(shù)_第2頁
分布式計(jì)算、云計(jì)算與大數(shù)據(jù) 第2版 課件 第7章 云原生技術(shù)_第3頁
分布式計(jì)算、云計(jì)算與大數(shù)據(jù) 第2版 課件 第7章 云原生技術(shù)_第4頁
分布式計(jì)算、云計(jì)算與大數(shù)據(jù) 第2版 課件 第7章 云原生技術(shù)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第7章云原生技術(shù)提綱7.1 云原生的概念與架構(gòu)7.2 云原生關(guān)鍵技術(shù)7.3 云原生應(yīng)用開發(fā)7.4 云原生技術(shù)特色云原生的概念云原生計(jì)算基金會(huì)(CloudNativeComputingFoundation,CNCF)組織對(duì)云原生的定義是:云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。代表技術(shù):容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。云原生本質(zhì)上是一種基于云的軟件架構(gòu)思想,以及基于云進(jìn)行軟件開發(fā)實(shí)踐的一組方法論。通過學(xué)習(xí)云原生的應(yīng)用架構(gòu)設(shè)計(jì)理念和云原生包含的各種適用于云環(huán)境、發(fā)揮云端優(yōu)勢(shì)的技術(shù),使個(gè)人或企業(yè)能夠順利地在云端環(huán)境進(jìn)行應(yīng)用設(shè)計(jì)、開發(fā)和運(yùn)維。云原生的架構(gòu)云原生架構(gòu)有4個(gè)要點(diǎn),即微服務(wù)、容器、DevOps、持續(xù)交付云原生的架構(gòu)微服務(wù):微服務(wù)是將應(yīng)用作為小型服務(wù)集合開發(fā)的架構(gòu)方法,其中每個(gè)服務(wù)都可以實(shí)施業(yè)務(wù)功能,每個(gè)微服務(wù)都可以獨(dú)立于應(yīng)用中的其他服務(wù)進(jìn)行部署、升級(jí)、擴(kuò)展和重新啟動(dòng)。容器:容器技術(shù)是云原生概念興起的基礎(chǔ),與標(biāo)準(zhǔn)虛擬機(jī)相比,容器體積小、速度快。DevOps:通過自動(dòng)化工具協(xié)作和溝通,讓開發(fā)、測試和運(yùn)維之間能夠模糊邊界,從而更快、更頻繁地交付更穩(wěn)定的軟件。持續(xù)交付:在不影響用戶使用服務(wù)的前提下頻繁把新功能發(fā)布給用戶使用。提綱7.1 云原生的概念與架構(gòu)7.2 云原生關(guān)鍵技術(shù)7.3 云原生應(yīng)用開發(fā)7.4 云原生技術(shù)特色微服務(wù)定義微服務(wù)(microservice)是一種軟件架構(gòu)風(fēng)格,它以專注于單一責(zé)任與功能的小型功能區(qū)塊(smallbuildingblock)為基礎(chǔ),利用模塊化的方式組合出復(fù)雜的大型應(yīng)用程序,各功能區(qū)塊使用與語言無關(guān)的API集相互通信。特點(diǎn)采用模塊化的設(shè)計(jì)風(fēng)格,更加適合大型應(yīng)用開發(fā)可以將模塊化的服務(wù)跨多個(gè)服務(wù)器和基礎(chǔ)設(shè)施進(jìn)行部署,充分滿足自身業(yè)務(wù)需求,具有高度的可擴(kuò)展性

擁有出色的彈性,只要確保正確構(gòu)建,這些獨(dú)立的服務(wù)就不會(huì)彼此影響典型開發(fā)框架比較著名的有SpringCloud、Dubbo和Dropwizard等目前最為流行的開發(fā)框架為SpringCloudSpringCloudSpringCloud服務(wù)發(fā)現(xiàn)—SpringCloudNetflixEurekaEureka由EurekaServer和EurekaClient組成EurekaServer提供服務(wù)注冊(cè)服務(wù),各個(gè)EurekaClient啟動(dòng)后,會(huì)在EurekaServer中進(jìn)行注冊(cè)EurekaServer本身也是一個(gè)服務(wù),默認(rèn)情況下會(huì)自動(dòng)注冊(cè)到注冊(cè)中心EurekaServer之間可以相互注冊(cè),組成高可用的注冊(cè)中心來提高系統(tǒng)的穩(wěn)定性。當(dāng)一個(gè)服務(wù)注冊(cè)至注冊(cè)中心后,相當(dāng)于在集群中發(fā)現(xiàn)了該服務(wù),這樣當(dāng)服務(wù)消費(fèi)者需要通過遠(yuǎn)程調(diào)用獲取這個(gè)服務(wù)的內(nèi)容時(shí),就可以通過注冊(cè)中心找到該服務(wù)。SpringCloud客戶端負(fù)載均衡—SpringCloudNetflixRibbon在微服務(wù)架構(gòu)中,一個(gè)服務(wù)可能會(huì)被部署多份以提高服務(wù)的可用性,當(dāng)多個(gè)相同服務(wù)的提供者被注冊(cè)至注冊(cè)中心后,注冊(cè)中心會(huì)注冊(cè)該服務(wù)的所有提供者,當(dāng)服務(wù)消費(fèi)者需要調(diào)用該服務(wù)時(shí),注冊(cè)中心會(huì)查詢所有可用的服務(wù)提供者,這時(shí)可以通過Ribbon基于負(fù)載均衡算法做到負(fù)載均衡地請(qǐng)求其中一個(gè)服務(wù)提供者實(shí)例。Ribbon(負(fù)載均衡器)的作用正是提供負(fù)載均衡機(jī)制,當(dāng)為Ribbon配置服務(wù)提供者地址列表后,Ribbon就可以基于某種負(fù)載均衡算法,自動(dòng)幫助服務(wù)消費(fèi)者處理請(qǐng)求。Ribbon提供的負(fù)載均衡算法有多種,例如輪詢、加權(quán)響應(yīng)時(shí)間、隨機(jī)和區(qū)域感知輪詢。SpringCloud斷路器—SpringCloudNetflixHystrix斷路器能夠統(tǒng)計(jì)一段時(shí)間內(nèi)調(diào)用失敗的次數(shù),并決定是正常請(qǐng)求依賴的服務(wù)還是直接返回。當(dāng)對(duì)特定服務(wù)的調(diào)用的不可用達(dá)到一個(gè)閾值(Hystrix是5秒20次)時(shí),斷路器將會(huì)被打開。斷路器被打開后,可以避免連鎖故障,fallback方法直接返回一個(gè)固定值SpringCloud服務(wù)消費(fèi)者—SpringCloudOpenFeignFeign是一種聲明式、模板化的HTTP客戶端,主要作為服務(wù)消費(fèi)者用于調(diào)用其他服務(wù)。Feign大大簡化了服務(wù)調(diào)用客戶端的開發(fā)量,通過簡單的注解就能完成對(duì)服務(wù)提供方的接口綁定。Feign整合了Ribbon,所以能夠做到負(fù)載均衡地調(diào)用服務(wù)。Feign也整合了Hystrix,所以具有斷路器的功能,當(dāng)服務(wù)調(diào)用失敗后,會(huì)返回預(yù)先設(shè)定的fallback函數(shù)的值。SpringCloud服務(wù)網(wǎng)關(guān)—SpringCloudNetflixZuul當(dāng)一個(gè)請(qǐng)求到達(dá)系統(tǒng)后,應(yīng)該最先到達(dá)網(wǎng)關(guān),由網(wǎng)關(guān)進(jìn)行統(tǒng)一鑒權(quán)等操作后再將請(qǐng)求轉(zhuǎn)發(fā)至各個(gè)具體的服務(wù)。Zuul的主要功能是路由轉(zhuǎn)發(fā)和過濾器。Zuul默認(rèn)和Ribbon結(jié)合實(shí)現(xiàn)了負(fù)載均衡的功能。分布式配置—SpringCloudConfig動(dòng)態(tài)拉取遠(yuǎn)程數(shù)據(jù)倉庫的配置文件,并把配置文件應(yīng)用至對(duì)應(yīng)的微服務(wù)中容器概念:容器是一種允許在資源隔離的過程中運(yùn)行應(yīng)用程序和其依賴項(xiàng)的、輕量的、操作系統(tǒng)級(jí)別的虛擬化技術(shù),運(yùn)行應(yīng)用程序所需的所有必要組件都被打包為單個(gè)鏡像,該鏡像是可以重復(fù)使用的。當(dāng)鏡像運(yùn)行時(shí),它運(yùn)行在獨(dú)立的環(huán)境中,并不會(huì)和其他的應(yīng)用共享主機(jī)操作系統(tǒng)的內(nèi)存、CPU或磁盤。容器特點(diǎn):容器實(shí)現(xiàn)的是操作系統(tǒng)級(jí)虛擬化,具有輕量級(jí)的特點(diǎn),與虛擬機(jī)相比較,容器性能更好,一般能做到秒級(jí)啟動(dòng)。容器沒有自己的OS,直接共享宿主機(jī)的內(nèi)核,也沒有管理程序(hypervisor)這一層進(jìn)行資源隔離和限制,所有對(duì)于容器進(jìn)程的限制都是基于操作系統(tǒng)本身的能力來進(jìn)行的。容器在版本控制、計(jì)算環(huán)境可移植性和標(biāo)準(zhǔn)化方面也有很多優(yōu)點(diǎn)。容器Docker容器技術(shù):用于研發(fā)、測試、交付和運(yùn)行軟件應(yīng)用的容器引擎。容器Docker使用戶可以在容器中封裝和運(yùn)行軟件應(yīng)用。高資源利用率與隔離性使我們可以在同一時(shí)間、同一服務(wù)器上運(yùn)行多個(gè)容器。容器輕量的特性使它們可以在系統(tǒng)內(nèi)核中直接運(yùn)行,而不需要對(duì)應(yīng)用的額外負(fù)載進(jìn)行管理。Kubernetes概念:Kubernetes是一個(gè)可移植的、可擴(kuò)展的開源平臺(tái),用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動(dòng)化。功能服務(wù)發(fā)現(xiàn)和負(fù)載均衡存儲(chǔ)編排自動(dòng)部署和回滾自動(dòng)完成裝箱計(jì)算自我修復(fù)密鑰與配置管理特性不限制支持的應(yīng)用程序類型不部署源代碼,也不構(gòu)建應(yīng)用程序不提供應(yīng)用程序級(jí)別的服務(wù)作為內(nèi)置服務(wù)不要求日志記錄、監(jiān)視或警報(bào)解決方案不提供或不要求配置語言/系統(tǒng)不提供也不采用任何全面的機(jī)器配置、維護(hù)、管理或自我修復(fù)系統(tǒng)。Kubernetes架構(gòu)主從分布式結(jié)構(gòu),其節(jié)點(diǎn)在角色上分為Master節(jié)點(diǎn)和Node節(jié)點(diǎn)最小部署單元:

PodMaster組件:APIServeretcdControllerManagerSchedulerNode組件:KubeletProxy容器運(yùn)行時(shí)服務(wù)網(wǎng)格概念服務(wù)網(wǎng)格是一個(gè)專門處理服務(wù)通信的基礎(chǔ)設(shè)施層。它的職責(zé)是在由云原生應(yīng)用組成服務(wù)的復(fù)雜拓?fù)浣Y(jié)構(gòu)下進(jìn)行可靠的請(qǐng)求傳送。架構(gòu)服務(wù)網(wǎng)格的基礎(chǔ)設(shè)施層主要分為兩部分:控制平面與數(shù)據(jù)平面。每個(gè)服務(wù)實(shí)例都與一個(gè)反向代理服務(wù)器實(shí)例配對(duì)特點(diǎn)微服務(wù)治理與業(yè)務(wù)邏輯解耦可以實(shí)現(xiàn)異構(gòu)系統(tǒng)的統(tǒng)一治理一定的可觀察性和流量控制提供了保護(hù)網(wǎng)絡(luò)調(diào)用的功能和基礎(chǔ)設(shè)施提綱7.1 云原生的概念與架構(gòu)7.2 云原生關(guān)鍵技術(shù)7.3 云原生應(yīng)用開發(fā)7.4 云原生技術(shù)特色實(shí)例概述云原生應(yīng)用開發(fā)實(shí)例——線上考試系統(tǒng)業(yè)務(wù):集題庫、組卷、發(fā)布、考試、評(píng)卷、系統(tǒng)考試報(bào)告業(yè)務(wù)閉環(huán)的考試平臺(tái)設(shè)計(jì):使用SaaS模式基于SpringCloud的微服務(wù)技術(shù)構(gòu)建。在數(shù)據(jù)的設(shè)計(jì)模式上為每一個(gè)租戶新建獨(dú)立的Schema或者Database共享數(shù)據(jù)庫實(shí)例,因?yàn)榭荚嚪?wù)為互聯(lián)網(wǎng)應(yīng)用,所以選擇SpringCloud微服務(wù)技術(shù)為項(xiàng)目基礎(chǔ)支撐技術(shù),同時(shí)使用Kubernetes容器編排系統(tǒng)進(jìn)行考試系統(tǒng)的部署和運(yùn)維。考試系統(tǒng)主要分為基礎(chǔ)數(shù)據(jù)服務(wù)、系統(tǒng)管理、試卷中心、考試中心四個(gè)模塊系統(tǒng)設(shè)計(jì)系統(tǒng)架構(gòu)設(shè)計(jì)

采用分布式體系架構(gòu)設(shè)計(jì),前端由Nginx服務(wù)器反向代理,訪問網(wǎng)關(guān),由網(wǎng)關(guān)將請(qǐng)求分發(fā)給對(duì)應(yīng)微服務(wù),服務(wù)與服務(wù)之間通過Feign進(jìn)行數(shù)據(jù)接口的調(diào)用,服務(wù)均被注冊(cè)至Eureka中,將SpringCloud微服務(wù)使用Kubernetes進(jìn)行容器化部署。系統(tǒng)設(shè)計(jì)功能模塊劃分

系統(tǒng)設(shè)計(jì)基礎(chǔ)框架設(shè)計(jì):主要分為以下5個(gè)部分es-util:工具類es-log:統(tǒng)一異常處理切面、錯(cuò)誤碼,統(tǒng)一日志收集切面es-core:Entity、DTO、Controller等Base類、請(qǐng)求應(yīng)答報(bào)文類、封裝公共字段注解自動(dòng)注入功能切面es-cache-redis:RedisAPI封裝、Redis分布式鎖es-config:集成Swagger,便于查看API發(fā)布系統(tǒng)設(shè)計(jì)功能模塊詳細(xì)設(shè)計(jì)

以系統(tǒng)管理微服務(wù)為例,系統(tǒng)管理微服務(wù)主要包括組織機(jī)構(gòu)管理模塊、公司管理模塊、部門管理模塊、資源管理模塊、職位管理模塊、用戶管理模塊、角色管理模塊、參數(shù)管理模塊、用戶在線管理模塊和登錄模塊。系統(tǒng)管理微服務(wù)的設(shè)計(jì)主要包括以下幾個(gè)方面:各個(gè)層級(jí)POJO的Base類設(shè)計(jì)Controller的Base類設(shè)計(jì)持久層框架的設(shè)計(jì)錯(cuò)誤碼的設(shè)計(jì)API的設(shè)計(jì)系統(tǒng)設(shè)計(jì)動(dòng)態(tài)模型設(shè)計(jì)

動(dòng)態(tài)模型用于描述系統(tǒng)的過程和行為,通常使用時(shí)序圖、流程圖、狀態(tài)圖和活動(dòng)圖等描述系統(tǒng)的動(dòng)態(tài)模型,可以將需求設(shè)計(jì)明確化、可視化。通過動(dòng)態(tài)模型的評(píng)估,可以及時(shí)發(fā)現(xiàn)系統(tǒng)中設(shè)計(jì)的缺陷,避免不必要的損失。下圖為系統(tǒng)管理微服務(wù)中的功能流程圖(右圖接下)系統(tǒng)設(shè)計(jì)動(dòng)態(tài)模型設(shè)計(jì)

系統(tǒng)網(wǎng)關(guān)的工作時(shí)序圖系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn)流程首先在本地和服務(wù)器上配置好所需要的環(huán)境,搭建公用代碼倉庫,進(jìn)行SpringCloudConfig配置,以便分布式部署同步配置文件根據(jù)所設(shè)計(jì)的E-R圖構(gòu)建相應(yīng)的數(shù)據(jù)庫和表,規(guī)范好每個(gè)字段對(duì)應(yīng)的屬性和主外鍵約束,并錄入一些示例數(shù)據(jù)每位工程師開發(fā)各自負(fù)責(zé)的基礎(chǔ)框架,并把它們集成為基礎(chǔ)框架es-common進(jìn)行第一次集成開發(fā),每位工程師開發(fā)自己負(fù)責(zé)的部分,開發(fā)完成后進(jìn)行第一次集成測試進(jìn)行第二次集成開發(fā),每位組員開發(fā)各自負(fù)責(zé)的部分,開發(fā)完成后進(jìn)行第二次集成測試。開發(fā)模式按照第一次集成開發(fā)的模式前端開發(fā)最終集成測試各個(gè)模塊功能,修復(fù)Bug將本地部署的服務(wù)遷到云服務(wù)器,使用Kubernetes進(jìn)行編排管理系統(tǒng)實(shí)現(xiàn)開發(fā)可能需要的軟件系統(tǒng)實(shí)現(xiàn)開發(fā)可能需要的插件系統(tǒng)實(shí)現(xiàn)后端服務(wù)的開發(fā)編寫所需功能的API編寫該功能模塊對(duì)應(yīng)的ExceptionCode枚舉類,在Service層拋出Service異常,在Controller層拋出Business異常編寫該功能所涉及的DTO、VO、Query、QueryVO等POJO編寫Service接口與對(duì)應(yīng)的實(shí)現(xiàn)類,實(shí)現(xiàn)類主要使用所配置的Tk.MyBatis通用Mapper實(shí)現(xiàn),無須XML配置的單表增刪改查操作編寫Controller對(duì)API進(jìn)行實(shí)現(xiàn)在Controller中使用Service進(jìn)行服務(wù)調(diào)用,并進(jìn)行一些數(shù)據(jù)驗(yàn)證,不符合則拋出異常Controller的方法中需要對(duì)入?yún)⑦M(jìn)行參數(shù)驗(yàn)證、以保證進(jìn)入方法中參數(shù)的合法性系統(tǒng)實(shí)現(xiàn)前端的實(shí)現(xiàn)

項(xiàng)目采用了微服務(wù)的后端架構(gòu)開發(fā),服務(wù)間均采用API通信,因此可以很容易做到前后端分離,前端開發(fā)技術(shù)的選擇不限。SpringCloud的使用實(shí)例服務(wù)注冊(cè)和發(fā)現(xiàn)——?jiǎng)?chuàng)建服務(wù)注冊(cè)中心(EurekaServer)創(chuàng)建一個(gè)Maven工程,并在pom文件中引入SpringCloudEurekaServer相關(guān)依賴EurekaServer的配置文件application.yml如右圖所示啟動(dòng)一個(gè)服務(wù)注冊(cè)中心,只需要一個(gè)注解@EnableEurekaServer,需要在Springboot工程的啟動(dòng)Application類上加該注解SpringCloud的使用實(shí)例服務(wù)注冊(cè)和發(fā)現(xiàn)——?jiǎng)?chuàng)建服務(wù)提供者(EurekaClient)創(chuàng)建一個(gè)Maven工程,并在pom文件中引入SpringCloudEurekaClient相關(guān)依賴通過注解@EnableEurekaClient表明自己是一個(gè)EurekaClient。在配置文件中注明自己的服務(wù)注冊(cè)中心的地址,application.yml配置文件如下:啟動(dòng)工程,打開http://localhost:8761,即EurekaServer的網(wǎng)址,就可以看到注冊(cè)中心SpringCloud的使用實(shí)例服務(wù)消費(fèi)者(Feign)新建一個(gè)Maven工程,并在pom文件中引入Feign的起步依賴spring-cloud-starter-feign、Eureka的起步依賴spring-cloud-starter-netflix-eureka-client和其他相關(guān)依賴。在程序的啟動(dòng)類ServiceFeignApplication,加上@EnableFeignClients注解,開啟Feign的功能:SpringCloud的使用實(shí)例服務(wù)消費(fèi)者(Feign)定義一個(gè)Feign接口,通過@FeignClient(“服務(wù)名”)來指定調(diào)用哪個(gè)服務(wù)。比如在代碼中調(diào)用了service-hi服務(wù)的“/hi”接口,代碼如下之后就可以通過SpringCloud的自動(dòng)注入注解@Autowired對(duì)其他微服務(wù)進(jìn)行調(diào)用,F(xiàn)eign會(huì)負(fù)責(zé)調(diào)用,并自動(dòng)實(shí)現(xiàn)負(fù)載均衡SpringCloud的使用實(shí)例斷路器(Hystrix)在配置文件中加入以下代碼SchedualServiceHiHystric需要實(shí)現(xiàn)SchedualServiceHi接口,并將其注入IoC容器中,代碼如下要開啟Feign,只需在@Feign注解中加上fallback的指定類SpringCloud的使用實(shí)例路由網(wǎng)關(guān)——?jiǎng)?chuàng)建Zuul網(wǎng)關(guān)新建一個(gè)Maven工程,在pom文件中引入Zuul所需的spring-cloud-starter-netflixzuul、spring-cloud-starter-netflix-eureka-client和其他相關(guān)依賴。配置文件application.yml如左示代碼在其入口Application類中加上注解@EnableZuulProxy,開啟Zuul的功能:SpringCloud的使用實(shí)例路由網(wǎng)關(guān)——服務(wù)過濾Zuul不僅是路由,還能過濾,做一些安全驗(yàn)證。下面的代碼展示了Zuul的鑒權(quán)功能:使用了JWT進(jìn)行Token生成,在header中攜帶對(duì)應(yīng)的Token和userId的請(qǐng)求才允許訪問。SpringCloud的使用實(shí)例分布式配置中心(SpringCloudConfig)——構(gòu)建配置服務(wù)器創(chuàng)建一個(gè)Maven工程,引入配置服務(wù)器所需的spring-cloud-config-server和其他相關(guān)依賴。在程序的入口Application類加上@EnableConfigServer注解,開啟配置服務(wù)器的功能,代碼如下SpringCloud的使用實(shí)例分布式配置中心(SpringCloudConfig)——構(gòu)建配置服務(wù)器在程序的配置文件perties中做以下配置SpringCloud的使用實(shí)例分布式配置中心(SpringCloudConfig)——構(gòu)建配置客戶端創(chuàng)建Maven項(xiàng)目,引入spring-cloud-starter-config和其他相關(guān)依賴。其配置文件bootstrap.properties如下:程序的入口類,寫一個(gè)API接口“/hi”,返回從配置中心讀取的foo變量的值,代碼如下:持續(xù)集成與部署使用的技術(shù)統(tǒng)一的代碼倉庫在GitHub、Gitee、GitLab等公有或私有的代碼倉庫平臺(tái)上構(gòu)建一個(gè)Project作為項(xiàng)目的統(tǒng)一代碼倉庫使用Jenkins持續(xù)集成Jenkins可以結(jié)合Git版本控制工具和GitHub等云遠(yuǎn)程代碼倉庫使用,并選擇Maven作為項(xiàng)目構(gòu)建工具。持續(xù)集成與部署將SpringCloud微服務(wù)封裝為Docker鏡像創(chuàng)建SpringCloud微服務(wù)對(duì)應(yīng)的Dockerfile文件。這里使用7.3.4節(jié)中的service-hi服務(wù)提供者,具體如下:使用命令dockerbuild-tservice-hi:v0.0.1構(gòu)建Docker鏡像。使用命令dockerrun--nameservice-hi-d-p8762:8762service-hi:v0.0.1,運(yùn)行構(gòu)建好的微服務(wù)鏡像,并將宿主機(jī)的8762端口映射到容器的8762端口。在Eureka注冊(cè)中心中查看注冊(cè)項(xiàng),注冊(cè)上后表示鏡像能夠正常使用。持續(xù)集成與部署使用Kubernetes中的Deployment部署高可用微服務(wù)Pod:Pod是可以在Kubernetes中創(chuàng)建和管理的、可部署的最小計(jì)算單元。Pod可以由一個(gè)甚至是一組共享相同運(yùn)行環(huán)境的容器組成。執(zhí)行以下命令可以創(chuàng)建Pod:持續(xù)集成與部署使用Kubernetes中的Deployment部署高可用微服務(wù)Service:Kubernetes的Service資源為一組提供相同功能服務(wù)的Pod充當(dāng)入口執(zhí)行以下命令創(chuàng)建該Service,把服務(wù)和8762端口暴露出來:持續(xù)集成與部署使用Kubernetes中的Deployment部署高可用微服務(wù)Deployment:Deployment可以創(chuàng)建指定數(shù)量的Pod并將其部署到各個(gè)Node上,可完成更新、回滾等操作。使用以下命令創(chuàng)建Deployment:持續(xù)集成與部署零停機(jī)時(shí)間滾動(dòng)部署編輯service-hi-deployment.yaml文件,修改容器鏡像來引用新的鏡像service-hi:v0.0.2,保存并執(zhí)行以下命令:可以使用以下命令檢查滾動(dòng)部署的狀態(tài):持續(xù)集成與部署回滾如果當(dāng)前版本有問題,則需要回滾至前一個(gè)版本。執(zhí)行以下命令:

返回:再執(zhí)行:

返回:提綱7.1 云原生的概念與架構(gòu)7.2 云原生關(guān)鍵技術(shù)7.3 云原生應(yīng)用開發(fā)7.4 云原生技術(shù)特色云原生應(yīng)用的12要素目的:為構(gòu)建如下的軟件即服務(wù)(SaaS)應(yīng)用提供方法論使用標(biāo)準(zhǔn)化流程自動(dòng)配置,從而使新的開發(fā)者花費(fèi)最少的學(xué)習(xí)成本加入這個(gè)項(xiàng)目。盡可能和操作系統(tǒng)劃清界限,在各個(gè)系統(tǒng)中提供最大的可移植性。適合部署在現(xiàn)代的云計(jì)算平臺(tái),從而在服務(wù)器和系統(tǒng)管理方面節(jié)省資源。將開發(fā)環(huán)境和生產(chǎn)環(huán)境之間的差異降至最低,并使用持續(xù)交付實(shí)施敏捷開發(fā)??梢栽诠ぞ?、架構(gòu)和開發(fā)流程不發(fā)生明顯變化的前提下實(shí)現(xiàn)擴(kuò)展。12要素(12-Factor)應(yīng)用是一系列云原生應(yīng)用架構(gòu)的模式集合,用來說明什么樣的應(yīng)用才是云原生應(yīng)用,它們關(guān)注速度、安全、通過聲明式配置擴(kuò)展、可橫向擴(kuò)展的無狀態(tài)/無共享進(jìn)程以及部署環(huán)境的整體松耦合云原生應(yīng)用的12要素1.基準(zhǔn)代碼“一份基準(zhǔn)代碼”是指基準(zhǔn)代碼和應(yīng)用之間總是保持一一對(duì)應(yīng)的關(guān)系。一旦有多個(gè)基準(zhǔn)代碼,則不是一個(gè)應(yīng)用,而是一個(gè)分布式系統(tǒng)。多個(gè)應(yīng)用共享一份基準(zhǔn)代碼有悖于12-Factor原則。解決方法是將共享的代碼拆成獨(dú)立的類庫,通過依賴管理去使用它們。多份部署”是指每個(gè)應(yīng)用只對(duì)應(yīng)一份基準(zhǔn)代碼,但可以同時(shí)存在多份部署,每份部署相當(dāng)于運(yùn)行一個(gè)應(yīng)用的實(shí)例。區(qū)別在于:可以存在不同的配置文件對(duì)應(yīng)不同的環(huán)境,例如開發(fā)環(huán)境、測試環(huán)境、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境等??梢允褂貌煌陌姹?。云原生應(yīng)用的12要素2.依賴12-Factor原則下的應(yīng)用會(huì)通過依賴清單來顯式確切地聲明所有的依賴項(xiàng)。在運(yùn)行工程中通過依賴隔離工具來保證應(yīng)用不會(huì)去調(diào)用系統(tǒng)中存在但依賴清單中未聲明的依賴項(xiàng)。顯式聲明依賴項(xiàng)的優(yōu)點(diǎn)在于可以簡化環(huán)境配置流程,開發(fā)者關(guān)注應(yīng)用的基準(zhǔn)代碼,而依賴庫則由依賴庫管理工具來管理和配置。3.配置12-Factor原則要求代碼和配置嚴(yán)格分離,配置單獨(dú)存儲(chǔ),避免將配置硬編碼寫在代碼中。12-Factor原則建議將應(yīng)用的配置存儲(chǔ)在環(huán)境變量中,環(huán)境變量可以方便在不同的部署環(huán)境中修改,而不侵入原有的代碼。環(huán)境變量的粒度要足夠小且相對(duì)獨(dú)立。云原生應(yīng)用的12要素4.后端服務(wù)對(duì)于12-Factor應(yīng)用來說,后端服務(wù)都是附加資源,沒有區(qū)別對(duì)待,當(dāng)其中一份后端服務(wù)失效后,可以切換到原先備份的后端服務(wù)中,而不需要修改代碼(可能需要修改配置)。12-Factor應(yīng)用與后端服務(wù)保持松耦合的關(guān)系。5.構(gòu)建、發(fā)布、運(yùn)行12-Factor應(yīng)用嚴(yán)格區(qū)分構(gòu)建、發(fā)布、運(yùn)行三個(gè)步驟,每一個(gè)發(fā)布版本對(duì)應(yīng)一個(gè)唯一的發(fā)布ID,可以使用時(shí)間戳或遞增的版本序列號(hào)。部署新代碼之前,由開發(fā)人員觸發(fā)構(gòu)建操作,構(gòu)建階段可以相對(duì)復(fù)雜一些,方便錯(cuò)誤信息被展示出來并得到妥善處理。運(yùn)行階段可以人為觸發(fā)或自動(dòng)運(yùn)行,運(yùn)行階段應(yīng)該保持盡可能少的模塊。云原生應(yīng)用的12要素6.進(jìn)程12-Factor應(yīng)用的進(jìn)程必須是無狀態(tài)且無共享的,任何需要持久化的數(shù)據(jù)都要存儲(chǔ)在后端服務(wù)中。12-Factor應(yīng)用更傾向于在構(gòu)建步驟執(zhí)行二進(jìn)制文件的編譯,而不是在運(yùn)行階段。7.端口綁定應(yīng)用通過端口綁定提供服務(wù),并監(jiān)聽發(fā)送至該端口的請(qǐng)求。8.并發(fā)12-Factor應(yīng)用的進(jìn)程具有無共享、水平分區(qū)的特性,使得水平擴(kuò)展較為容易。12-Factor應(yīng)用的進(jìn)程不需要守護(hù)進(jìn)程或者寫入PID文件,而是通過進(jìn)程管理器(例如systemd)來管理輸出流、響應(yīng)崩潰的進(jìn)程,以及處理用戶觸發(fā)的重啟或者關(guān)閉超級(jí)進(jìn)程的操作。云原生應(yīng)用的12要素9.易處理12-Factor應(yīng)用的進(jìn)程是易處理的,即它們可以快速地啟動(dòng)和停止,這樣有利于快速部署和彈性伸縮實(shí)例。12-Factor應(yīng)用都應(yīng)該設(shè)計(jì)能夠應(yīng)對(duì)意外的、不優(yōu)雅的退出。10.開發(fā)環(huán)境與線上環(huán)境等價(jià)12-Factor應(yīng)用想要做到持續(xù)部署就必須縮小本地與線上的差異。11.日志12-Factor應(yīng)用本身不考慮存儲(chǔ)自己的日志輸出流,不去寫或者管理日志文件,而是通過標(biāo)準(zhǔn)輸出(stdout)的方式實(shí)現(xiàn)。12.管理進(jìn)程將管理任務(wù)當(dāng)作一次性進(jìn)程來運(yùn)行。一次性管理進(jìn)程應(yīng)該和正常的常駐進(jìn)程使用相同的運(yùn)行環(huán)境。云原生應(yīng)用與傳統(tǒng)應(yīng)用的差別云原生應(yīng)用則要比傳統(tǒng)應(yīng)用更多考慮功能性需求以外的非功能性需求如何將業(yè)務(wù)拆分為一個(gè)個(gè)微服務(wù)、每個(gè)微服務(wù)需要實(shí)現(xiàn)的業(yè)務(wù)邏輯是什么、如何設(shè)計(jì)每個(gè)微服務(wù)的接口、如何降低微服務(wù)間的耦合等都是在云原生應(yīng)用需求設(shè)計(jì)階段需要回答的問題。微服務(wù)架構(gòu)還帶來許多應(yīng)用運(yùn)營上的需求,如隔離故障、容錯(cuò)、自動(dòng)恢復(fù)、彈性擴(kuò)縮容、高可用性、分布式一致性、跨云部署等,這些都不能直接使用傳統(tǒng)應(yīng)用的解決方案而是需要重新為云原生應(yīng)用進(jìn)行設(shè)計(jì)的需求。在軟件生命周期中,開銷最大的階段就是軟件應(yīng)用的運(yùn)維階段,云原生應(yīng)用的這些需求設(shè)計(jì)是讓應(yīng)用能夠安全、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論