微服務技術選型之路

本文以筆者個人經歷講述關於微服務方面的技術選型和相關知識點。微服務模式的項目從初建到上線部署應用,每一個環節都會涉及到相當多的技術細節(上線後的性能調優更需要)。本文着重介紹一套微服務搭建流程中面臨的一些技術選型,戰略性的技術方案及相關技術的簡要介紹,不做每一項技術的深入說明。

微服務簡介
微服務是指開發一個單個小型的但有業務功能的服務,每個服務都有自己的處理和輕量通訊機制,可以部署在單個或多個服務器上。微服務也指一種種鬆耦合的、有一定的有界上下文的面向服務架構。

微服務是系統架構上的一種設計風格,主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於HTTP/HTTPS協議的RESTful API進行通信協作,也可以通過RPC協議進行通信協作。被拆分成的每一個小型服務都圍繞着系統中一些耦合度較高的業務功能進行構建,並且每個服務都維護着自身的數據存儲,業務開發,自動化測試案例以及獨立部署機制。由於有了輕量級的通信協作基礎,所以這些微服務可以使用不同的語言來編寫。

微服務的優點
每個微服務都很小,這樣能夠聚焦一個指定的業務功能或業務需求。
微服務能夠被小團隊單獨開發,這個小團隊是2到5人的開發人員組成。
微服務是鬆耦合的,是有功能意義的服務,無論是在開發階段或部署階段都是獨立的。
微服務能使用不同的語言開發,如Java、Python、PHP、C#等。
微服務允許容易且靈活的方式集成自動部署,通過持續集成工具,如Jenkins, Travis CI等工具。
一個團隊的新成員能夠更快投入生產。
微服務易於被一個開發人員理解,修改和維護,這樣小團隊能夠更關注自己的工作成果。無需通過合作才能體現價值。
微服務方便融合最新技術。
微服務只是業務邏輯的代碼,不會和HTML,CSS 或其他界面組件混合。
微服務能夠即時被要求擴展。
微服務能部署中低端配置的服務器上。
易於和第三方應用系統集成。
每個微服務都有自己的存儲能力,可以有自己的數據庫,也可以有統一數據庫。
微服務技術選型
前幾年較爲火的微服務技術有阿里的Dubbo方案。後面又出現了Spring體系下的微服務方案。本文主要介紹Spring體系下的微服務技術選型方案。

 構建一套微服務最基本的是需要搭建網關,註冊中心,開發具體實現業務功能的服務。對於各個微服務之間的通信,可通過Feign方案處理。具體搭建一套微服務技術選型可參考如下方案:



不同的技術選擇應用的場景不同:

網關:若整個公司業務都基於java開發,可以直接使用Spring Gateway做網關。若還存在其他的開發語言,也可選擇kong網關模式。
註冊中心:基於java開發,Spring體系下可直接用 Spring Eureka。若還存在其他語言編寫的服務,可使用Consul。
微服務搭建:各自語言都可以搭建。若採用java開發,可參考Spring boot方案搭建微服務。
持續集成的方案,三種都可以。若基於java開發,第一種最爲傳統,運維人員或開發人員工作更多,需編寫啓動腳本,使用jdk命令啓動java程序。建議使用第二種方案。第三種方案操作更爲簡便,但需用阿里雲的產品。
Spring Boot 項目構建:採用Spring Boot模式搭建微服務項目時,對於Maven項目pom.xml配置文件的使用需注意pom文件配置單項目模式和項目聚合模式的區別。對於網關,註冊中心可採用單項目模式。但在搭建真正業務的服務時,建議採用父子級項目聚合的方式。筆者最初做微服務開發時,採用了單項目的模式,當開發了多個業務的微服務後,單項目模式在引用依賴項目版本,管理項目時極爲不便。
微服務相關知識點
本文針對Spring體系下微服務常用的幾個知識點做簡要說明,具體細節,原理,如何應用可通過關鍵詞搜索詳細瞭解。

Spring Boot
Spring Boot是由 Pivotal團隊提供的全新框架,其設計目的是用來簡化新 Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。

Spring Boot的核心思想就是約定大於配置,一切自動完成。採用 Spring Boot可以大大的簡化開發模式,通過組件的模式集成常用的框架。

Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用 Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線線、負載均衠、斷路器、數據監控等,都可以用 Spring Boot的開發風格做到一鍵啓動和部署。 Spring並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組臺起來,通過 Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包。

 微服務是可以獨立部署、水平擴展、獨立訪問(或者有獨立的數據庫)的服務單元, Spring Cloud就是這些微服務的大管家,採用了微服務這種架構之後,項目的數量會非常多, Spring Cloud做爲大管家就需要提供各種方案來維護整個生態。

Spring Cloud就是一套分佈式服務治理的框架,既然它是一套服務治理的框架,那麼它本身不會提供具體功能性的操作,更專注於服務之間的通訊、熔斷、監控等。因此就需要很多的組件來支持一套功能。

Spring Cloud的子項目,大致可分成兩類,一類是對現有成熟框架”Spring Boot化”的封裝和抽象,也是數量最多的項目;第二類是開發了一部分分佈式系統的基礎設施的實現,如Spring Cloud Stream扮演的就是kafka, ActiveMQ這樣的角色。

Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它爲Spring Boot應用提供了自配置的Netflix OSS整合。通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模塊並構建龐大的分佈式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。

Spring Cloud Gateway
Spring Cloud Gateway是Spring官方基於Spring 5.0,Spring Boot 2.0和Project Reactor等技術開發的網關,Spring Cloud Gateway旨在爲微服務架構提供一種簡單而有效的統一的API路由管理方式。Spring Cloud Gateway作爲Spring Cloud生態系中的網關,目標是替代Netflix ZUUL,其不僅提供統一的路由方式,並且基於Filter鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等。

Spring Cloud Feign
Feign是一個僞客戶端,即它不做任何的請求處理。Feign通過處理註解生成request,從而實現簡化HTTP API開發的目的,即開發人員可以使用註解的方式定製request api模板,在發送http request請求之前,feign通過處理註解的方式替換掉request模板中的參數,這種實現方式顯得更爲直接、可理解。

Feign封裝了Http調用流程,更適合面向接口化的編程習慣。在服務調用的場景中,我們經常調用基於Http協議的服務,而我們經常使用到的框架可能有HttpURLConnection、Apache HttpComponnets、OkHttp3 、Netty等等,這些框架在基於自身的專注點提供了自身特性。而從角色劃分上來看,他們的職能是一致的提供Http調用服務。
寫在最後:

碼字不易看到最後了,那就點個關注唄,只收藏不點關注的都是在耍流氓!
關注並私信我“架構”,免費送一些Java架構資料,先到先得!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章