基於SpringCloud的微服務實踐


  微服務不同於單一架構應用, 是典型的分布式場景, 各服務之間通過IPC進行通信. 實現微服務的過程中, 我們需要解決以下問題:

  • 服務注冊和服務發現.
  • 根據應用選擇合適的通信協議和數據協議. 例如可以選用thrift, protocol buffer或REST.
  • 服務負載均衡. 一個服務一般會部署多個實例. 如果使壓力均勻分布是需要考慮的問題.
  • 服務路由與限流.
  • 容錯處理. 相對於單機應用, 分布式環境下錯誤發生的概率會大大提高, 服務宕機, 網絡不可用的情況時常發生.
  • 服務監控. 各服務實例的性能指標, 例如請求響應時間, 請求並發數量, 以及服務實例的部署數量等.
  • 事務一致性. 一般來說這個問題需要我們結合業務自己處理, 框架不會給我們太多幫助.

  好的微服務框架應該能幫助我們解決上面的全部或者大部分問題.目前常見的微服務相關框架:

  • Dubbo、DubboX
  • Spring Cloud(Netflix OSS)
  • Finagle
  • Motan
  • Thrift、gRPC

 一、Dubbo優缺點:

   Dubbo幾乎是唯一能被稱作全棧微服務框架的“框架”,它包含了微服務所需的幾乎所有內容,而DubboX作為它的增強,增加了REST支持。

  優點很多,例如:

  • 全棧,服務治理的所有問題幾乎都有現成答案
  • 可靠,經過阿里實踐檢驗的產品
  • 實踐多,社區有許多成功應用Dubbo的經驗

不過遺憾的是:

  • 已經停止維護
  • 不利於裁剪使用
  • “過於Java”,與其他語言相容性一般

二、Motan優缺點:

  Motan是微博平台微服務框架,承載了微博平台千億次調用業務。優點是:

  • 性能好,源自於微博對高並發和實時性的要求
  • 模塊化,結構簡單,易於使用
  • 與其他語言相容性好

不過:

  • 為“短平快”業務而生,即業務簡單,追求高性能高並發。

三、Apache Thrift、gRPC優缺點:

  Apache Thrift、gRPC等雖然優秀,並不能算作微服務框架,自身並不包括服務發現等必要特性。如果說微服務少不了Java,那么一定少不了Spring,如果說少不了Spring,那么微服務“官配”Spring Cloud當然是值得斟酌的選擇。優點:

  • “不做生產者,只做搬運工”
  • 簡單方便,幾乎零配置
  • 模塊化,松散耦合,按需取用
  • 社區背靠Spring大樹

不足:

  • 輕量並非全棧
  • 沒解決RPC的問題
  • 實踐案例少

根據我們的目標,我們最終選擇了Spring Cloud作為我們的微服務框架,原因有4點:

  1. 雖然Dubbo基礎設施更加完善,但結構復雜,我們很難吃得下,容易出坑
  2. 基於Apache Thrift、gRPC自研,投入產出比很差
  3. 不想過早引入RPC以防濫用,Restful風格本身就是一種約束。

四、Finagle

  關於Finagle的使用請參見:http://skaka.me/blog/2016/03/19/finagle1/

五、Spring Cloud

    Spring Cloud是一個集成框架,將開源社區中的框架集成到Spring體系下,幾個重要的家族項目:

  • Spring-boot:一改Java應用程序運行難、部署難,甚至無需Web容器,只依賴JRE即可
  • Spring-cloud-netflix:集成Netflix優秀的組件Eureka、Hystrix、Ribbon、Zuul,提供服務發現、限流、客戶端負載均衡和API網關等特性支持;
  • Spring-cloud-config:微服務配置管理
  • Spring-cloud-consul:集成Consul支持

 關於Spring-cloud的使用請參見:http://blog.xujin.org/sc/sc-fx1/

 http://skaka.me/blog/categories/spring-cloud/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM