什麼是微服務

提到微服務不得不提Martin Fowler在2014年3月25日發表的文章 Microservices,裡面給出了微服務的定義。後續國內所有關於微服務的介紹都是基於這篇文章的翻譯,或加上自己的理解而成。其中最重要的一段如下:

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

翻譯過來就是:微服務這種架構風格就是把一組小服務演化成為一個單一的應用的一種方法。每個應用都執行在自己的程序中,並通過輕量級的機制保持通訊,就像HTTP這樣的API。這些服務要基於業務場景,並使用自動化佈署工具進行獨立的釋出。可以有一個非常輕量級的集中式管理來協調這些服務,可以使用不同的語言來編寫服務,也可以使用不同的資料儲存。

如何實現微服務

相對於單體式架構的簡單粗暴,微服務架構將應用打散,形成多個微服務進行獨立開發、測試、部署與運維。雖然從管理與邏輯上更符合業務需要,但微服務架構也帶來了諸多急需解決的核心問題:

  1. 如何發現新服務節點以及檢查服務節點的狀態?
  2. 如何發現服務及負載均衡如何實現?
  3. 服務間如何進行訊息通訊?
  4. 如何對使用者暴露服務 API?
  5. 如何集中管理眾多服務節點的配置檔案?
  6. 如何收集服務節點的日誌並統一管理?
  7. 如何實現服務間呼叫鏈路追蹤?
  8. 如何對系統進行鏈路保護,避免微服務雪崩?

可以發現,上述這些問題並不是針對某種語言或某種技術的,任何軟體廠商要構建微服務架構就必須面對這些問題,要麼獨立開發要麼將已有多種技術整合形成整體解決方案。好在經過多年沉澱,業內已經有了標準答案,下圖清晰的說明微服務架構需要的標準組件。

API閘道器: 封裝了系統內部架構,為每個客戶端提供一個定製的 API。在微服務架構中,服務閘道器的核心要點是,所有的客戶端和消費端都通過統一的閘道器接入微服務,在閘道器層處理所有的非業務功能。

為什麼選擇SpringCloud

首先,Spring Cloud 具備一個天生的優勢,因為它是 Spring 家庭的一員,而 Spring 在 Java EE 開發領域的強大地位,給 Spring Cloud 起到很好的推動作用。同時,Spring Cloud 所基於的 Spring Boot,已經成為 Java EE 領域中最流行的開發框架,用來簡化 Spring 應用程式的框架搭建和開發過程。

其次,技術元件的完備性是我們選擇 Spring Cloud 的主要原因。Spring Cloud 中包含了開發一個完整的微服務系統所需的幾乎所有技術元件,包括服務註冊和發現、API 閘道器、配置中心、訊息處理、負載均衡、熔斷器、資料監控等常見技術元件都可以基於 Spring Boot 快速整合到業務系統中。

以下為SpringCloud 中常用的技術元件

為什麼選擇SpringCloud alibaba

首先, SpringCloud中的技術元件是集眾家之長,如註冊中心 Eureka,Zuul等都是依賴於Netflix的,這也導致它受制於第三方廠商。如Zuul宣佈停止維護,Spring機構便不得不尋找替代品或自研;Eureka2.x 閉源不允許使用;

其次,Springcloud作為國外產品引入到國內後出現了水土不服,如SpringCloud Config預設將檔案存在Github上,且沒有維護介面,國內軟體公司很少會同意這麼做。比如我們部門就是使用了Apollo配置中心替代了原生的SpringCloud Config。

Spring Cloud Alibaba是國產的微服務開發一站式解決方案,與原有 Spring Cloud 相容的同時對微服務生態進行擴充套件,通過新增少量的配置註解,便可實現更符合國情的微服務架構,當前Spring Cloud Alibaba已經是直接隸屬於 Spring Cloud 的子專案。官網是:https://spring.io/projects/spring-cloud-alibaba#overview

Spring Cloud Alibaba 對服務註冊、配置中心與負載均衡功能都整合進 Nacos,有圖形化介面,簡化了微服務架構的複雜度,出問題的概率也會降低。原有的服務保護元件也調整為 Sentinel,相較Hystrix功能更強大,使用也更加友好。同時還支援了對Dubbo的呼叫,而且還有Seata用於支援分散式事務。

求贊求關注

飄渺Jam,一位寫程式碼的架構師,做架構的程式設計師,他的公眾號主要分享Java後端,SpringCloud微服務架構,資料庫等方向的文章,如果你對微服務比較感興趣,建議掃描下方二維碼加個關注!