微服務架構雲端應用

2021-02-15 中生代技術

轉載聲明:本文為中生代技術群聯合好雨雲創始人兼CEO原創文章,轉載必須連同本訂閱號二維碼全文轉載,並註明作者名字及來源:中生代技術群(FreshmanTechnology)。


話題:微服務架構雲端應用

講師:劉凡

職位:好雨雲創始人兼CEO

簡介:曾任澳客網 CTO和CEO職位。擁有超過12年網際網路產品開發和管理經驗,專注於網際網路技術架構設計,對產品設計、敏捷開發、安全、OKRs、大數據等領域有深入研究。現推崇反應式編程(http://www.reactivemanifesto.org/),並在多個產品中成功應用。

劉總在這次分享中主要為大家介紹了什麼是徽服務,實現微服務有哪些架構模式以及微服務在實際中的應用情況。

微服務架構(Microservices Architecture)是一種架構風格和設計模式,提供將應用分割成一系列細小的服務,每個服務專注於單一業務功能,運行於獨立的進程中,服務之間邊界清晰,採用輕量級通信機制相互溝通、配合來實現完整的應用,滿足業務和用戶的需求。(引用自http://www.csdn.net/article/2015-07-20/2825258)

微服務的優點:

可獨立部署、升級、替換、伸縮

自由選擇開發語言

高效利用資源

故障隔離

總結下來就是:靈活、穩定、省資源。

微服務的缺點:

服務多,帶來更多操作

管理複雜度提升

部署難度加大

總結就是:服務多,管理難度大。

僅管微服務存在著缺點,但它的優點也是非常吸引人的,目前很多企業也逐漸開始了微服務架構之旅,包括像Twitter,Netflix,Amazon,eBay等大廠商都在使用。如下圖是Twitter微服務應用部分架構圖。


微服務的架構模式


1. 一體化架構模式


傳統mvc架構,也是一體化模式。

2. 聚合模式

從多個服務的結果聚合到一個聚合服務,最常見的表現是聚合服務是Web服務,主要功能是頁面表現,後端的服務都是純業務功能服務,擴展業務只需要增加一個新的後端微服務就可以啦。

聚合服務也可以是一個更高層次的組合微服務,增加業務邏輯後進一步發布成一個新的微服務,這符合DRY原則。另外,每個服務都有自己的緩存和資料庫。這個模式是最常用模式。


3. 代理模式


4. 資源共享模式


可實現部分業務的邏輯分離,數據共享。

用在一體化架構往微服務架構遷移過程中的過度狀態。還可用在兩個服務之前有數據一致性要求,通過統一的資料庫事物來實現。

5. 異步消息模式


上面的其它模式都是同步的,會阻塞。異步消息模式適合不需要同步的場景,比如任務型服務。

主要的模式就這些,其它模式可以由這些模式演變。

大量微服務帶來的挑戰


1. 服務部署的挑戰

每個服務都需要獨立的代碼管理、版本管理、編譯構建、部署到測試環境,部署到生產環境,代碼回滾等等事情,如果要有幾十個服務要部署,人工管理幾乎不可能完成。

2. 服務紳縮的挑戰

無狀態服務需要配置負載均衡和增加節點,有狀態服務需要擴充單個服務的資源,如果需要減少資源浪費,需要監控每個服務,還需要減少節點和資源。

3. 服務高可用的挑戰

每種服務的高可用策略都不一樣,無狀態服務相對簡單,管理每個有狀態服務都是難題。

4. 服務容錯的挑戰

任何一個服務的可用性都不是 100% 的。在分布式系統中,當我依賴的某個服務不可用的時候,我自身也將不能工作。如果是一個複雜的分布式系統,會依賴更多服務,任何一個服務不可用的時候,系統自身也將不能工作,再加上網絡不穩定的因素,系統自身的可用性將大幅度下降。

5. 依賴關係的挑戰

依賴配置文件,如果寫在代碼中,需要重新部署才能生效,而配置文件還會汙染代碼。

6. 服務監控的挑戰

監控cpu?負載?大量微服務如何同時監控?

微服務在好雨雲的解決方案

底層是通過docker實現的,只是用戶感受不到docker。

內部封裝,不用管理計算資源和網絡資源,並把某些複雜特性包裝在內部。整體對外,服務做為一個整體管理。



開發語言支持Java、Python、PHP、Ruby、Golang,Node.JS等,代碼支持Github,好雨託管倉庫。


水平伸縮用於無狀態的 Server和Worker 類的服務。

垂直伸縮用於有狀態的服務。

部分有狀態服務支持水平分區( sharding),用戶只需要調整節點個數就可以了。


一般通過LB支持無狀態服務高可用,支持有狀態服務高可用。


類似Spring,參數通過環境變量實現。

實現微服務之間的連接和編排,以上微服務模式都可以通過這種方式動態配置實現。


類似保險絲,當服務B變慢,達到斷路器的閥值,服務B,將自動下線,不至於影響其他服務,當延遲變小,服務逐步恢復。容錯還有一種方式是使用異步,可以參考CQRS模式。


業務指標:平均響應時間,吞吐率 ,在線人數。

在實際場景中,使用業務監控可以替代技術監控,而且更加簡單容易理解。



單個REST服務的實時性能分析,資料庫性能分析,最慢的Sql語句不一定是對資料庫影響最大的。實時性能分析通過CEP+log實現,以前工作一直使用,沒有APM炫,但解決了很多實際問題。還在實現了Mongodb ,Redis等數據存儲的實時性能分析。

至此,相信你也對微服務,微服務的構架模式以及微服務在現實場景中的應用有了一個大概的認識了。如果你還想要了解得更多,請繼續查看下面的Q&A環節內容。

Q&A

Q1 99.95%的SLA是如何測量的,現在都有那些初始客戶?

劉總: 我們自己實現了負載均衡組件,監控每個租戶的服務可用性,後端服務不可用和錯誤返回碼都會算到不可以用時間。我們現在的用戶有工行,天津濱海新區管委會,章魚網,51talk,學霸君,好貸寶等。

Q2 依賴調整配置就生效嗎,背後是如何做到的?

劉總: 我們的服務發現是通過etcd實現的,之前實現了完全實時修改實時生效的方案,但是太複雜了,現在的實現方式是通過環境變量實現的,修改配置之後需要重啟,無狀態服務用戶感知不到。

Q3 SOA的時候重點談到了美好的編排,不同粒度的層次,逐層編排,其實最考驗設計能力和抽象能力,編排本身的美好得不到很好的利用,如何破?

劉總: 這只能考驗一個公司的技術架構師和業務架構師了,我以前身兼這兩職,我沒遇到過這些問題。我也沒有其它思路。

Q4 監控部分對於內存洩漏,堆棧分析有沒有好的支持?

劉總: 這個沒有,但是如果由於內存洩漏導致服務死掉,我們平臺會自動重啟。

Q5 你們雲平臺本身有沒有異地容災的能力?

劉總: 我們能實現geo-master,現在設計如何對用戶開放這類服務。

Q6 微服務這塊在移動端有沒有好的案例,一般像Android和 iOS這類移動應用上如何使用和借鑑微服務模式呢?

劉總: 剛才分享的代理模式特別適合用戶移動開發場景,微服務都是API。代理模式是一種特殊的聚合模式,對外是一個統一的包裝,一般做內部接口的代理,對外統一一個接口,內部可以用多個微服務實現。

Q7 服務之間有沒有調用鏈的設計,方便跟蹤跨服務的問題,可以分享一下嗎?

劉總: 細化的跟蹤沒有,通過服務拓撲可以實現粗力度的。

Q8 工行上的是那些業務,好雨雲擅長是高性能高PV的業務,還是對事務一致性要求都有很高要求的業務?

劉總: 高PV場景我們特別適合,因為我們非常容易伸縮。事務一致性我們有兩種方式,一種大家可以選擇自己喜歡的存儲服務,各類數據有存儲自己的方式。第二種,我們通過akka實現一套高一致性,高性能的解決方案,單機能做到每秒100萬的事務。

Q9 劉總,你提到了類似在線人數之類的業務監控,對於產品可以增強鏈路監控功能否,比A9如用戶是在操作鏈路上那個環節流失得比較嚴重,做統計以便產品改進,這些監控本身需要調用平臺API嗎?

劉總: 不太理解鏈路是什麼意思,是指用戶行為數據嗎?現在我們沒有,我們不擅長這塊。

Q10 服務拓撲就是服務級依賴關係吧?

劉總: 是的,每個微服務有自己的響應時間和吞吐率,表現在拓撲圖裡,可以粗力度分析出問題。

Q11 我們通過akka實現一套高一致性,高性能的解決方案,單機能做到每秒100萬的事務,這塊能不能具體說一下,比如一個第三方支付簡單的A用戶到B用戶的轉帳場景,A和B在不同的sharding單元。

劉總: akka的模式是使用CQRS模式,也就是事件溯源的方式,以前資料庫的那些事務問題在這都不存在。

Q12 Akka的話是不走資料庫直接在內存裡做事務嗎?

劉總: 是的,通過事件溯源保證數據一致性。理論上它不是事務,但能實現事務的效果。

Q13 隊列技術如何支持的呢?

劉總: 我們平臺支持任何開源的隊列服務。

Q14 微服務之間如何通信,協議和數據格式是怎樣的?

劉總: 微服務會有多個節點,但我們會內置LB,對外統一一個服務接口,支持任意協議和格式。

Q15 工行,天津濱海新區管委會,章魚網,51talk,學霸君,好貸寶主要應用場景,高PV支持,高事務支持,大數據分析,爬蟲,devops,通過微服務架構把業務能拆分更小,便於重用和維護。 akka的方案就是聯機交易。這些客戶具體的應用場景是哪些呢?可以選擇1-2個典型case介紹下微服務所產生的價值,如果有聯機交易的Case更佳。

劉總: 介紹下微服務所產生的價值,如果有聯機交易的Case更佳主要應用場景,高PV支持,高事務支持,大數據分析,爬蟲,devops,通過微服務架構把業務能拆分更小,便於重用和維護。 akka的方案就是聯機交易。

Q16 實時性能分析用的是cep +log, 不是很理解cep?

劉總: 複雜事件處理,實時流處理,通過strom也可以實現。

Q17 如何應對微服務的毛剌現象(某個服務瞬間出現較大延遲的現象,可能會導致某批請求超時等情況)?

劉總: 不好意思,我沒遇到過這種情況,我覺得應該跟實現方式有關。

Q18 akka的方案就是聯機交易,akka原先架構體系是什麼?遇到了什麼樣的瓶頸?微服務之後改進的是什麼?聯機交易規模怎樣?

劉總: 原先就是用傳統資料庫,交易的事務性能低下,做了sharding會引入新的問題,而且聯機分析也有問題,用akka改造後能處理高峰業務每秒10萬左右的事務。

下期分享預告

分享講師:陳顯銘(花名:山丘)

公司崗位:螞蟻金服-技術專家

個人經歷:從事研發工作7年,資深程式設計師,愛思考,愛黑人。

分享話題:性能優化二三事

話題簡介:主要從性能優化常見模式,壓測常見模型,全鏈路壓測技術分解三個方面講解。

分享時間:2016年1月14日

關於中生代技術群

友直,友諒,友多聞;群好、群真、群多妹子。架構、開發、運維、DBA、前端一網打盡,做中國最好的中生代!

我們不叫架構師群的原因是現在架構師群已經不少了,我們不僅僅討論高大上的概念,我們還會討論類似於[開發應該懂多少運維,開發應該掌握DBA基礎7日譚等基礎性話題],特別高大的群,有些問題憋著不敢問,怕被認為是low到爆呢,我們這裡有專家、也有對於新領域而言的菜鳥,讓我們重溫老夫子的訓誡[三人行,必有我師焉],更多精彩請持續關注freshmanTechnology微信訂閱號!

掃碼關注


中生代技術群

連接技術大咖的橋梁,促進科技技術的交流

相關焦點

  • Medium 的微服務架構
    在 Medium,我們的技術棧始於 2012 年龐大的 Node.js 應用後端。我們已經建立了幾個附屬服務,但我們還沒有制定採用微服架構系統的戰略。隨著系統變得更加複雜和團隊的壯大,我們在 2018年初遷移到了微服務架構。在這篇文章中,我們希望分享我們的經驗,有效地做到這一點,避免微服務症候群。
  • 微軟開源為微服務應用所設計的Dapr項目
    ),目的在於協助開發人員更容易創建微服務應用程式。微服務為一種軟體開發架構,先創建各種單一功能與責任的區塊,再以模組化的方式將它們組合成複雜的大型應用程式。微軟表示,近年來有越來越多的開發人員打造可擴展的雲原生應用程式,並利用託管服務來部署與執行它們,此一轉變讓微服務架構成為構建雲原生應用程式的標準,且預測到了2022年,將有高達9成的新應用都會配備微服務架構,然而要實現微服務架構必須先充份了解與掌握分布式系統。
  • 微服務架構體系
    做一些總結架構的演進這種東西有點信雅達,沒什麼絕對標準單體應用:在第一階段的單體應用很好理解。垂直應用:接著隨著業務量增大, 將應用拆成互不相干的幾個應用,Web框架(MVC) 是關鍵。分布式應用:垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務。
  • 淺談微服務架構設計
    微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。關於微服務架構設計呢?簡單來說可分為下面三個步驟:第一步,把應用中關鍵的需求定義出來;第二步,識別出採用微服務架構時應用中所包含的所有服務;第三步,將第一步所定義出的關鍵需求作為架構需求的場景來描述服務之間如何進行協作。
  • 破解客制化難題,雲原生微服務應用平臺來啦!
    藉助PaaS平臺,不同架構的企業實現了輕鬆上雲、高效運行。但是,PaaS平臺也存在著一個不可忽視的問題,那就是客制化困難。如何最大程度地提高解決問題尤其是複雜問題的能力?如何高效的應對企業的業務變化?這一直是各大廠商試圖突破的難題。如今百度智能雲攜雲原生微服務應用平臺而來,力圖為行業帶來變革。
  • 微服務下的數據架構
    實施微服務架構可以使組織更快地將其應用程式推向市場。對整體應用程式的更改(即使很小)需要重新部署整個應用程式堆棧,從而引入風險和複雜性。相反,服務的更新可以立即提交、測試和部署,對個別服務的更改不會影響系統的其他部分。微服務方法在擴展應用程式時也提供了靈活性。單片應用程式要求整個系統(及其所有功能)同時擴展。使用微服務,只需要縮放需要額外性能的組件或功能。
  • 擁抱K8s、微服務和通用數據平臺新架構
    後來,維運團隊決定導入Kubernetes,要求AP工程師,必須改採雲端原生架構,將每一支AP的需求,都建立在AP配置描述檔中,而運算需求較低的腳本程式,則改用Knative來提供無伺服器服務,讓一個VM可以執行更多腳本程式,而不是每支腳本程式就佔用一個VM。
  • 微服務架構設計
    微服務架構微服務是指開發一個單個小型的但有業務功能的服務,每個服務都有自己的處理和輕量通訊機制,可以部署在單個或多個伺服器上。相對單體架構,微服務架構是更面向業務創新的一種架構模式。·獨立團隊和自治團隊對服務的整個生命周期負責,工作在獨立的上下文中,自己決策自己治理,而不需要統一的指揮中心。團隊和團隊之間通過鬆散的社區部落進行銜接。
  • 微服務架構-設計總結
    八、微服務的優點和缺點九、思考:意識的轉變十、參考資料和推薦閱讀一、微服務架構介紹微服務架構(Microservice Architecture)是一種架構概念,旨在通過將功能分解到各個離散的服務中以實現對解決方案的解耦
  • Medium的微服務架構解析
    何為微服務架構首先,我們來思考微服務之架構是什麼,不是什麼。微服務是拯救那些過載和混亂軟體工程的技術趨勢之一。在Medium團隊,我們認為它是:「在微服務架構中,多個鬆散耦合的服務協同工作。儘管微服務架構允許團隊更輕鬆地測試新興技術,但這並不是微服務的主要目標。只要團隊從分離的服務中受益,你就可以使用相同的技術棧構建新服務。3、微服務並非必須從頭創建服務。如果你已經有一個架構優良的單片應用程式,那麼不用從頭一個個的來構建新服務。可能的策略是,直接從單一服務中提取邏輯。這樣,上面提到的三個原則仍然有效。
  • 雲端的智能應用軟體架構及技術要點
    (3)DOCKER 鏡像發布;建立運行環境,使用Docker建立鏡像,提交到石化智雲直接發布Docker鏡像;四、雲時代的開發語言與生態除了Python+Flask技術棧,其實還有很多更為流行的雲端技術架構。
  • 微服務與SOA架構(一)
    如果發現服務規模從小變大,那麼最好選擇SOA模式而不是更為簡單的微服務架構模式。不過,如果能夠將應用的業務功能分解為很小的、互相獨立的部分,微服務模式應該是更好的選擇。當比較微服務和SOA架構時,除了以上服務特性外,還有很多其他方面需要考慮。
  • 微服務架構-從理想到現實
    從單體應用到微服務任何一個新的架構模式或方法的出現,一定是傳統架構模式遇到了問題。而對於單體應用來說常說的問題主要包括了如下幾個點。單體應用規模太大,導致複雜度劇增,難以開發和管理單體應用開發,交付和變更周期變長,敏捷性跟不上單體應用本身在性能,擴展性上出現了問題在軟體架構設計裡面,分而治之始終都是解決複雜性的一個關鍵思維方法。包括在傳統軟體架構設計裡面對於大系統會進行子系統或組件劃分,會進行接口設計,集成設計等。
  • 微服務架構談系列(2):微服務到底是什麼鬼?
    傳統上,架構的目標是可擴展性、可靠性和安全性。但是今天,該架構能夠快速安全地交付軟體,這一點非常重要。你將了解微服務架構是一種架構風格,可為應用程式提供更高的可維護性、可測試性和可部署性。我將通過描述軟體架構的概念及其重要性來開始本文。接下來,我將討論架構風格的概念。然後我將微服務架構定義為特定的架構風格。讓我們從理解軟體架構的概念開始。
  • 微服務架構(Microservice Architecture)
    你可以將其看作是在架構層次而非獲取服務的類上應用很多SOLID原則。微服務架構是個很有趣的概念,它的主要作用是將功能分解到離散的各個服務當中,從而降低系統的耦合性,並提供更加靈活的服務支持。概念:把一個大型的單個應用程式和服務拆分為數個甚至數十個的支持微服務,它可擴展單個組件而不是整個的應用程式堆棧,從而滿足服務等級協議。
  • 面試:SOA架構和微服務架構的區別是什麼?
    作者:zpoisonblog.csdn.net/zpoison/article/details/807290521.SOA架構和微服務架構的區別首先SOA和微服務架構一個層面的東西,而對於ESB和微服務網關是一個層面的東西,一個談到是架構風格和方法,一個談的是實現工具或組件。
  • Dapr微服務應用開發系列0:概述
    由於Dapr要解決的問題確實是大家面臨的一些痛點,並且Dapr的設計也獨樹一幟,所以一經開源,就成為GitHub上Star增長最快的開源項目之一,甚至達到5K Star的速率超過了Kubernetes。
  • DDD到底適不適合微服務架構?
    從初期的單體架構,到豎井式架構、RPC架構,再到大放異彩的微服務架構,可以說架構演進,本質上就是基於業務,對現有架構的抽象過程。一名架構師,最怕缺少全局意識和長線思維。如果架構師設計架構的出發點,只是緩解燃眉之急,那麼在未來,這套系統的迭代會越來越困難,很可能陷入推翻、重建,再推翻、再重建的「鬼打牆」。
  • 一文詳解微服務架構
    本文將介紹微服務架構和相關的組件,介紹他們是什麼以及為什麼要使用微服務架構和這些組件。本文側重於簡明地表達微服務架構的全局圖景,因此不會涉及具體如何使用組件等細節。要理解微服務,首先要先理解不是微服務的那些組件概念。
  • Serverless:微服務架構的終極模式
    然而,微服務遠沒有達到完美,它在架構、開發、基礎設施方面仍然面臨新的挑戰。微服務面臨的挑戰微服務的粒度影響服務的交付速度及擴展性,微服務的開發引入治理組件,增加了開發的難度,以容器為基礎的微服務基礎設施在彈性等方面仍有不足,而微服務增加帶來的基礎設施成本也是微服務實施的新挑戰。