本文以筆者個人經(jīng)歷講述關(guān)于微服務(wù)方面的技術(shù)選型和相關(guān)知識點。微服務(wù)模式的項目從初建到上線部署應(yīng)用,每一個環(huán)節(jié)都會涉及到相當(dāng)多的技術(shù)細(xì)節(jié)(上線后的性能調(diào)優(yōu)更需要)。本文著重介紹一套微服務(wù)搭建流程中面臨的一些技術(shù)選型,戰(zhàn)略性的技術(shù)方案及相關(guān)技術(shù)的簡要介紹,不做每一項技術(shù)的深入說明。
成都創(chuàng)新互聯(lián)公司專業(yè)提供成都主機(jī)托管四川主機(jī)托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價格,機(jī)房位于中國電信/網(wǎng)通/移動機(jī)房,四川電信機(jī)房托管服務(wù)有保障!
微服務(wù)是指開發(fā)一個單個小型的但有業(yè)務(wù)功能的服務(wù),每個服務(wù)都有自己的處理和輕量通訊機(jī)制,可以部署在單個或多個服務(wù)器上。微服務(wù)也指一種種松耦合的、有一定的有界上下文的面向服務(wù)架構(gòu)。
微服務(wù)是系統(tǒng)架構(gòu)上的一種設(shè)計風(fēng)格,主旨是將一個原本獨立的系統(tǒng)拆分成多個小型服務(wù),這些小型服務(wù)都在各自獨立的進(jìn)程中運(yùn)行,服務(wù)之間通過基于HTTP/HTTPS協(xié)議的RESTful API進(jìn)行通信協(xié)作,也可以通過RPC協(xié)議進(jìn)行通信協(xié)作。被拆分成的每一個小型服務(wù)都圍繞著系統(tǒng)中一些耦合度較高的業(yè)務(wù)功能進(jìn)行構(gòu)建,并且每個服務(wù)都維護(hù)著自身的數(shù)據(jù)存儲,業(yè)務(wù)開發(fā),自動化測試案例以及獨立部署機(jī)制。由于有了輕量級的通信協(xié)作基礎(chǔ),所以這些微服務(wù)可以使用不同的語言來編寫。
前幾年較為火的微服務(wù)技術(shù)有阿里的Dubbo方案。后面又出現(xiàn)了Spring體系下的微服務(wù)方案。本文主要介紹Spring體系下的微服務(wù)技術(shù)選型方案。
構(gòu)建一套微服務(wù)最基本的是需要搭建網(wǎng)關(guān),注冊中心,開發(fā)具體實現(xiàn)業(yè)務(wù)功能的服務(wù)。對于各個微服務(wù)之間的通信,可通過Feign方案處理。具體搭建一套微服務(wù)技術(shù)選型可參考如下方案:
不同的技術(shù)選擇應(yīng)用的場景不同:
本文針對Spring體系下微服務(wù)常用的幾個知識點做簡要說明,具體細(xì)節(jié),原理,如何應(yīng)用可通過關(guān)鍵詞搜索詳細(xì)了解。
Spring Boot是由 Pivotal團(tuán)隊提供的全新框架,其設(shè)計目的是用來簡化新 Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。
Spring Boot的核心思想就是約定大于配置,一切自動完成。采用 Spring Boot可以大大的簡化開發(fā)模式,通過組件的模式集成常用的框架。
Spring Cloud是一系列框架的有序集合。它利用 Spring Boot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊、配置中心、消息總線線、負(fù)載均衠、斷路器、數(shù)據(jù)監(jiān)控等,都可以用 Spring Boot的開發(fā)風(fēng)格做到一鍵啟動和部署。 Spring并沒有重復(fù)制造輪子,它只是將目前各家公司開發(fā)的比較成熟、經(jīng)得起實際考驗的服務(wù)框架組臺起來,通過 Spring Boot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實現(xiàn)原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。
微服務(wù)是可以獨立部署、水平擴(kuò)展、獨立訪問(或者有獨立的數(shù)據(jù)庫)的服務(wù)單元, Spring Cloud就是這些微服務(wù)的大管家,采用了微服務(wù)這種架構(gòu)之后,項目的數(shù)量會非常多, Spring Cloud做為大管家就需要提供各種方案來維護(hù)整個生態(tài)。
Spring Cloud就是一套分布式服務(wù)治理的框架,既然它是一套服務(wù)治理的框架,那么它本身不會提供具體功能性的操作,更專注于服務(wù)之間的通訊、熔斷、監(jiān)控等。因此就需要很多的組件來支持一套功能。
Spring Cloud的子項目,大致可分成兩類,一類是對現(xiàn)有成熟框架”Spring Boot化”的封裝和抽象,也是數(shù)量最多的項目;第二類是開發(fā)了一部分分布式系統(tǒng)的基礎(chǔ)設(shè)施的實現(xiàn),如Spring Cloud Stream扮演的就是kafka, ActiveMQ這樣的角色。
Spring Cloud Eureka是Spring Cloud Netflix項目下的服務(wù)治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內(nèi)容是對Netflix公司一系列開源產(chǎn)品的包裝,它為Spring Boot應(yīng)用提供了自配置的Netflix OSS整合。通過一些簡單的注解,開發(fā)者就可以快速的在應(yīng)用中配置一下常用模塊并構(gòu)建龐大的分布式系統(tǒng)。它主要提供的模塊包括:服務(wù)發(fā)現(xiàn)(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負(fù)載均衡(Ribbon)等。
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡單而有效的統(tǒng)一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態(tài)系中的網(wǎng)關(guān),目標(biāo)是替代Netflix ZUUL,其不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/埋點,和限流等。
Feign是一個偽客戶端,即它不做任何的請求處理。Feign通過處理注解生成request,從而實現(xiàn)簡化HTTP API開發(fā)的目的,即開發(fā)人員可以使用注解的方式定制request api模板,在發(fā)送http request請求之前,feign通過處理注解的方式替換掉request模板中的參數(shù),這種實現(xiàn)方式顯得更為直接、可理解。
Feign封裝了Http調(diào)用流程,更適合面向接口化的編程習(xí)慣。在服務(wù)調(diào)用的場景中,我們經(jīng)常調(diào)用基于Http協(xié)議的服務(wù),而我們經(jīng)常使用到的框架可能有HttpURLConnection、Apache HttpComponnets、OkHttp3 、Netty等等,這些框架在基于自身的專注點提供了自身特性。而從角色劃分上來看,他們的職能是一致的提供Http調(diào)用服務(wù)。
針對于上面所涉及到的知識點我總結(jié)出了有1到5年開發(fā)經(jīng)驗的程序員在面試中涉及到的絕大部分架構(gòu)面試題及答案做成了文檔和架構(gòu)視頻資料免費(fèi)分享給大家(包括Dubbo、redis、Netty、zookeeper、Spring cloud、分布式、高并發(fā)等架構(gòu)技術(shù)資料),希望能幫助到您面試前的復(fù)習(xí)且找到一個好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時間來學(xué)習(xí),也可以關(guān)注我一下以后會有更多干貨分享。