本文以筆者我的經歷講述關於微服務方面的技術選型和相關知識點。微服務模式的項目從初建到上線部署應用,每個環節都會涉及到至關多的技術細節(上線後的性能調優更須要)。本文着重介紹一套微服務搭建流程中面臨的一些技術選型,戰略性的技術方案及相關技術的簡要介紹,不作每一項技術的深刻說明。java
微服務是指開發一個單個小型的但有業務功能的服務,每一個服務都有本身的處理和輕量通信機制,能夠部署在單個或多個服務器上。微服務也指一種種鬆耦合的、有必定的有界上下文的面向服務架構。sql
微服務是系統架構上的一種設計風格,主旨是將一個本來獨立的系統拆分紅多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間經過基於HTTP/HTTPS協議的RESTful API進行通訊協做,也能夠經過RPC協議進行通訊協做。被拆分紅的每個小型服務都圍繞着系統中一些耦合度較高的業務功能進行構建,而且每一個服務都維護着自身的數據存儲,業務開發,自動化測試案例以及獨立部署機制。因爲有了輕量級的通訊協做基礎,因此這些微服務可使用不一樣的語言來編寫。數據庫
前幾年較爲火的微服務技術有阿里的Dubbo方案。後面又出現了Spring體系下的微服務方案。本文主要介紹Spring體系下的微服務技術選型方案。編程
構建一套微服務最基本的是須要搭建網關,註冊中心,開發具體實現業務功能的服務。對於各個微服務之間的通訊,可經過Feign方案處理。具體搭建一套微服務技術選型可參考以下方案:api
不一樣的技術選擇應用的場景不一樣:安全
本文針對Spring體系下微服務經常使用的幾個知識點作簡要說明,具體細節,原理,如何應用可經過關鍵詞搜索詳細瞭解。服務器
Spring Boot是由 Pivotal團隊提供的全新框架,其設計目的是用來簡化新 Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。架構
Spring Boot的核心思想就是約定大於配置,一切自動完成。採用 Spring Boot能夠大大的簡化開發模式,經過組件的模式集成經常使用的框架。併發
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 Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它爲Spring Boot應用提供了自配置的Netflix OSS整合。經過一些簡單的註解,開發者就能夠快速的在應用中配置一下經常使用模塊並構建龐大的分佈式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。
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鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等。
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等多個知識點高級進階乾貨,但願對想成爲架構師的朋友有必定的參考和幫助