作者 | Stefan Thorpe
译者 | 无明
关于微服务的好文章不计其数。对于那些一直没有亲历微服务或初次听到这个概念的人来说,这篇文章相当于把一份顶级的开源工具清单送到他们的面前。微服务是一种用于开发高度可伸缩软件系统的架构风格。这种架构可用于开发企业、政府、学校和慈善机构的企业级应用。它与传统的单体架构完全相反,单体架构只专注于单个应用程序。
微服务小而独立,但在开发和维护方面,它们的架构可能很复杂。微服务之间通过同步协议(如 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/