微服務入門

尚未施工完成html

1. 什麼是微服務?

微服務架構是一種架構概念,旨在經過將功能分解到各個離散的服務中以實現對解決方案的解耦。它的主要做用是將功能分解到離散的各個服務當中,從而下降系統的耦合性,並提供更加靈活的服務支持。git

2. 微服務的歷史

說到微服務,就要說說這個老頭,他是一個英國人,叫作Martin Fowler,後面移居了美國。 雖然他不是微服務概念的最先提出者,不過不少人都是經過他和James Lewis的文章瞭解微服務的概念。github

Martin Flower

這是他2014年發佈的文章 martinfowler.com/articles/mi…spring

而微服務最先的提出是2012年,是這個傢伙說的,就是上面和Martin Flower合做出了文章的James Lewis。 James Lewis是ThoughtWorks的首席顧問,也是技術顧問委員會的成員。設計模式

俺尋思這人也是個神人,爲了寫這篇文章,就用谷歌和維基搜了一下,誰知道他這麼沒有牌面,只有推特以及上面那篇文章找到一個頭像及簡介。緩存

James Lewis

3. 傳統架構與微服務架構的區別

開發模式

在傳統的開發模式中,咱們將全部功能打在一個 WAR 包內,基於三層架構和 MVC 來對應用進行解耦,並部署在一個 JavaEE 容器中。咱們能夠方便的對其進行集中式管理,與微服務架構相比,由於全部功能都在本地,因此功能間沒有通訊的問題。服務器

單體架構

單體架構

微服務架構

微服務架構

咱們能夠看出,微服務架構經過將複雜單體應用進行細粒度的拆分,能夠分別部署成不一樣的服務。再將功能模塊解耦後,不只能夠下降單獨服務器的壓力,由於都是獨立拆分出來的服務,也能實現獨立部署獨立開發。網絡

這樣的好處顯而易見,拆分後的服務交給不一樣團隊獨立維護,進行分佈式管理,彼此間不須要太多的顧忌,這樣能讓咱們實現更方便的代碼維護工做,同時開發時放心使用新的技術,而沒必要擔憂由於一個服務的故障使整個應用沒法使用。架構

4. 微服務的實踐

客戶端如何訪問這些服務

客戶端訪問微服務

每一個服務之間如何通訊

同步調用

  • REST(JAX-RS,Spring Boot)
  • RPC(Thrift, Dubbo)

異步消息調用

異步消息調用

  • Kafka
  • Notify
  • MessageQueue

如何實現?

基於客戶端的服務註冊與發現

優勢是架構簡單,擴展靈活,只對服務註冊器依賴。缺點是客戶端要維護全部調用服務的地址,有技術難度,通常大公司都有成熟的內部框架支持,好比 Dubbo 負載均衡

基於服務端的服務註冊與發現

優勢是簡單,全部服務對於前臺調用方透明,通常在小公司在雲服務上部署的應用採用的比較多。

服務掛了,如何解決?

前面提到,Monolithic 方式開發一個很大的風險是,把全部雞蛋放在一個籃子裏,一榮俱榮,一損俱損。而分佈式最大的特性就是網絡是不可靠的。經過微服務拆分能下降這個風險,不過若是沒有特別的保障,結局確定是噩夢。因此當咱們的系統是由一系列的服務調用鏈組成的時候,咱們必須確保任一環節出問題都不至於影響總體鏈路。相應的手段有不少:

  • 重試機制
  • 限流
  • 熔斷機制
  • 負載均衡
  • 降級(本地緩存

聚合器微服務設計模式

聚合器微服務設計模式

異步消息傳遞微服務設計模式

異步消息傳遞微服務設計模式
這是一個Spring Cloud Netflix 方案的 demo github.com/unkoe/hello…
相關文章
相關標籤/搜索