關於微服務的好文章不計其數。對於那些一直沒有親歷微服務或初次聽到這個概念的人來說,這篇文章相當於把一份頂級的開源工具清單送到他們的面前。微服務是一種用於開發高度可伸縮軟體系統的架構風格。這種架構可用於開發企業、政府、學校和慈善機構的企業級應用。它與傳統的單體架構完全相反,單體架構只專注於單個應用程式。
微服務小而獨立,但在開發和維護方面,它們的架構可能很複雜。微服務之間通過同步協議(如 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/