開發雲原生應用之前,你必須了解這些

開發雲原生應用之前,你必須瞭解這些

內容來源:2017 年 12 月 2 日,青雲QingCloud 應用平臺研發總監周小四在“IAS2017互聯網架構峰會”進行《雲與容器時代的架構設計》演講分享。IT 大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發佈。

閱讀字數:2550 | 7分鐘閱讀

嘉賓演講視頻及PPT,請複製:http://t.cn/RDuVu7z,粘貼至瀏覽器即可。

開發雲原生應用之前,你必須瞭解這些

摘要

本次演講將介紹雲原生和微服務的關聯性,詳細解析微服務中的各個部分,通過具體項目展示微服務的具體實踐。

雲原生應用及微服務

雲原生應用是現有技術與新興技術的結合,現有技術指的是雲平臺相關方面,新興技術則是微服務架構。與之對應的是單體應用,即傳統的開發應用模式將所有的服務都打包在一起。

微服務中每個服務都是獨立部署的,都與DevOps息息相關,是作為一種文化在公司內部存在。從更細緻多層面的角度來講,單體應用會被分解成更小粒度的服務,每個服務都獨立運行在具體的進程中間。結合容器平臺的編排技術能自動管理微服務應用。服務之間允許存在語言的差異,所有的服務都有自己的存儲。

優勢

微服務有這樣幾個優點。首先它將複雜的系統簡單化了,典型的就是雲平臺的開發,我們都知道雲平臺是個很複雜的系統,新來的開發人員在此之上開發的時候會有很長的學習週期。他不僅要學習現有的系統有可能還要學習新的語言,成本相對來說是很高的,而微服務的介入有效的緩解了這一問題。然後是能夠獨立開發和部署,不用再關心整體系統的迭代情況。微服務還有著很強的隔離性,在系統啟動的時候,即使其中的某個服務出現問題掛掉了,對整個系統也不會造成太大的影響依然能夠正常啟動,這在原先的單體應用是很難實現的。另外由於微服務是以容器為載體,所以有較強的彈性和伸縮性。

挑戰

微服務面臨的第一個挑戰是數據庫的開發和設計,具體為如何實現一致性。實際上在微服務中只能做到最終一致性,而無法實現強一致性。第二個挑戰是服務之間的通訊,單體應用在被改造成微服務之後就成了分佈式的系統,這時要考慮到遠程調用的方式以及調用失敗後的處理。第三個挑戰是測試,在細顆粒度的情況下必然會給測試帶來一定的難度。最後是部署及治理,這方面目前已經有了很多的解決方案,所以就不多做討論了。

微服務詳解

API網關

微服務中首要的是API網關。因為在有眾多微服務的情況下,客戶端訪問的時候不可能要求它請求的所有的服務。這時候就需要有一個API網關來收集客戶端的請求,然後從下方的各種服務中獲取信息並聚合起來,實際上相當於一個內部的聚合層。一般客戶端採用的是HTTP或HTTP+REST這種比較友好的訪問方式。

服務發現

之所以需要服務發現,是因為微服務架構中雲上服務節點IP地址會發生變化,同一服務後端節點個數也會發生變化。服務發現的機制使得當IP發生的時候對服務的調用者無感,且無論有多少個節點都能夠自動的進行負載均衡。目前有兩種形式,一種是基於客戶端的服務發現,一種是基於服務端的服務發現。

開發雲原生應用之前,你必須瞭解這些

(注:圖片源於網絡)

基於客戶端的服務發現實際上是讓客戶端代發請求,當請求過來的時候客戶端首先會通過服務註冊找到被請求服務的相關信息,然後再請求到具體的服務上去。

開發雲原生應用之前,你必須瞭解這些

(注:圖片源於網絡)

由於各方面的原因,目前業內更多采用的是基於服務器端的服務發現方案。

數據管理

單體應用中數據管理相對比較簡單,只需要單個數據庫滿足ACID,通過SQL的方式直接查詢。

微服務的數據管理則比較麻煩,主要有幾方面的原因。首先是應用無法滿足ACID而是通過Base Model完成任務。其次每個微服務必須獨享自己的數據庫。另外服務之間只能通過API訪問,不能直接訪問其他服務的數據庫。同時不同服務還會採用不同的數據庫如關係型、NoSQL、圖數據庫等。

服務間通信

單體應用的服務間通信僅通過method/function call的形式就能完成。微服務由於是分佈式的,所以必然要考慮到通信機制。服務間的通信機制也並不一定唯一,有可能是一對一也有可能是一對多,還有同步和異步的形式。需要強調的是在做服務間通信的時候一定要確定好API,保證API first。給API設置版本是比較好的一種方式,比如可以在同一個目錄中保存不同版本的API。即使已經有了現成的微服務治理框架,也還是要考慮異常處理的相關問題,包括熔斷、降級、超時處理、fallback等。

The Twelve Factors

Twelve factors是開發雲原生應用必須要了解的,關於它的具體細節這裡不一一贅述了,主要強調幾個在實際工作中要注意的部分。首先server必須是micro這點就不用多說了。其次服務要儘量做到無狀態,因為容器和微服務本身就是為了無狀態而生,傳統軟件應用則是有狀態的。常見的log機制是將log注入到容器中,不過在雲原生應用中不建議採取這種方式。一般都是將log注入到宿主機的控制檯上,通過微服務運行環境中的公共組件來收集日誌。還有就是讓開發、測試、生產環境儘可能保持一致,避免不必要的問題。

微服務詳解

OpenPitrix是一個開放的平臺,致力於在多個雲環境中開發和部署應用程序,從而能夠讓應用程序無縫的運行在各個雲環境中。Pitrix分解開來是PaaS加IaaS加Matrix,同時它也有PI的含義,即包含無限應用的巨大矩陣。

微服務設計與實踐

開發雲原生應用之前,你必須瞭解這些

OpenPitrix包含的服務有repo、app、cluster、runtime、api。其中api是API網關,對外提供REST服務,是其他服務的整合,通過grpc通信。採用的是private tables per service的方式。CI/CD是kubernetes加Jenkins。

以上為今天的分享內容(部分刪減,完整請看視頻),謝謝大家!


分享到:


相關文章: