SpringCloud微服務之Eureka注冊中心

一、微服務簡介
1、什么是微服務?
??微服務(MicroService)的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他們定義了微服務是由單一應用程序構成的小服務,擁有自己的進程與輕量化處理,服務依業(yè)務功能設計(微服務一個業(yè)務一個項目),以全自動方式部署,與其他服務使用 HTTP API 通訊(每個項目都是一個標準的web項目,不在像之前RPC項目分為provider和consumer)。同時,服務會使用最小規(guī)模的集中管理 (例如 Docker)技術,服務可以用不同的編程語言與數(shù)據(jù)庫等。
提取出的核心點:
微服務是架構。
微服務中項目都稱為服務。
微服務拆分顆粒度為業(yè)務。
微服務中服務和服務之間使用HTTP協(xié)議通信。
微服務和Docker結合使用更方便。
微服務是分布式架構的一種。
2、為什么使用微服務?
2.1?單體應用特點
????大部分的開發(fā)者都開發(fā)過單體應用,無論是傳統(tǒng)的 Servlet + JSP,還是 SSM,還是現(xiàn)在的 SpringBoot,它們都是單體應用,那么長期陪伴我們的單體應用有什么弊端?我們是面臨了什么問題,導致我們要拋棄單體應用轉(zhuǎn)向微服務架構?主要原因如下:
a)?部署成本高(無論是修改1行代碼,還是10行代碼,都要全量替換)。
b)?改動影響大,風險高(不論代碼改動多少,成本都相同)。
c)?因為成本高,風險高,所以導致部署頻率低(無法快速交付客戶需求)。
d)?無法滿足快速擴容,彈性伸縮,無法適應云環(huán)境特性等問題。
注意:單體應用雖然有上面缺點,但是依然有自己的市場,如果項目規(guī)模比較小,辦公類等不需要頻繁修改版本的應用使用單體架構還是很方便的。
2.2?微服務特點
微服務架構的特點:針對特定服務發(fā)布,影響小,風險小,成本低;頻繁發(fā)布版本,快速交付需求;低成本擴容,彈性伸縮,適應云環(huán)境等特點。
微服務架構與現(xiàn)在企業(yè)中敏捷開發(fā)思想是匹配的,核心都是強調(diào)希望項目快速更新迭代(當項目需要快速更新迭代時微服務架構就特別適合)(這就是為什么使用微服務)。
我們知道一個樸素的理念,沒有任何事物是完美的,任何東西都有兩面性,有得必有失,那么在選擇微服務在解決了快速響應和彈性伸縮的問題同時,它又給我們帶來了什么問題?簡單總結如下(微服務架構的缺點):
分布式系統(tǒng)的復雜性
部署,測試和監(jiān)控的成本問題
分布式事務和CAP的相關問題
分布式中微服務架構相對于單體架構還需要處理很多事情。例如:分布式事務、團隊合作等問題都需要明確的提前設計好。
3、應用程序架構變遷圖
無論是SOA架構、RPC架構還是微服務架構統(tǒng)稱為分布式架構。

3.1?RPC架構和SOA架構和微服務架構的區(qū)別?
SOA架構:?核心消息總線。消息總線過于笨重在目前項目中已經(jīng)很少使用了。
RPC架構:?主要有被調(diào)用的遠程服務端(Provider)和調(diào)用的服務端(Consumer),把所有數(shù)據(jù)庫操作都封裝到了Provider。一個單體拆分成多個,之間使用HTTP通信,每個項目又拆分成兩個(Provider和Consumer),之間使用Dubbo協(xié)議通信。mapper和service寫到provider中,service和controller寫到consumer中。
微服務架構:每個業(yè)務是一個項目。業(yè)務之間通信使用HTTP協(xié)議通信。不再對一個業(yè)務(模塊)項目進行拆分成Provider和Consumer了。mapper和service和controller都寫到一個項目中。
3.2?目前市場上微服務架構的常用實現(xiàn)框架
實現(xiàn)框架:Spring Cloud。
Spring Cloud里面目前包含三體體系:
Spring Cloud Netflix : 學習這個。目前市場上使用最多的。
Spring Cloud Alibaba:基于Dubbo實現(xiàn)的。
Spring 自己的:為了擺脫受Netflix公司限制,所有功能都自己又逐漸推出一套。

二、Eureka簡介
1、Eureka是什么
????Eureka是由Netflix公司推出的服務注冊和發(fā)現(xiàn)工具?,F(xiàn)已被Spring Cloud集成,提供了開箱即用的支持。(直接在項目中直接集成,快捷使用)
2、Eureka角色
Eureka中分為兩個角色:Eureka Server(Eureka服務)和Eureka Client(Eureka客戶端)。
無論是服務端還是客戶端其本質(zhì)都是一個Java項目,在Spring Cloud中主要通過啟動類上添加@EnableEurekaServer和@EnableEurekaClient(可以省略)來區(qū)分當前應用程序是服務端還是客戶端。
Eureka Server可以理解成之前我們講解的Zookeeper注冊中心,只是現(xiàn)在使用的是Java項目實現(xiàn)的(Spring Cloud內(nèi)嵌Eureka)。
Eureka Client 可以理解成所有需要注冊到Eureka Server中的項目。為什么需要向注冊中心中注冊呢?因為注冊后別人才能通過注冊中心獲取到項目信息和項目所在服務器信息,通過這些信息調(diào)用這個項目。Spring Cloud中每個項目調(diào)用的信息都存儲在了注冊中心中(Eureka)。
注意:在這里,Spring Cloud中沒有Provider和Consumer說法。如果A項目訪問B項目,稱A項目為Application Client,稱B項目為Application Service。同時可能存在C訪問A的情況,這是C項目是Application Client,A項目是Application Service。發(fā)現(xiàn)A項目又是Application Service又是Application Client,主要看針對哪個業(yè)務場景。無論是Applicatin Service還是Application Client都是Eureka Client。

想要學習更多的Eureka知識可以觀看視頻哦~