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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

項目采用了微服務(wù)的后端架構(gòu)開發(fā),服務(wù)間均采用API通信,因此可以很容易做到前后端分離,前端開發(fā)技術(shù)的選擇不限。SpringCloud的使用實例服務(wù)注冊和發(fā)現(xiàn)——創(chuàng)建服務(wù)注冊中心(EurekaServer)創(chuàng)建一個Maven工程,并在pom文件中引入SpringCloudEurekaServer相關(guān)依賴EurekaServer的配置文件application.yml如右圖所示啟動一個服務(wù)注冊中心,只需要一個注解@EnableEurekaServer,需要在Springboot工程的啟動Application類上加該注解SpringCloud的使用實例服務(wù)注冊和發(fā)現(xiàn)——創(chuàng)建服務(wù)提供者(EurekaClient)創(chuàng)建一個Maven工程,并在pom文件中引入SpringCloudEurekaClient相關(guān)依賴通過注解@EnableEurekaClient表明自己是一個EurekaClient。在配置文件中注明自己的服務(wù)注冊中心的地址,application.yml配置文件如下:啟動工程,打開http://localhost:8761,即EurekaServer的網(wǎng)址,就可以看到注冊中心SpringCloud的使用實例服務(wù)消費者(Feign)新建一個Maven工程,并在pom文件中引入Feign的起步依賴spring-cloud-starter-feign、Eureka的起步依賴spring-cloud-starter-netflix-eureka-client和其他相關(guān)依賴。在程序的啟動類ServiceFeignApplication,加上@EnableFeignClients注解,開啟Feign的功能:SpringCloud的使用實例服務(wù)消費者(Feign)定義一個Feign接口,通過@FeignClient(“服務(wù)名”)來指定調(diào)用哪個服務(wù)。比如在代碼中調(diào)用了service-hi服務(wù)的“/hi”接口,代碼如下之后就可以通過SpringCloud的自動注入注解@Autowired對其他微服務(wù)進行調(diào)用,F(xiàn)eign會負責(zé)調(diào)用,并自動實現(xiàn)負載均衡SpringCloud的使用實例斷路器(Hystrix)在配置文件中加入以下代碼SchedualServiceHiHystric需要實現(xiàn)SchedualServiceHi接口,并將其注入IoC容器中,代碼如下要開啟Feign,只需在@Feign注解中加上fallback的指定類SpringCloud的使用實例路由網(wǎng)關(guān)——創(chuàng)建Zuul網(wǎng)關(guān)新建一個Maven工程,在pom文件中引入Zuul所需的spring-cloud-starter-netflixzuul、spring-cloud-starter-netflix-eureka-client和其他相關(guān)依賴。配置文件application.yml如左示代碼在其入口Application類中加上注解@EnableZuulProxy,開啟Zuul的功能:SpringCloud的使用實例路由網(wǎng)關(guān)——服務(wù)過濾Zuul不僅是路由,還能過濾,做一些安全驗證。下面的代碼展示了Zuul的鑒權(quán)功能:使用了JWT進行Token生成,在header中攜帶對應(yīng)的Token和userId的請求才允許訪問。SpringCloud的使用實例分布式配置中心(SpringCloudConfig)——構(gòu)建配置服務(wù)器創(chuàng)建一個Maven工程,引入配置服務(wù)器所需的spring-cloud-config-server和其他相關(guān)依賴。在程序的入口Application類加上@EnableConfigServer注解,開啟配置服務(wù)器的功能,代碼如下SpringCloud的使用實例分布式配置中心(SpringCloudConfig)——構(gòu)建配置服務(wù)器在程序的配置文件perties中做以下配置SpringCloud的使用實例分布式配置中心(SpringCloudConfig)——構(gòu)建配置客戶端創(chuàng)建Maven項目,引入spring-cloud-starter-config和其他相關(guān)依賴。其配置文件bootstrap.properties如下:程序的入口類,寫一個API接口“/hi”,返回從配置中心讀取的foo變量的值,代碼如下:持續(xù)集成與部署使用的技術(shù)統(tǒng)一的代碼倉庫在GitHub、Gitee、GitLab等公有或私有的代碼倉庫平臺上構(gòu)建一個Project作為項目的統(tǒng)一代碼倉庫使用Jenkins持續(xù)集成Jenkins可以結(jié)合Git版本控制工具和GitHub等云遠程代碼倉庫使用,并選擇Maven作為項目構(gòu)建工具。持續(xù)集成與部署將SpringCloud微服務(wù)封裝為Docker鏡像創(chuàng)建SpringCloud微服務(wù)對應(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,運行構(gòu)建好的微服務(wù)鏡像,并將宿主機的8762端口映射到容器的8762端口。在Eureka注冊中心中查看注冊項,注冊上后表示鏡像能夠正常使用。持續(xù)集成與部署使用Kubernetes中的Deployment部署高可用微服務(wù)Pod:Pod是可以在Kubernetes中創(chuàng)建和管理的、可部署的最小計算單元。Pod可以由一個甚至是一組共享相同運行環(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并將其部署到各個Node上,可完成更新、回滾等操作。使用以下命令創(chuàng)建Deployment:持續(xù)集成與部署零停機時間滾動部署編輯service-hi-deployment.yaml文件,修改容器鏡像來引用新的鏡像service-hi:v0.0.2,保存并執(zhí)行以下命令:可以使用以下命令檢查滾動部署的狀態(tài):持續(xù)集成與部署回滾如果當(dāng)前版本有問題,則需要回滾至前一個版本。執(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)化流程自動配置,從而使新的開發(fā)者花費最少的學(xué)習(xí)成本加入這個項目。盡可能和操作系統(tǒng)劃清界限,在各個系統(tǒng)中提供最大的可移植性。適合部署在現(xiàn)代的云計算平臺,從而在服務(wù)器和系統(tǒng)管理方面節(jié)省資源。將開發(fā)環(huán)境和生產(chǎn)環(huán)境之間的差異降至最低,并使用持續(xù)交付實施敏捷開發(fā)。可以在工具、架構(gòu)和開發(fā)流程不發(fā)生明顯變化的前提下實現(xiàn)擴展。12要素(12-Factor)應(yīng)用是一系列云原生應(yīng)用架構(gòu)的模式集合,用來說明什么樣的應(yīng)用才是云原生應(yīng)用,它們關(guān)注速度、安全、通過聲明式配置擴展、可橫向擴展的無狀態(tài)/無共享進程以及部署環(huán)境的整體松耦合云原生應(yīng)用的12要素1.基準(zhǔn)代碼“一份基準(zhǔn)代碼”是指基準(zhǔn)代碼和應(yīng)用之間總是保持一一對應(yīng)的關(guān)系。一旦有多個基準(zhǔn)代碼,則不是一個應(yīng)用,而是一個分布式系統(tǒng)。多個應(yīng)用共享一份基準(zhǔn)代碼有悖于12-Factor原則。解決方法是將共享的代碼拆成獨立的類庫,通過依賴管理去使用它們。多份部署”是指每個應(yīng)用只對應(yīng)一份基準(zhǔn)代碼,但可以同時存在多份部署,每份部署相當(dāng)于運行一個應(yīng)用的實例。區(qū)別在于:可以存在不同的配置文件對應(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)用會通過依賴清單來顯式確切地聲明所有的依賴項。在運行工程中通過依賴隔離工具來保證應(yīng)用不會去調(diào)用系統(tǒng)中存在但依賴清單中未聲明的依賴項。顯式聲明依賴項的優(yōu)點在于可以簡化環(huán)境配置流程,開發(fā)者關(guān)注應(yīng)用的基準(zhǔn)代碼,而依賴庫則由依賴庫管理工具來管理和配置。3.配置12-Factor原則要求代碼和配置嚴(yán)格分離,配置單獨存儲,避免將配置硬編碼寫在代碼中。12-Factor原則建議將應(yīng)用的配置存儲在環(huán)境變量中,環(huán)境變量可以方便在不同的部署環(huán)境中修改,而不侵入原有的代碼。環(huán)境變量的粒度要足夠小且相對獨立。云原生應(yīng)用的12要素4.后端服務(wù)對于12-Factor應(yīng)用來說,后端服務(wù)都是附加資源,沒有區(qū)別對待,當(dāng)其中一份后端服務(wù)失效后,可以切換到原先備份的后端服務(wù)中,而不需要修改代碼(可能需要修改配置)。12-Factor應(yīng)用與后端服務(wù)保持松耦合的關(guān)系。5.構(gòu)建、發(fā)布、運行12-Factor應(yīng)用嚴(yán)格區(qū)分構(gòu)建、發(fā)布、運行三個步驟,每一個發(fā)布版本對應(yīng)一個唯一的發(fā)布ID,可以使用時間戳或遞增的版本序列號。部署新代碼之前,由開發(fā)人員觸發(fā)構(gòu)建操作,構(gòu)建階段可以相對復(fù)雜一些,方便錯誤信息被展示出來并得到妥善處理。運行階段可以人為觸發(fā)或自動運行,運行階段應(yīng)該保持盡可能少的模塊。云原生應(yīng)用的12要素6.進程12-Factor應(yīng)用的進程必須是無狀態(tài)且無共享的,任何需要持久化的數(shù)據(jù)都要存儲在后端服務(wù)中。12-Factor應(yīng)用更傾向于在構(gòu)建步驟執(zhí)行二進制文件的編譯,而不是在運行階段。7.端口綁定應(yīng)用通過端口綁定提供服務(wù),并監(jiān)聽發(fā)送至該端口的請求。8.并發(fā)12-Factor應(yīng)用的進程具有無共享、水平分區(qū)的特性,使得水平擴展較為容易。12-Factor應(yīng)用的進程不需要守護進程或者寫入PID文件,而是通過進程管理器(例如systemd)來管理輸出流、響應(yīng)崩潰的進程,以及處理用戶觸發(fā)的重啟或者關(guān)閉超級進程的操作。云原生應(yīng)用的12要素9.易處理12-Factor應(yīng)用的進程是易處理的,即它們可以快速地啟動和停止,這樣有利于快速部署和彈性伸縮實例。12-Factor應(yīng)用都應(yīng)該設(shè)計能夠應(yīng)對意外的、不優(yōu)雅的退出。10.開發(fā)環(huán)境與線上環(huán)境等價12-Factor應(yīng)用想要做到持續(xù)部署就必須縮小本地與線上的差異。11.日志12-Factor應(yīng)用本身不考慮存儲自己的日志輸出流,不去寫或者管理日志文件,而是通過標(biāo)準(zhǔn)輸出(stdout)的方式實現(xiàn)。12.管理進程將管理任務(wù)當(dāng)作一次性進程來運行。一次性管理進程應(yīng)該和正常的常駐進程使用相同的運行環(huán)境。云原生應(yīng)用與傳統(tǒng)應(yīng)用的差別云原生應(yīng)用則要比傳統(tǒng)應(yīng)用更多考慮功能性需求以外的非功能性需求如何將業(yè)務(wù)拆分為一個個微服務(wù)、每個微服務(wù)需要實現(xiàn)的業(yè)務(wù)邏輯是什么、如何設(shè)計每個微服務(wù)的接口、如何降低微服務(wù)間的耦合等都是在云原生應(yīng)用需求設(shè)計階段需要回答的問題。微服務(wù)架構(gòu)還帶來許多應(yīng)用運營上的需求,如隔離故障、容錯、自動恢復(fù)、彈性擴縮容、高可用性、分布式一致性、跨云部署等,這些都不能直接使用傳統(tǒng)應(yīng)用的解決方案而是需要重新為云原生應(yīng)用進行設(shè)計的需求。在軟件生命周期中,開銷最大的階段就是軟件應(yīng)用的運維階段,云原生應(yīng)用的這些需求設(shè)計是讓應(yīng)用能夠安全、

溫馨提示

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

評論

0/150

提交評論