關於微服務的好文章不計其數。對於那些一直沒有親歷微服務或初次聽到這個概念的人來說,這篇文章相當於把一份頂級的開源工具清單送到他們的面前。微服務是一種用於開發高度可伸縮軟件系統的架構風格。這種架構可用於開發企業、政府、學校和慈善機構的企業級應用。它與傳統的單體架構完全相反,單體架構只專注於單個應用程序。
微服務小而獨立,但在開發和維護方面,它們的架構可能很複雜。微服務之間通過同步協議(如HTTP/REST)或異步協議(如AMQP)相互通信來實現業務目標。
但有些事情看起來容易做起來難,微服務架構看似條理分明,但真正要使用各種工具來構建微服務並不容易。這不像傳統的開發、測試和部署那麼簡單,它還需要持續的監控,當出現故障時,還需要能夠快速解決問題。
請記住,沒有一個工具可以為微服務提供一站式的解決方案。Mike Amundsen在他的文章“微服務架構三要素”中指出,有三個關鍵因素決定了是否能夠成功實施微服務:溝通、團隊和創新。在這三個因素中,溝通無疑是最不可或缺的因素。
有很多工具可用於構建微服務,其中大多數是免費的,可用於執行特定任務,也有一些提供了收費功能。
API管理和測試
1. API Fortress
API Fortress是API測試和健康檢測工具,為企業級API提供自動化的功能測試、健康檢測和負載測試。它的設計原則是無代碼,完全基於現代API架構實踐和模式而構建。
http://apifortress.com/
2. Postman
Postman是面向個體開發者和團隊的API開發套件,可讓你輕鬆運行UI驅動的API測試。Postman還是一個功能強大的HTTP客戶端,讓RESTful API探索變得輕而易舉。用戶可以將簡單和複雜的HTTP請求組合在一起,實現快速的API測試、開發和文檔化。
https://www.getpostman.com/
3. Tyk
Tyk是一款開箱即用的開源API管理平臺,速度快,可伸縮。無論是部署在內部,還是部署在雲端,或者使用兩者的混合,對Tyk來說都不在話下。除了可以降低管理成本,Tyk還將為你帶來高可用性和低延遲。
https://tyk.io/
消息服務
4. RabbitMQ
RabbitMQ可作為微服務之間的通信橋樑,它支持各種模式,可提高應用程序的可伸縮性,並解決大多數分佈式系統都存在的問題。RabbitMQ可用在微服務環境或任何其他分佈式系統中。你還可以使用這個工具在服務之間交換事件。
https://www.rabbitmq.com/
5. 亞馬遜簡單隊列服務(SQS)
亞馬遜SQS提供了強大、靈活且可靠的微服務通信機制。作為一種基於發佈訂閱的微服務通信模型,亞馬遜SQS可以幫助開發人員解決很多問題。除了更好的安全性之外,隊列還通過為待處理消息提供儲存來增強可靠性。
https://aws.amazon.com/sqs/
6. Apache Kafka
消息隊列對於微服務架構來說是非常重要的,可用來處理微服務之間的通信以及微服務與外部源之間的通信,不管是密集型的數據處理還是API調用。Apache Kafka是一個具有高容錯和彈性的分佈式流處理平臺。
https://kafka.apache.org/
7. Google Cloud Pub/Sub
Google Cloud Pub/Sub是一款全託管的實時消息服務,可讓你在微服務之間發送和接收消息。將應用程序與Google Cloud Pub/Sub集成將有助於處理所有異步請求,並減少用戶等待響應的時間。
https://cloud.google.com/pubsub/
監控
8. Logstash
在部署好微服務後,必須對其進行監控。然而,做好監控需要考慮諸多因素。例如,某個微服務是否運行良好,需要做出調整嗎?其他組件(比如數據庫)是否運行正常?你需要通過檢查日誌來檢查這些問題,而Logstash是一個很好的日誌工具。它是一個開源平臺,你可以通過Logstash進行數據收集、存儲和轉換。
https://www.elastic.co/products/logstash
9. Graylog
可以將Logstash與Graylog結合在一起使用,作為集中式的服務器。Graylog提供了交互式的界面,簡單易用且速度快。用戶可以在Graylog中輕鬆地瀏覽數據。它具有可伸縮性,可隨著業務增長而增長。Graylog不是免費的,但價格很實惠。
https://www.graylog.org/
Kube開發
10. Kubernetes
雖然Kubernetes是容器編配器,但在微服務領域,也有它的一席之地。Kubernetes已經成為最佳部署實踐的黃金標準。在容器調度、負載均衡、服務發現等方面,Kubernetes是佼佼者。
https://kubernetes.io/
11. Telepresence
Telepresence是Kubernetes的一個本地開發工具。等待容器部署完成可能會非常耗時,而有了Telepresence,就可以使用混合模型。你在筆記本電腦上完成本地編碼,同時通過雙向代理連接Kubernetes中的服務。不過,不推薦在生產環境中使用Telepresence,它更適合用於本地開發。
https://www.telepresence.io/
12. Istio
Istio支持在Kubernetes上進行服務部署。Istio服務網格技術為微服務通信帶來了可靠性、安全性和可管理性。服務網格技術可用於改善應用程序和微服務之間的關係和交互。
https://istio.io/
13. Minikube
Minikube是一個方便的開源工具,可讓你在沒有WiFi的情況下在筆記本電腦上運行Kubernetes。例如,當你在飛機上並且需要寫代碼時,就會派上用場。
https://github.com/kubernetes/minikube
編配
14. Conductor
Conductor是Netflix的微服務編排引擎,是Netflix OSS生態系統的一部分。Conductor運行在雲端,並實現了微服務的流程編配。它還可用於控制和可視化微服務之間的交互。
https://netflix.github.io/conductor/
編程語言
15. Elixir
使用Elixir來擴展你的編程技能,它是一門通用的函數式併發編程語言,運行在Erlang VM(也稱為BEAM)之上。
https://elixir-lang.org/
16. Spring Boot
使用Spring Boot框架可以大大簡化REST微服務的創建,只需幾行代碼即可。你可以使用Spring Boot提供的示例或Spring Initializr快速開始你的項目。
http://spring.io/
工具包
17. fabric8
作為開源的平臺即服務工具,fabric8為開發人員提供了基於git的配置管理系統,可處理IP地址複雜性和端口映射,並對服務進行負載均衡。fabric8還為我們帶來了可伸縮性和高可用性。
http://fabric8.io/
18. Seneca
開發人員可以使用Seneca輕鬆構建基於消息的微服務,它是Node.js的微服務工具包,可以用它寫出乾淨且結構良好的代碼,並輕鬆系統化應用程序的業務邏輯。
http://senecajs.org/
19. Google Cloud Functions
Google Cloud Platform的Cloud Functions(BETA)是一種輕量級的無服務器平臺,易於部署和維護。它的控制檯為開發人員提供了很好的解決方案,用於構建基於事件驅動的低耦合微服務應用。該平臺的容器是按照使用量收費的。此外,開發人員還可以通過Google Compute API將Cloud Functions連接到其他產品。
https://cloud.google.com/functions/
架構框架
20. goa
goa是一個使用Go語言開發、用於構建REST API和微服務的框架。在goa中,開發人員可以先設計好API,然後生成其他內容,從JSON文檔到命令行應用程序及JavaScript庫等。所有的goadesign服務都運行在Google Cloud Platform上。
https://stackshare.io/goa
21. Kong
Kong可以安裝在多種操作環境中,它利用大量的read-to-deploy插件來協助開發和部署微服務。有了Kong,你就可以更好地利用微服務和容器設計模式快速構建以API為中心的應用程序。
https://konghq.com/
無服務器工具
22. Claudia
通過使用Claudia,開發人員可以專注在業務上,而不是把精力浪費在處理與AWS部署有關的事情上。Claudia負責處理與AWS Lambda和API Gateway相關的部署。Claudia還可以自動化容易出錯的部署和配置任務。除此之外,它還提供了增強工具,如Claudia API Builder和Claudia Bot Builder。
https://claudiajs.com/
23. Apache Openwhisk
Apache Openwhisk是一種基於事件的編程服務,也是一個易於擴展的無服務器計算平臺,幫助開發人員創建、測試、連接和調試微服務。用戶可以在Mac、Windows或Linux上通過Docker來安裝和使用OpenWhisk。
https://openwhisk.apache.org/
24. Serverless
這個工具正如它的名字一樣,將FaaS/無服務器技術與其他雲服務相結合,幫助開發人員構建複雜的系統。Serverless還提供了可伸縮性、集成安全性和改進的可操作性。
https://serverless.com/
25. Kubeless
Kubeless是一個Kubernetes原生無服務器框架,用戶只需要部署少量代碼,無需操心底層的基礎設施。Kubeless能夠感知Kubernetes資源,提供自動伸縮、API路由、監控和故障排除等功能。Kubeless完全依賴於K8s原語,因此,Kubernetes用戶也可以結合使用原生K8s API服務器和API網關。
https://github.com/kubeless/kubeless
26. IronFunctions
IronFunctions是一個開源的無服務器(或FaaS)平臺,可以在任何地方運行。IronFunctions使用Go語言開發,但可以支持使用任意語言編寫的function。IronFunctions的主要優點是它支持AWS Lambda格式,可以直接從Lambda導入和運行function。
https://github.com/iron-io/functions
27. AWS Lambda
AWS Lambda為構建微服務提供了無基礎設施(infrastructure-less)服務器,用戶需要按使用量付費。Lambda還可以與AWS API Gateway結合使用,後者可用於託管REST或API服務。將這兩者結合在一起,可以讓你的API處理由用戶發出的任何請求。
https://aws.amazon.com/lambda/
28. OpenFaas
一個開源的無服務器軟件,承諾“讓無服務器function變簡單”。OpenFaaS可幫助你將任意進程或容器打包成Windows或Linux的無服務器function。與其他無服務器技術一樣,它的好處是可以讓開發人員專注在業務上,而不是將精力用在處理底層的應用程序結構上。
https://www.openfaas.com/
29. Microsoft Azure Functions
這是一個基於事件驅動的按需計算function,可增強Azure現有的應用程序功能。按需計算意味著用戶只需要為使用的資源付費。Azure Functions幫助開發人員連接到數據源/消息服務,讓他們能夠輕鬆地處理和響應事件。開發人員還可以利用Azure Functions構建基於HTTP的API端點。
https://azure.microsoft.com/en-us/services/functions/
30+. 團隊建設工具
開發團隊通常需要定期處理微服務的變更。團隊之間需要良好的溝通和合作才能實現真正的團隊自治。靈活性和責任感應該貫穿整個應用程序生命週期。有很多工具可用於團隊協作,例如視頻會議、聊天工具、項目管理應用程序和wiki,這些工具可以幫助微服務開發人員實現之前提到的微服務三要素。這類工具實在太多了,作為參考,Caylent團隊選擇了Slack、Trello、Google Cloud、Postman和Google Meet來滿足開發和溝通需求。
新的開源工具總是不斷出現,所以我們要時刻留意。本文所列出的資源只是微服務系統工具的冰山一角。記住,開源的本質就是快速演化,不斷推陳出新。
英文原文:https://caylent.com/building-microservices/
中文譯文原文:http://www.infoq.com/cn/articles/30-tools-for-building-microservices
閱讀更多 架構師筆記 的文章