微服務布道師:詳解微服務架構

2014作為代表公司去學習微服務,經過一番打拼,如今也算是微服務的佈道師。

這兩年,微服務這個概念火了,火到什麼程度呢?2016年有一個統計說,兩千家企業裡,30%在使用微服務,15%在實驗開發和測試微服務架構,24%在學習微服務準備轉型,只有剩下的30%的企業沒有使用微服務。

什麼是微服務

微服務的概念源於2014年3月Martin Fowler所寫的一篇文章“Microservices”。

微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間採用輕量級的通信機制互相溝通(通常是基於HTTP的RESTful API)。每個服務都圍繞著具體業務進行構建,並且能夠被獨立地部署到生產環境、類生產環境等。另外,應儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。

微服務是一種架構風格,一個大型複雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注於完成一件任務並很好地完成該任務。在所有情況下,每個任務代表著一個小的業務能力。

為什麼這麼多公司會選擇微服務。

微服務架構優勢

複雜度可控:在將應用分解的同時,規避了原本複雜度無止境的積累。每一個微服務專注於單一功能,並通過定義良好的接口清晰表述服務邊界。由於體積小、複雜度低,每個微服務可由一個小規模開發團隊完全掌控,易於保持高可維護性和開發效率。

獨立部署:由於微服務具備獨立的運行進程,所以每個微服務也可以獨立部署。當某個微服務發生變更時無需編譯、部署整個應用。由微服務組成的應用相當於具備一系列可並行的發佈流程,使得發佈更加高效,同時降低對生產環境所造成的風險,最終縮短應用交付週期。

技術選型靈活:微服務架構下,技術選型是去中心化的。每個團隊可以根據自身服務的需求和行業發展的現狀,自由選擇最適合的技術棧。由於每個微服務相對簡單,故需要對技術棧進行升級時所面臨的風險就較低,甚至完全重構一個微服務也是可行的。

容錯:當某一組件發生故障時,在單一進程的傳統架構下,故障很有可能在進程內擴散,形成應用全局性的不可用。在微服務架構下,故障會被隔離在單個服務中。若設計良好,其他服務可通過重試、平穩退化等機制實現應用層面的容錯。

擴展:單塊架構應用也可以實現橫向擴展,就是將整個應用完整的複製到不同的節點。當應用的不同組件在擴展需求上存在差異時,微服務架構便體現出其靈活性,因為每個服務可以根據實際需求獨立進行擴展。

Java語言相關微服務框架

1.Spring Boot

Spring Boot的設計目的是簡化新Spring應用初始搭建以及開發過程,2017年有64.4%的受訪者決定使用Spring Boot,可以說是最受歡迎的微服務開發框架。利用Spring Boot開發的便捷度簡化分佈式系統基礎設施的開發,比如像配置中心、註冊、負載均衡等方面都可以做到一鍵啟動和一鍵部署。

2.Spring Cloud

Spring Cloud是一個系列框架的合計,基於HTTP(s)的RETS服務構建服務體系,Spring Cloud能夠幫助架構師構建一整套完整的微服務架構技術生態鏈。

微服務佈道師:詳解微服務架構

3.Dubbo

Dubbo是由阿里巴巴開源的分佈式服務化治理框架,通過RPC請求方式訪問。Dubbo是在阿里巴巴的電商平臺中逐漸探索演進所形成的,經歷過複雜業務的高併發挑戰,比Spring Cloud的開源時間還要早。目前阿里、京東、噹噹、攜程、去哪等一些企業都在使用Dubbo。

4.Dropwizard

Dropwizard將Java生態系統中各個問題域裡最好的組建集成於一身,能夠快速打造一個Rest風格的後臺,還可以整合Dropwizard核心以外的項目。國內現在使用Dropwizard還很少,資源也不多,但是與SpringBoot相比,Dropwizard在輕量化上更有優勢,同時如果用過Spring,那麼基本也會使用SpringBoot。

5.Akka

Akka是一個用Scala編寫的庫,可以用在有簡化編寫容錯、高可伸縮性的Java和Scala的Actor模型,使用Akka能夠實現微服務集群。

6.Vert.x/ Lagom/ ReactiveX/Spring 5

這四種框架主要用於響應式微服務開發,響應式本身和微服務沒有關係,更多用於提升性能上,但是可以和微服務相結合,也可以提升性能。

微服務佈道師:詳解微服務架構

Net相關微服務框架

1.NET Core

.NET Core是專門針對模塊化微服務架構設計的,是跨平臺應用程序開發框架,是微軟開發的第一個官方版本。

2.Service Fabric

Service Fabric是微軟開發的一個微服務框架,基於Service Fabric構建的很多雲服務被用在了Azure上。

3.Surging

Surging是基於RPC協議的分佈式微服務技術框架,基於.NET Core而來。

4.Microdot Framework

Microdot Framework用於編寫定義服務邏輯代碼,不需要解決開發分佈式系統的挑戰,能夠很方便的進行MicrosoftOrleans集成。

微服務佈道師:詳解微服務架構

Node.js相關微服務框架

1.Seneca

Seneca是Node.js的微服務框架開發工具,可以用於編寫可用於產品環境的代碼。

2.Hapi/ restify/ LoopBack

這三種框架的分工不同,前兩種更適合開發簡單的微服務後端系統,第三種更適合用在大型複雜應用開發,還可以用在現有微服務上的構建。

Go相關微服務框架

Go-Kit/Goa/Dubbogo

Go-Kit是分佈式開發的工具合集,適合用於大型業務場景下構建微服務;Goa是用Go語言構建的微服務框架;Dubbogo是和阿里巴巴開源的Dubbo能夠兼容的Golang微服務框架。

Python相關微服務框架

Python相關的微服務框架非常少,用的比較多的是Nameko。Nameko讓實現微服務變得更簡單,同時也提供了很豐富的功能,比如支持負載均衡、服務發現還支持依賴自動注入等,使用起來很方便,但是有限速、超時和權限機制不完善等缺點。

微服務已經成為很多大型互聯網公司的選擇,對於架構師和想要成為架構師的工程師來說,掌握微服務不僅要學會使用相關框架來實現,還要掌握具體用法,在具體的實踐中仍然要避開很多坑。

在第六屆TOP100全球軟件案例研究峰會的入圍榜單中,途牛研發總監劉曉濤以旅遊平臺系統建設為案例,介紹如何快準好的實現系統對新業務的支持,介紹途牛落地微服務架構的實踐經歷。

我這裡也有一份我曾經學習的資料,路線圖,都可以關注我私信獲取。

微服務佈道師:詳解微服務架構


分享到:


相關文章: