Go语言云原生与微服务(一)云原生架构
Hello,我是普通Gopher,00后男孩,極致的共享主義者,想要成為一個終身學習者。專注于做最通俗易懂的計算機基礎知識類公眾號。每天推送Golang技術干貨,內容起于K8S而不止于K8S,涉及Docker、微服務、DevOps、數據庫、虛擬化等云計算內容及SRE經驗總結
=======================
初次見面,我為你準備了100G學習大禮包:
1、《百余本最新計算機電子圖書》
2、《30G Golang學習視頻》
3、《20G Java學習視頻》
4、《90G Liunx高級學習視頻》
5、《10G 算法(含藍橋杯真題)學習視頻》
6、《英語四級,周杰倫歌曲免費送!》
路過麻煩動動小手,點個關注,持續更新技術文章與資料!
本人在學習云原生與微服務架構中的總結資料,參考書籍《Go語言高并發與微服務實戰》
僅以此文記錄學習過程。
云原生架構之前(即傳統飛云原生應用),底層平臺負責向上提供運行資源,而應用需要滿足業務需求和非業務需求。為了更好地使代碼復用,通用性好的非業務需求的實現,往往會以類庫和開發框架的方式提供。在SoA、 微服務時代,部分功能會以后端服務的方式存在,在應用中被簡化為對其客戶端的調用代碼,然后應用將這些功能連同自身的業務實現代碼一起打包。而云的出現,可以在提供各種資源之外,還提供各種能力(如基礎設施,以及基礎設施的中間件等),從而幫助應用,使得應用可以專注于業務需求的實現。隨著云原生技術理念在行業內進一步實踐發展,云原生架構完成了IT架構在云計算時代的進化升級。以CI/CD、DevOps和微服務架構為代表的云原生技術,以其高效穩定、快速響應的特點引領企業的業務發展,幫助企業構建更加適用于云上的應用服務。對企業而言,新舊IT架構的轉型與企業數字化的迫切需求也為云原生技術提供了很好的契機,云原生技術在行業的應用持續深化。
1.1 云計算的歷史
云計算的發展分為三個階段:虛擬化的出現、虛擬化在云計算中的應用以及容器化的出現。云計算目前在高速發展。
1.1.1 云計算的基礎:虛擬化技術
云計算的歷史事實上需要追溯到60多年前的計算機遠古歷史:
1955年,John McCarthy(備注:John McCarthy是Artificial Intelligence/人工智能一詞的提出者)創造了一種在用戶群中共享計算時間的理論。
1959年6月,在國際信息處理大會上克里斯托弗Christopher Strachey發表了《Time Sharing in Large Fast Computer》論文,提出了虛擬化概念。該文被公認為虛擬化技術的最早論述。
1965年8月,IBM推出System/360 Model 67 和 TSS 分時共享系統(Time Sharing System),通過虛擬機監視器(Virtual Machine Monitor)虛擬所有的硬件接口,允許多個用戶共享同一高性能計算設備的使用時間,也就是最原始的虛擬機技術。
在20世紀60年代中期,美國計算機科學家 JCR Licklider 提出計算機互聯系統(an interconnected system of computers)的想法。
1969年,在 JCR Licklider 的革命性創意的幫助下,Bob Taylor 和 Larry Roberts 開發了互聯網的前身 ARPANET(Advanced Research Projects Agency Network),允許不同物理位置的計算機進行網絡連接和資源共享。
1972年,IBM發布了名為VM(Virtual Machine)的操作系統。在90年代,虛擬機的使用開始流行
1974年,Popek和Goldberg發表了《Formal Requirements for Virtualizable Third Generation Architectures》提出了虛擬化準備的充分條件,指出滿足條件的控制程序可以被稱為虛擬機監視器Virtual Machine Monitor (VMM):(1)一致性:一個運行于虛擬機上的程序,其行為應當與直接運行于物理機上的行為基本一致,只允許有細微的差異如系統時間方面;(2)可控性:VMM對系統資源有完全的控制能力和管理權限;(3)高效性:絕大部分的虛擬機指令應當由硬件直接執行而無需VMM的參與。
1978年,IBM獲得了獨立磁盤冗余陣列(Redundant Arrays of Independent Disks,RAID)概念的專利。該專利將物理設備組合為池,然后從池中切出一組邏輯單元號(Logical Unit Number,LUN)并將其提供給主機使用。雖然該技術直到1988年IBM才與加利福尼亞州立大學伯克利分校聯合開發了第一個實用版本,但該專利第1次將虛擬化技術引入存儲之中。
“Time-Sharing”的背景:自20世紀50年代,人類使用大型計算機系統來處理數據。而在早期,大型計算機體積龐大而且價格高昂。為了提高投資回報率,購買大型機的組織開始實施“分時調度(time-sharing)”,然后從沒有處理能力的終端訪問大型計算機。“分時”理論可以充分利用可用的計算時間,可以用于為無力購買自己的大型機的小公司提供計算時間。
這里便陸續出現了云計算的基本前提:共享計算能力和共享網絡,并出現了虛擬機,虛擬網絡和早期基礎設施。
但是在2000年前后虛擬化技術成熟之前,市場處于物理機時代。當時如果要啟用一個新的應用,需要購買一臺或者一個機架的新服務器。
1.1.2 虛擬化技術成熟
在2000年前后,虛擬化技術逐漸發展成熟:
1998年,VMware成立并首次引入X86的虛擬技術,通過運行在Windows NT上的VMware來啟動Windows 95。
1999年,VMWare推出可在X86平臺上流暢運行的第一款VMware Workstation,從此虛擬化技術終于走下了大型機的神話。之后,研發人員和發燒友開始在普通PC和工作站上大量使用該虛擬化解決方案。
1999年,IEEE頒布了用以標準化VLAN實現方案的802.1Q協議標準草案,從而可以將大型網絡劃分為多個小網絡,使得廣播和組播流量不會占據更多帶寬的問題;同時,可以利用VLAN標簽提供更高的網絡段間的安全性。
2000年,IEEE頒布了虛擬專用網(Virtual Private Network)VPN標準草案,從而使得私有網絡可以跨公網進行建立。
2000年,Citrix桌面虛擬化產品正式發布。
2001年,VMware發布了第一個針對x86服務器的虛擬化產品ESX和GSX,即ESX-i的前身。
2003年10月,Xen虛擬化項目首次面世推出了1.0版本,此時僅支持半虛擬化Para-Virtualization。之后,基于Xen虛擬化解決方案陸續被Redhat、Novell和Sun等的Linux發行版集成,作為默認的虛擬化解決方案。
2003年,Microsoft收購Connectix獲得虛擬化技術進入桌面虛擬化領域,之后很快推出了Virtual Server免費版。
2005年,Xen 3.0發布,該版本可以在32位服務器上運行,同時該版本開始正式支持Intel的VT技術和IA64架構,從而使得Xen虛擬機可以運行完全沒有修改的操作系統。該版本是Xen真正意義上可用的版本。
2006年10月,以色列的創業公司Qumranet在完成了虛擬化Hypervisor基本功能、動態遷移以及主要的性能優化之后,正式對外宣布了KVM的誕生。同年10月,KVM模塊的源代碼被正式接納進入Linux Kernel,成為內核源代碼的一部分。備注:Qumranet在2008年被RedHat收購。
2009年4月,VMware推出業界首款云操作系統VMware vSphere。
云計算的重要里程碑之一是2001年VMWare帶來的可用于X86的虛擬化計劃。通過虛擬機,可以在同一臺物理機器上運行多個虛擬機,這意味著可以降低服務器的數量,而且速度和彈性也遠超物理機。
1.1.3 基于虛擬機的云計算
在虛擬化技術成熟之后,云計算市場才真正出現,此時基于虛擬機技術誕生了眾多的云計算產品,也陸續出現了IaaS、PaaS等平臺和公有云、私有云、混合云等形態:
2006年,AWS推出首批云產品Simple Storage Service (S3)和Elastic Compute Cloud(EC2),使企業可以利用AWS的基礎設施構建自己的應用程序
2008年4月,Google App Engine發布,是 Google 管理的數據中心中用于 WEB 應用程序的開發和托管的平臺。
2009年,Heroku 推出第一款公有云 PaaS (Platform-as-a-Service)
2010年1月,微軟發布 Microsoft Azure云平臺服務。備注:Microsoft Azure 于2008年宣布。
2010年7月,Rackspace Hosting和NASA聯合推出了一項名為OpenStack的開源云軟件計劃
2011年,Pivotal推出了開源版PaaS Cloud Foundry,作為Heroku PaaS的開源替代品,并于2014年底推出了Cloud Foundry Foundation。
2013年底,Google 推出 Google Compute Engine (GCE)正式版。備注:GCE的測試版本于2008年發布,預覽版于2012年發布。
2014年,AWS推出 Lambda,允許在AWS中運行代碼而無需配置或管理服務器,即Faas/Serverless。
在這期間,出現了云計算的多個重要里程碑:
補充術語介紹,Capex Vs. Opex:
Capex = capital expenditure / 資本支出
Opex = operational expenditure / 運營支出
1.1.4 容器的興起和編排大戰
2013年,在云計算領域發生了一件影響深廣的技術變革:容器。
容器技術可以說是過去十年間對軟件開發行業改變最大的技術,而從虛擬機到容器,整個云計算市場發生了一次重大變革,甚至是洗牌。基于容器技術的容器編排市場,則經歷了Mesos、Swarm、kubernetes三家的一場史詩大戰,最終以kubernetes全面勝利而告終
2008年,LXC(Linux Container)容器發布,這是一種內核虛擬化技術,可以提供輕量級的虛擬化,以便隔離進程和資源。LXC是Docker最初使用的具體內核功能實現
2013年,Docker發布,組合LXC,Union File System和cgroups等Linux技術創建容器化標準,docker風靡一時,container逐步替代VM,云計算進入容器時代
2014年底,CoreOS正式發布了CoreOS的開源容器引擎Rocket(簡稱rkt)
2014年10月,Google 開源 kubernetes,并在2015年捐贈給 CNCF
2015年6月,OCI組織成立,旨在制定并維護容器鏡像格式和容器運行時的正式規范,以便在不同的操作系統和平臺之間移植
2015年7月,Google聯合Linux基金會成立了CNCF組織,kubernetes 成為 CNCF 管理的首個開源項目
2015年,CNCF組織開始力推 Cloud Nativ ,完全基于開源軟件技術棧,Cloud Native 的重要理念是:以微服務的方式部署應用,每個應用都打包為自己的容器并動態編排這些容器以優化資源利用
2017年9月,Mesos宣布了對Kubernetes的支持
2017年10月,Docker宣布將在下一版Docker,將同時支持自家調度引擎Swarm和來自Google的調度平臺Kubernetes
2018年3月,Kubernetes 從 CNCF 畢業,成為 CNCF 第一個畢業項目
這里有兩個重要的里程碑:
在容器編排大戰期間,以 kubernetes 為核心的CNCF Cloud Native生態系統也得以迅猛發展,云原生成為云計算市場的技術新熱點。
1.1.5云計算演進總結
云計算的發展演進歷史,有以下規律:
- 核心構建塊的變化:
從早期的物理服務器,通過虛擬化技術演進為虛擬機,再擺脫機器的限制縮小為構建塊,最后通過容器化技術演進為目前的container
-
隔離單元:無論是啟動時間還是單元大小,物理機、虛擬機、容器一路走來,實現了從重量級到輕量級的轉變
-
供應商:從閉源到開源,從單一供應商到跨越多個供應商
下圖形象的概述了這二十年云計算的演進過程:從傳統預制IT、托管到云,以及云的不同形態如IaaS、PaaS、SaaS等。
對于XaaS的一路演進,可以簡單歸納為:
- 有了IaaS,客戶不用關注物理機器
- 有了PaaS,客戶不用關注操作系統
- 有了FaaS,客戶不用關注應用程序
在這過去的二十年間,云計算幾乎重新定義了整個行業的格局,越來越多的企業開始降低對IT基礎設施的直接資本投入,不再傾向于維護自建的數據中心,而是開始通過上云的方式來獲取更強大的計算、存儲能力,并實現按時按需付費。這不僅僅降低IT支出,同時也降低了整個行業的技術壁壘,使得更多的公司尤其是初創公司可以更快地實踐業務想法并迅速推送到市場。
1.2 云原生是什么
云原生是云計算的下半場,是否上云已經很少被提及,因為它已經成為一個熱門話題,滲透到各行各業。進入到2017年之后,云計算已經不再是“新興行業”了,換句話說,對于企業用戶來說,云云計算技術成為企業發展“戰術”的一部分了。
近幾年,云原生火了起來,云元原生詞已經被過度消費,很多軟件都號稱是云原生,云原生本身甚至不能稱為是一種架構, 它首先是一種基礎設施,運行在其上的應用稱作云原生應用,只有符合云原生設計哲學的應用架構才叫云原生應用架構。在了解關于云歷生的具體定義之前,我們首先介紹下云原生出現的背景和背后的訴求。
1.2.1 云原生出現的背景
移動互聯網時代是業務高速發展的時期,不同于傳統的應用,移動互聯網提供了新的用戶體驗,即以移動端為中心,通過軟件對各行各業的滲透和對世界的改變。移動互聯網時代巨大的用戶基數下快速變更和不斷創新的需求對軟件開發方式帶來的巨大推動力,傳統軟件開發方式受到巨大挑戰。面對業務的快速迭代,團隊規模不斷擴大降低溝通協作成本并加快產品的交付速度,為用戶呈現更好的體驗是各個互聯網公司都在努力的方向。
這樣的背景下,微服務和云原生的概念開始流行。康威定律是微服務架構的理論基礎組織溝通的方式會在系統設計上有所表達,通過服務的拆分,每個小團隊服務一個服務,增加了內聚性,減少了頻繁的開會,提高了溝通效率;快速交付意味著更新的頻次也高了,更新也容易造成服務的故障問題,更新與高可用之間需要權衡。云原生通過工具和方法減少更新導致的故障問題,保證服務的高可用。
企業在數字化轉型中 普遍面臨IT系統架構缺乏彈性,業務交付周期長,運維效率低,高可靠性低等痛點和挑戰。將軟件遷移到云上是應對這一挑戰的 自然演化方式,在過去二十年間,從物理機到虛擬機到容器,從IaaS誕生到PaaS、SaaS、 Faas一路演進,應用的構建和部署變得越來越輕,越來越快,而底層基礎設施和平臺則越來越強大,以不同形態的云對,上層應用提供強力支撐。所以企業可以通過云原生的一系列技術,例如基于容器的敏捷基礎設施、微服務架構等解決企業面臨的這些IT痛點。
1.2.2 云原生的定義
自從云原生提出以來,云原生的定義就一直在持續地更新。這也說明了云原生的候念隨著技術的發展而不斷地被深刻認知。
Pivotal是云原生應用的提出者,并推出了Pivotal Cloud Foundry 云原生應用平合有Spring開源Java開發框架,成為云原生應用架構中的先驅者和探路者。早在2015年,Pivotal公司的Matt Stine寫了一本叫做(遷移到云原生應用架構》的小冊子,其中探討云原生應用架構的幾個主要特征:符合12因素應用、面向微服務架構、敏捷架構、基于API的協作和抗脆弱性。而在Pivotal 的官方網站上,對云原生(Cloud Native)的介紹包括4個要點,包括: DevOps、 持續集成、微服務架構和容器化。
- DevOps
- Continuous Delivery
- Microservices
- Containers
2015年CNCF建立,開始圍繞云原生的概念打造云原生生態體系,起初CNCF對云原生的定義包含以下三個方面:
(1)應用容器化(software stack to be Containerized)
(2)面向微服務架構(Microservices oriented)
(3)應用支持容器的編排調度(Dynamically Orchestrated)
云原生包含了一組應用的模式,用于幫助企業快速,持續,可靠,規模化地交付業務軟件。云原生由微服務架構,DevOps 和以容器為代表的敏捷基礎架構組成。援引宋凈超同學的一張圖片來描述云原生所需要的能力與特征:
在2018年,隨著社區對云原生理念的廣泛認可和云原生生態的不斷擴大,還有CNCF項目和會員的大量增加,起初的定義已經不再適用,因此CNCF對云原生進行了重新定位。
2018年6月,CNCF正式對外公布了更新之后的云原生的定義(包含中文版本)v1.0版本:
Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
云原生技術有利于各組織在公有云、私有云和混合云等新型動態環境中,構建和運行可彈性擴展的應用。云原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式API。
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
這些技術能夠構建容錯性好、易于管理和便于觀察的松耦合系統。結合可靠的自動化手段,云原生技術使工程師能夠輕松地對系統作出頻繁和可預測的重大變更。
The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.
云原生計算基金會(CNCF)致力于培育和維護一個廠商中立的開源生態系統,來推廣云原生技術。我們通過將最前沿的模式民主化,讓這些創新為大眾所用。
新的定義中,繼續保持原有的核心內容:容器和微服務,但是非常特別的將服務網格單獨列出來,而不是將服務網格作為微服務的一個子項或者實現模式,體現了云原生中服務網格這一個新生技術的重要性。而不可變基礎設施和聲明式API這兩個設計指導理念的加入,則強調了這兩個概念對云原生架構的影響和對未來發展的指導作用。
可以通過訪問 https://github.com/cncf/toc/blob/master/DEFINITION.md 查看。
1.2.3 云原生定義之外
從上面可以看到,云原生的內容和具體形式隨著時間的推移一直在變化,即便是CNCF最新推出的云原生定義也非常明確的標注為v1.0,相信未來我們很有機會看到v1.1、v2版本。而且云原生這個詞匯最近被過度使用,混有各種營銷色彩,容易發生偏離。因此,云原生的定義是什么并不重要,關鍵還是云原生定義后面的理念、文化、技術、工具、組織結構和行為方式。
Joe Beda,Heptio 的CTO,指出:
There is no hard and fast definition for what Cloud Native means. In fact there are other overlapping terms and ideologies. At its root, Cloud Native is structuring teams, culture and technology to utilize automation and architectures to manage complexity and unlock velocity.
Cloud Native并沒有硬性和牢靠的定義。實際上,還有其他重疊的術語和意識形態。從根本上說,Cloud Native正在構建團隊,文化和技術,以利用自動化和架構來管理復雜性和解鎖速度。
We are still at the beginning of this journey.
我們還處在這個旅程的開始階段。
Christian Posta 指出:
“Cloud native” is an adjective that describes the applications, architectures, platforms/infrastructure, and processes, that together make it economical to work in a way that allows us to improve our ability to quickly respond to change and reduce unpredictability. This includes things like services architectures, self-service infrastructure, automation, continuous integration/delivery pipelines, observability tools, freedom/responsibility to experiment, teams held to outcomes not output, etc.
“云原生”是一個形容詞,用于描述應用,結構,平臺/基礎設施和流程,這些共同促使我們以比較經濟的工作方式來提高能力,實現快速響應變化和減少不可預測性。包括服務架構,自助服務基礎設施,自動化,持續集成/交付管道,可觀察性工具,實驗的自由/責任,堅持結果而不是產出的團隊等。
1.2.4 云原生和12因素
介紹
12-Factors 經常被翻譯為12因素,符合12因素的應用則稱為12因素應用。
背景
Heroku(HeroKu于2009年推出公有云PaaS)于2012年提出12因素,告訴開發者如何利用云平臺提供的便利來開發更具可靠性和擴展性、更加易于維護的云原生應用。
為此還有一個專門的12因素網站: https://12factor.net/ ,以及這個網站內容的中文版本: https://12factor.net/zh_cn/ 。
援引12因素網站的介紹內容:
如今,軟件通常會作為服務來交付,被稱為web app,或軟件即服務(SaaS)。12-Factor 為構建如下的 SaaS 應用提供了方法論:
- 使用聲明式格式來搭建自動化,從而使新的開發者花費最少的學習成本加入這個項目
- 和底層操作系統保持簡潔的契約,在各個系統中提供最大的可移植性
- 適合在現代的云平臺上部署,避免對服務器和系統管理的額外需求
- 最小化開發和生產之間的分歧,實現持續部署以實現最大靈活性
- 可以在工具、架構和開發實踐不發生重大變化的前提下實現擴展
- 12因素理論適用于以任意語言編寫,并使用任意后端服務(數據庫、消息隊列、緩存等)的應用程序。
援引12因素網站的給出的12因素產生的背景:
本文的貢獻者參與過數以百計的應用程序的開發和部署,并通過 Heroku 平臺間接見證了數十萬應用程序的開發,運作以及擴展的過程。
本文綜合了我們關于 SaaS 應用幾乎所有的經驗和智慧,是開發此類應用的理想實踐標準,并特別關注于應用程序如何保持良性成長,開發者之間如何進行有效的代碼協作,以及如何 避免軟件污染 。
我們的初衷是分享在現代軟件開發過程中發現的一些系統性問題,并加深對這些問題的認識。我們提供了討論這些問題時所需的共享詞匯,同時使用相關術語給出一套針對這些問題的廣義解決方案。
12因素的局限性
12因素創作于2012年左右,SaaS平臺非常具有指導意義
12-factor為Web應用程序或SaaS平臺的建立非常有用的指導原則,但它在有些地方并不適合微服務體系。
在標準的12個要素以外,還存在哪些因素, 正如Kevin Hoffmann 最近在 O’Reilly 出版的書上提到了超越 12 個因素的應用。
內容
12因素具體內容為:
| Codebase 基準代碼 | One codebase tracked in revision control, many deploys 一份基準代碼,多份部署 |
| Dependencies 依賴 | Explicitly declare and isolate dependencies 顯式聲明依賴關系 |
| Config 配置 | Store config in the environment 在環境中存儲配置 |
| Backing services 后端服務 | Treat backing services as attached resources 把后端服務當作附加資源 |
| Build, release, run 構建,發布,運行 | Strictly separate build and run stages 嚴格分離構建和運行 |
| Processes 進程 | Execute the app as one or more stateless processes 以一個或多個無狀態進程運行應用 |
| Port binding 端口綁定 | Export services via port binding 通過端口綁定提供服務 |
| Concurrency 并發 | Scale out via the process model 通過進程模型進行擴展 |
| Disposability 易處理 | Maximize robustness with fast startup and graceful shutdown 快速啟動和優雅終止可最大化健壯性 |
| Dev/prod parity 開發環境與線上環境等價 | Keep development, staging, and production as similar as possible 盡可能的保持開發,預發布,線上環境相同 |
| Logs 日志 | Treat logs as event streams 把日志當作事件流 |
| Admin processes 管理進程 | Run admin/management tasks as one-off processes 后臺管理任務當作一次性進程運行 |
12因素在云原生架構中的體現:
1.3 云原生的基礎架構
云原生是一系列云計算技術體系和企業管理方法的集合,既包含了實現應用云原生化的方法論,也包含了落地實踐的關鍵技術。云原生應用利用微服務、服務網格、容器、DevOps和聲明式API等代表性技術,來構建容錯性好、易于管理和便于觀察的松耦合系統。下面具體介紹這幾個關鍵技術。
1.3.1微服務
為了解決單體的復雜度問題,我們引入微服務架構。在單體應用(也稱為巨石應用)的時代,雖然開發簡單,但隨著業務復雜度的提升,單體應用的益處逐漸減少。它們變得更難理解,而且失去了敏捷性,因為開發人員很難快速理解和修改代碼。
對付復雜性的最好方法之一是將明確定義的功能分成更小的服務,并讓每個服務獨立迭代。微服務是指將大型復雜軟件應用拆分成多個簡單應用,每個簡單應用描述著一個小業務,系統中的各個簡單應用可被獨立部署。各個微微服務之問是松耦合的,這樣就可以獨立地對每個服務進行升級、部署、擴展和重新啟動等,從而實現頻繁更新而不會對最終用戶產生任何影響。相比傳統的單體架構,微服務架構具有降低系統復雜度、獨立部署、獨立擴展和跨語言編程等優點。
但是,從另一個角度來看,微服務架構的靈話、開發的敏捷也帶來了運維的挑戰和分布式系統的復雜性。單體應用可能只需部署至小片應用服務器集群, 而微服務架構則需要構建/測試/部署/運行數十個獨立的服務,并可能需要支持多種語言和環境;微服務還引入了分布式系統的復雜性,如網絡延遲、容錯性、消息序列化、不可靠的網絡、異步機制、版本化和差異化的工作負載等,開發人員需要考慮以上這些分布式系統問題。其他的問題,如微服務的可測試性、異步機制、調用鏈過長等,也需要在架構設計時考慮。
1.3.2 容器
為了解決微服務架構下大量應用部署的問題,我們引入容器,容器是一種輕量級的虛報化技術,能夠在單一主機上提供多個隔離的操作系統環境, 通過系列的Namespace進行進程隔離,每個容器都有唯一的可寫文件系統和資源配額, 容器技術分為運行時和編持兩層,運行時負責容器的計算、存儲、網絡等,編排層負責容器集群的調度、服務發現和資源管理。
容器服務提供高性能、 可伸縮的容器應用管理能力,容器化應用的生命周期管理可以提供多種應用發布方式。容器服務簡化了容器管理集群的搭建工作,整合了調度、配置、存儲、網絡等,打造云端最佳容器運行環境。
Docker是一個開源的應用容器引擎,使用容器技術,用戶可以將微服務及其所需的所有配置、依賴關系和環境變量打包成容器鏡像,輕松移植到全新的服務器節點上,而無得重新配置環境,這使得容器成為部署單個微服務的最理想工具。
僅僅有容器還是不夠的,因為人力運維部署成本太大,為了解決容器的管理和調度問題,又引入了Kubernetes. Kubernetes 是Google 開源的容器集群管理系統,可以實現容器集群的自動化部署、自動擴縮容和維護等功能。
我們用Kubernetes去管理Docker集群,可以將Docker看成Kubernetes內部使用的低級別組件。另外,Kubermetes 不僅僅支持Docker,還支持Rocket等其他容器技術。
1.3.3 服務網格
微服務技術架構實踐中主要有侵入式架構和非侵入式架構兩種實現形式。侵入式架構是指服務框架嵌入程序代碼,開發者組合各種組件,如RPC、負載均衡、熔斷等,實現微服務架構。非侵入式架構則是以代理的形式,與應用程序部署在一起,接管應用程序的網絡且對其透明,開發者只需要關注自身業務即可,以服務網格為代表。為了解決微服務框架的侵入性問題,引入Service Mesh。
Service Mesh 產品的存在和具體工作模式,對于運行于其上的云原生應用來說是透明無感知的,但是在運行時這些能力都動態賦能給了應用,從而幫助應用在輕量化的同時依然可以繼續提供原有的功能。
Service Mesh 使得系統架構的技術棧下移,降低了整個微服務入門的門檻,對于開發者更加友好。Service Mesh提供了一一個方案,就是將整個服務間通信的解決方式以及整個中間件層的技術棧全部下移。從應用當中下移到底層的基礎設施,通過加強基礎設施的方式提供一個統一的解決方案。
Serice Mesh處理服務問請求響應的可靠傳遞,并可用于服務治理、遺留系統的零侵入接入以及異構框架開發的微服務。Service Mesh作為服務間通信的基礎設施層,是應用程序間通信的中間層,實現了輕量級網絡代理,對應用程序透明,解隅了應用程序的重試/超時、監控、追蹤和服務發現。
除此之外,Serice Mesh提供了專業化的解決方案,其中所涉及的服務通信、容錯、認證等功能,都是專業度極高的領城,這些領城應該出現工業級成熟度的制成品,這對于中小企業來說是一個降低成本的選擇。
Service Mesh的開源軟件包括Istio、Linkerd、 Envoy、 Dubbo Mesh等。同時,為了讓Service Mesh有更好的底層支撐,我們又將Service Mesh運行在Kubernetes上,
1.3.4 DevOps
DevOps是一組過程、方法與系統的統稱,用于促進開發(應用程序/軟件工程)、術運營和質量保障(QA)部門之間的溝通、協作與整合。目前對DevOps 有太多的說法和定義,不過它們都有一個共同的思想:解決開發者與運維者之間曾經不可逾越的鴻溝,增強開發者與運維者之間的溝通和交流。
DevOps的出現是由于軟件行業日益清晰地認識到:為了按時交付軟件產品和服務,開發和運營工作必須緊密合作。市場瞬息萬變,同時機會轉瞬即逝。互聯網公司要實現生存,必須擁有快速試錯和迭代產品的能力。那我們有沒有辦法快速交付價值、靈活響應變化呢?答案就是DevOps, 它是面向業務目標,助力業務成功的最佳實踐。DevOps其實包含了三個部分:開發、測試和運維。
與敏捷一樣,DevOps將軟件程序分解成更小的部分,以提高軟件交付速度和質量。DevOp的一個標志是“持續”實踐包括持續集成、持續測試、持續交付和持續部署,所有這些都有助于軟件產品和軟件相關實踐的持續改進.DevOps的目標是縮短開發周期,增加部署頻率,更可靠的發布。用戶可通過完整的工具鏈,深度集成代碼倉庫、制品倉庫、項目管理、自動化測試等類別中的主流工具,實現零成本遷移,快速實踐DevOps.DevOps幫助開發者和運維人員打造了一個全新空間,構建了一種通過持續交付實踐去優化資源和擴展應用程序的新方式微服務使DevOps團隊能夠并行開發獨立的功能片段,跨功能團隊協作構建、測試、發布、監控和維護應用程序。DevOps 和云原生架構的結合能夠實現精益產品開發流程,適應快速變化的市場,更好地服務企業的商業目的。
1.4 總結
本文從云原生的發展史開始介紹云計算、虛報化、容器化等技術,隨后結合云原生出現的背景介紹云原生的定義。云原生的定義也在不斷變化,總得說來,云原生可以理解為應用原生被設計為在云上以最佳方式運行,充分發揮云的優勢。最后介紹了云原生架構中涉及到的幾個關鍵技術。
云原生應用可充分利用云平臺服務優勢,并快速構建部署到平臺上,平臺提供了簡單快捷的擴展能力并與硬件解耦,提供了更大的靈活性、彈性和跨云環境的可移植性。云原生將云計算作為競爭優勢,原生云意味著將云目標從IT成本節約轉向業務增長引擎。
參考鏈接:https://skyao.io/learning-cloudnative/microservice/
總結
以上是生活随笔為你收集整理的Go语言云原生与微服务(一)云原生架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云计算安全测评:云原生安全
- 下一篇: unity角色移动