高併發微服務架構設計
做爲一個 IT 從業人員,咱們常常會碰到相似於下面的一些問題:面試
- 單個項目巨大而沉重,難以維護。
- 系統穩定性得不到更有效的保證。
- 怎樣才能持續地提高系統的性能。
- 怎樣才能快速地響應需求的變動,而且系統更新不會引發任何抖動。
- 怎樣才能更好地適應系統規模化的擴張。
針對上面這些問題,咱們無時無刻不在努力地進行各類各樣的嘗試和探索,尋求更好的解決方案,或者使用更先進的技術。spring
目前來看,在互聯網環境之中產生的微服務架構設計是一個比較理想的解決方案。數據庫
Java學習筆記共享地址:spring cloud學習筆記小程序
微服務整體架構設計
一個使用了微服務的電商平臺的整體架構設計如圖 2-1 所示。微信小程序
這是一個典型的微服務整體架構設計圖,自上往下看,能夠分爲前臺應用層、 API 接入層、業務應用層、服務中心和基礎資源層結構,每層結構都有其自身的功能和特別的設計。緩存
前臺應用層可支持任何應用的客戶端,如物聯網、微信小程序、移動 App API 開放平臺等。安全
API 接入層可使用 Spring Cloud Zuul Gateway 設計網關,起到一個承上啓下的做用,而且具有鑑權、路由和流控等功能。服務器
業務應用層是微服務 基本應用 ,它自己也是一個微服務。這裏主要是電商平臺的一些後臺管理功能微信
服務中 就是使用微服務設計的各類 AP 接口服務,這些服務通常使用基於 ST削風格的設計,對外提供輕量 API 接口服務。另外,在基礎服務中間件中,提供服務治理、消息隊列、監控告警、配置管理等服務。架構
基礎資源是咱們組建的私有云或者租用的公有云,爲微服務搭建容器平臺,提供數據存儲、 DevOps 鏡像倉庫等服務。
在這個架構設計圖中,除了上面這些,在水平方向上,還能夠看到負載均衡、日誌記錄、鏈路跟蹤,以及基於大型電商平臺的運營平臺等服務。
下面介紹微服務架構設計的優點,以及它所表現出來的高併發、高性能的特色。
- 天然的壓力分解。
- 可彈性伸縮的集羣環境。
- 高度的獨立性設計。
- API 的分層調用關係。
- 高可用的基礎資源支持。
- 快速響應的自動化基礎設施。
- 完善的監控體系。
- 微服務的安全保障。
天然的壓力分解
對於一個大型系統來講,在使用微服務架構設計以後,原來針對單獨一個應用所承受的壓力,就天然而然地分散到衆多微服務中。各個微服務可使用不一樣的數據庫,而且能夠分開部署在不一樣的服務器上,全部這些,都是一種壓力分流的方法。
可彈性伸縮的集羣環境
微服務的部署和發佈,最終都將歸入微服務的治理環境之中。這種治理環境是一個分佈式的集羣管理體系,對於每個微服務來講,都能對其實行動態路由、負載均衡、服務降級等一系列的管控措施。同時,容許每一個微服務根據其所承受的壓力狀況,進行自由的擴展和收縮,即具有可彈性伸縮的特性。
圖2-2 是微服務的一個運行環境示意圖,不論是做爲提供接口服務的阻STAPI 微服務,仍是提供操做界面的 WebUI 微服務,均可以根據須要在雲端服務器上很方便地增長其運行副本,從而擴展它的負載能力。並且,這種擴展並不侷限於在一個虛擬環境中,它能夠跨機房、跨地區,甚至跨國界。固然,微服務所使用的基礎資源,一樣具有自由擴展的能力。這樣才能保證在整個系統平臺中能夠應對任何高併發的調用,而不存在性能瓶頸。
高度的獨立性設計
微服務架構的去中心化的設計特色,爲每一個微服務的設計提供了高度的獨立性。這樣,咱們就能夠根據每一個微服務的特色,選擇數據庫或者通訊方式,以發揮其獨特的效能。
好比,對於數據量不是很大,關聯性不是很複雜的數據,可使用傳統的關係數據庫,如MySQL 或者 Oracle 。對於數據量較大,更新不是很頻繁的數據,可使用 MongoDB NoSQL數據庫。對於一些關係複雜,關聯比較多的數據,則可使用圖數據庫,如 Neo4j 等。這樣針對不一樣的業務特性,使用合適的數據庫,就能夠充分發揮應用程序的性能。
對於通訊方式來講,有些程序對實時數據很敏感,只能使用接口的方式進行實時調用:而有的程序對實時數據並無太多要求,可是通訊量很大,這時就可使用異步消息進行調用。
這樣,經過有針對性的獨立設計,能夠最大限度地發揮應用程序的效能。
API 的分層調用關係
微服務使用 GateWay 網關接口方式對外部環境提供服務。這種方式使用分層結構設計,在Gate Way 層既能夠直接調用 RESTAPI 微服務接口服務,也能夠再通過一層設計,即便用 Backendfor Frontend 層對複雜的調用進行一次包裝設計。例如,當須要對多個微服務進行調用時,能夠將多個調用組裝成一個單一接口服務,從而避免微服務內部環境與外部環境的多重通訊。另外,有的通訊可使用 MQ (Message Queue )方式以異步方式進行。
圖2-3 是一個 GateWay 多層次調用關係示意圖,在這個圖中,每一個層次均可以進行負載均衡設計,從而可以很是有效地提升這種調用關係的併發性。其中,微服務內部環境的負載均衡設計能夠由服務治理進行處理,而處在外部環境中的 GateWay 的負載均衡設計則可使用 Nginx等工具進行實施。
高可用的基礎資源支持
在微服務架構設計中,一般是使用雲服務來組建基礎資源的。其中,雲服務既能夠租用雲服務提供商的服務器,也能夠本身組建私有云,或者二者兼而有之。
基於雲端組建的基礎資源,包括數據庫、緩存和文件系統等,這些資源既可使用雲服務提供商提供的優質 RDBS 、分佈式數據庫和對象存儲等服務,也能夠本身搭建各類集羣體系。
這樣,就能夠保證每一種基礎資源的使用都不會成爲另一個系統的瓶頸,這是對高併發微服務架構設計的有力補充和支持。
快速晌應的自動化基礎設施
自動化基礎設施建設是微服務架構設計中的一項基本要求,涉及代碼管理、代碼檢查、集成測試、自動化測試、持續交付、自動化部署等一系列問題。
不論是持續集成、持續交付,仍是敏捷開發等,這些都是 DevOps 的一種管理機制。這種管理機制能夠提升微服務架構設計中各個微服務應用的應變能力,能夠快速響應整個系統的變動和更新,從而充分提高整個微服務架構的整體效能。
完善的監控體系
經過使用 Sp Cloud 工具套件並結合第三方工具,咱們能夠爲微服務的運行環境構建一個完善的監控體系,從而有效保證微服務的穩定性和健壯性。
這一監控體系包括健康檢查、告警系統、鏈路跟蹤、日誌記錄和查詢等內容。經過健康檢查和告警系統,能夠及時發現系統中可能存在的問題和隱患,從而減小事故的發生。鏈路跟蹤和日誌記錄能夠提供很是詳細的服務調用軌跡,很是適合用來檢驗和查找複雜的系統內部問題,或者某些可能存在的隱藏錯誤。
微服務的安全保障
越大型的系統,系統的併發性越高,危險性越大,其安全保障也越重要。系統的安全設計包括防火牆設計、防攻擊設計、訪問控制設計、數據保密設計、數據備份及災備等各個方面的內容。而安全防禦是系統安全的第一道屏障,咱們將使用防火牆及動態感知等設備,爲微服務的服務器組建,提供一個安全可靠的分佈式環境。
Spring Cloud面試真題共享地址:spring cloud答案解析。
如圖 2-4 所示,是根據阿里雲設計的一個安全管理架構,經過安全防禦和安全預警 對不安全的訪問或可能存在的攻擊進行有效隔離,從而保證系統的安全和穩定。
若是須要進行跨機房或跨地區的微服務互聯,則必須在保證安全的前提下,經過 VPC 專網使用專用通道進行通訊。
小結
微服務架構設計風格自己就是一種高併發的機制。依靠雲服務環境,咱們能夠把微服務使用的基礎資源,經過自動化基礎設施建設,提供成一種可伸縮、高併發、高可用的環境。同時,經過使用 Spring Cloud 工具套件和第三方庫,充分保證微服務的高度可擴展性。不論是哪種架構設計,系統的穩定性、健壯性和可靠性都缺一不可。