微服務技術選型之路

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

 微服務簡介

微服務是指開發一個單個小型的但有業務功能的服務,每一個服務都有本身的處理和輕量通信機制,能夠部署在單個或多個服務器上。微服務也指一種種鬆耦合的、有必定的有界上下文的面向服務架構。sql

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

微服務的優勢

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

 微服務技術選型

前幾年較爲火的微服務技術有阿里的Dubbo方案。後面又出現了Spring體系下的微服務方案。本文主要介紹Spring體系下的微服務技術選型方案。編程

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

不一樣的技術選擇應用的場景不一樣:安全

  • 網關:若整個公司業務都基於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調用服務。


本文的重點是你有沒有收穫與成長,其他的都不重要,但願讀者們能謹記這一點。同時我通過多年的收藏目前也算收集到了一套完整的學習資料,包括但不限於:分佈式架構、高可擴展、高性能、高併發、Jvm性能調優、Spring,MyBatis,Nginx源碼分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多個知識點高級進階乾貨,但願對想成爲架構師的朋友有必定的參考和幫助

須要更詳細架構師技能思惟導圖和如下資料的能夠加一下技術交流分享羣:「708 701 457」免費獲取




相關文章
相關標籤/搜索