微服务架构,或说是微服务本身,是一种用于提升软件系统可扩展性的架构风格。与微服务相关的好文章不胜枚举,而本文希望能够为那些从未尝试过、或只是刚刚开始尝试微服务的人,提供一份顶级开源工具的清单。
微服务架构可用于企业、政府、学校和慈善机构等的企业级应用程序。与传统风格的单体架构完全相反,微服务专注于单个单元应用程序。
微服务微小、独立且独特。微服务架构的构建和维护都可能非常复杂。微服务之间可以相互通信,利用同步协议、HTTP / REST 或异步协议来服务于整体的业务目标。HTTP / REST 或 AMQP 就是协作服务的示例,这些协作服务通过实现彼此相关的功能来尽可能高效地协同工作。
微服务这一概念听起来清晰明了,但在实际操作中,想用所需的各种工具来构建微服务应用程序并非易事。这不仅仅是开发、测试或部署软件的传统问题。我们还需要进行持续监控,确保出现故障时,问题能够快速解决。
时刻谨记, 并不存在哪个完美工具能够给微服务提供一站式的解决方案。 Mike Amundsen 的《微服务架构三大支柱》一文中曾经提出过,微服务成功的关键因素中,在组织设计的层面有三大关键组成部分:沟通、团队和创新。而在所有支柱中,沟通无疑是最不可或缺的。
市场中有许多工具可用于支持构建微服务架构,其中大多数工具中的某些特定功能都是免费的,但是许多工具也可以为额外的功能和服务提供额外的付费升级。
API 管理与测试
01 API Fortress
API Fortress 是一个 API 测试及健康工具,它可以自动执行企业 API 的功能测试、运行状况监控和负载测试。它的设计实际上是无代码的,完全基于现代 API 架构实践和模式构建。
02 Postman
Postman 是适合个体开发人员和团队的 API 开发套件,它可让您轻松运行 UI 驱动的 API 测试。Postman 是一个功能强大的 HTTP 客户端,通过它,RESTful API 探索变得轻而易举。用户可以快速将简单和复杂的 HTTP 请求组合在一起,以便立即测试、开发和记录 API。
03 Tyk
Tyk 是一款开箱即用的开源 API 管理平台, 具有快速、可扩展和现代的特点。
无论您是本地部署,还是使用云服务,或者喜欢混合场景,Tyk 都能满足您的需求。使用 Tyk,您可以在最低的成本之上获得极其可观的高可用性和低延迟。
消息服务
04 RabbitMq
RabbitMQ 可帮助您使用不同的模式在您的微服务之间进行通信,扩展应用程序,并解决大多数分布式系统的问题。你可以在各种微服务环境或任何其他分布式系统中使用 RabbitMQ 连接竞争微服务。您还可以使用该工具在服务之间交换事件。
05 Amazon 简单队列服务(SQS)
Amazon SQS(Simple Queue Service,简单队列服务)提供了强大、灵活和可靠的微服务通信功能。如果选择发布-订阅微服务的通信模型,像 Amazon SQS 这样的消息队列服务可以解决好几个开发人员的问题。除了更好的安全性之外,队列还可以存储待处理消息的可靠位置,从而来增强消息传递。
链接:https://aws.amazon.com/cn/sqs/
06 Apache Kafka
消息队列在微服务架构中至关重要,因为需要它处理微服务彼此之间、以及微服务与外部源之间的通信。不论是用于密集数据处理还是 API 调用,Apache Kafka 都是一个 具有高容错性和弹性的分布式流处理平台 。
07 Google Cloud Pub/Sub
Google Cloud Pub / Sub 是一款完全托管的实时消息服务,可让您在微服务之间发送和接收消息。将您的应用程序与 Google Cloud Pub / Sub 集成,将有助于处理您必须接收的所有异步请求,并 很大程度地减少用户等待响应的时间 。
链接:https://cloud.google.com/pubsub/
监 控
08 Logstash
部署完微服务之后,您必须对其进行监控。此时你需要考虑很多问题,例如:特定的微服务是否响应良好或需要调整?其他系统部件(比如数据库)是否正常工作?您需要检查日志并执行此操作,此时 Logstash 将会是一个很好的工具。 它是一个开源平台 ,您可以在其中集中、存储和转换数据。
链接:https://www.elastic.co/cn/products/logstash
09 Graylog
不妨试试将 Logstash 与 Graylog 结合,作为集中式服务器来使用。它 易于使用、交互性良好、且速度很快 。用户可以使用系统轻松浏览数据。它具有可扩展性,可根据开发的需求随用户的业务增长而设计。Graylog 不是免费的,但价格实惠。
Kube 开发
10 Kubernetes
虽然 Kubernetes 肯定属于容器编排领域,但它在微服务领域也应该有一席之地。 Kubernetes 已成为最佳部署实践的黄金标准。在 容器调度、负载均衡、服务发现 等方面上,Kubernetes 特别强大。对于使用 Kubernetes 构建微服务的开发人员来说,同样有不少开源工具可供使用。
11 Telepresence
Telepresence 是 Kubernetes 的一种快速的本地开发工具。通过 Telepresence,用户可以使用混合模型,服务编码可以在用户的笔记本电脑上本地完成,同时通过双向代理连接 Kubernetes 中的服务。我不推荐将 Telepresence 用于生产环境,但它真的非常适合在开发环境中使用。
链接:https://www.telepresence.io
12 Istio
Istio 支持 Kubernetes 上的服务部署。通过 Istio 的 service mesh 技术,可以为微服务通信增加可靠性、安全性和可管理性。service mesh 技术让您可以改善应用程序和微服务之间的关系和交互。
13 Minikube
Minikube 是一个方便的开源工具,可让您无需 Wi-Fi 而在笔记本电脑上运行 Kubernetes。例如,当您想在飞机上写代码,而此时没有随机 Wi-Fi,那 Minikube 的作用就显现出来了。
链接:
https://github.com/kubernetes/minikube
编排
14 Conductor
Conductor 是 Netflix 的微服务编排引擎,是 Netflix OSS 生态系统的一部分。Conductor 可以在云上运行,并使用流协调器来通过微服务执行任务。它还有助于控制微服务之间的交互并将其可视化。
链接:https://netflix.github.io/conductor/
编程语言
15 Elixir
您可以尝试使用 Elixir 扩展您的编程技能。Elixir 是一种并发的、功能性的、通用的编程语言,与 Erlang VM(也称为 BEAM)上的字节码一起工作。
16 Spring Boot
使用 Spring Boot 框架可以大大简化基于 REST 的微服务的创建,只需几行代码即可完成。您可以使用其中一个可用的 Spring Boot 示例或 Spring Initializr 快速轻松地启动项目。
工具包
17 fabric8
fabric8 是一种“ 开源平台即服务 ”工具,它能够帮助开发人员通过 git 提供配置管理系统,处理 IP 地址复杂性和端口映射,并能够对服务执行负载均衡。fabric8 还提供了可扩展性和高可用性。
18 Seneca
Seneca,是一种 Node.js 的微服务工具包,通过它,您可以轻松构建基于消息的微服务流程,可以编写干净、有组织的代码,并轻松地系统化应用程序的业务逻辑。
19 Google Cloud Functions
Google Cloud Platform 的 Cloud Functions(BETA)非常 轻量、无服务器、易于部署和维护 。它的控制台可以帮助开发人员来通过事件驱动架构,来构建低耦合的微服务应用程序。它是按使用量收费的,用户可以使用 Google Compute 的 API 将 Cloud Functions 链接到其他产品。
链接:https://cloud.google.com/functions/
架构框架
20 goa
goa 提供了一个框架,使用设计优先的方法,在 Golang 编程语言中构建 REST API 和微服务。使用 goa,开发人员可以设计 API,然后生成其他所有内容:JSON 文档、命令行应用程序、JavaScript 库等等。所有 goadesign 服务都在 Google Cloud Platform 之上运行。
21 Kong
Kong 可以在多个操作环境中安装,它利用大量的读取-部署插件来帮助开发和部署微服务。使用 Kong,您可以利用微服务和容器设计模式快速构建以 API 为中心的应用程序。
无服务器工具
无服务器技术或“功能即服务(Function-as-a-service)”是微服务的重要组成部分。它优化了将事物分解为最小功能的方法。
22 Claudia
使用 Claudia 的 Lambda 微服务后,用户可以专注于业务而不是处理 AWS 部署。 Claudia 负责 AWS Lambda 和 API Gateway 的部署。Claudia 还可以自动执行容易出错的部署和配置任务,一切开箱即用。除此之外,它还包含增强工具,如 Claudia API Builder 和 Claudia Bot Builder。
23 Apache Openwhisk
除了作为基于事件的编程服务之外,Apache Openwhisk 还是一个易于扩展的无服务器计算平台,支持开发人员创建、测试和连接其他人的操作以及帮助调试。通过 Mac、Windows 或 Linux 上的 Docker,您都可以安装使用 OpenWhisk。
链接:https://openwhisk.apache.org
24 Serverless
这个工具正如它所说的那样:它是一个控制台,将 FaaS /无服务器技术与其他云服务相结合,帮助开发人员构建复杂的系统。serverless 还提供可扩展性、集成安全性和增强的可操作性。
25 Kubeless
Kubeless 是一个 Kubernetes 原生的无服务器框架,它让用户可以 只部署少量代码,而无需担心底层基础架构管道 。Kubeless 可以感知 Kubernetes 的开箱即用资源,还提供自动扩展、API 路由、监控和故障排除等功能。Kubeless 完全依赖于 K8s 原语,因此 Kubernetes 用户也可以使用原生 K8s API 服务器和 API 网关。
链接:https://github.com/kubeless/kubeless
26 IronFunctions
IronFunctions 是一个开源的无服务器平台或 FaaS 平台,您可以在任何地方运行。IronFunctions 是在 Golang 上编写的,并且真正支持任何语言的函数。 IronFunctions 的主要优点是它 支持 AWS Lambda 格式 。您可以直接从 Lambda 导入函数并在任何地方运行它们。
链接:https://github.com/iron-io/functions
27 AWS Lambda
AWS Lambda 为您的微服务构建提供基础设施较少的服务器,并且是按使用费收费的。Lambda 还可以与 AWS API Gateway 结合使用,后者可以托管 REST 或 API 服务。这两者一起,可以让您的 API 满足用户提出的任何需求。
链接:https://aws.amazon.com/cn/lambda/
28 Openfaas
OpenFaaS 是一个开源的无服务器软件程序,承诺“让无服务器 function 更简单”。OpenFaaS 可帮助您将任何进程或容器打包为 Windows 或 Linux 的无服务器 function。与任何无服务器技术一样,其好处是可以让开发人员专注于提供业务价值,而无需费心于底层应用程序结构的日常管理相关的工作。
29 Microsoft Azure Functions
Microsoft Azure Functions 是一种事件驱动的按需计算 function,它可以增强 Azure 现有的应用程序功能。您只需基于规模和需求为您所使用的资源付费。 Azure Functions 帮助开发人员连接到数据源/消息服务解决方案,从而可以轻松处理和响应事件。开发人员还可以利用 Azure Functions 功能构建基于 HTTP 的 API 端点。
链接:https://azure.microsoft.com/en-us/services/functions/
团队建设工具
开发团队经常需要对微服务进行定期处理。要实现真正的团队自治,团队成员之间良好的沟通和合作必不可少。应用程序生命周期的所有部分、所有环节都需要灵活性和责任感。在团队协作方面有许多工具可用,例如视频会议、聊天工具、项目管理应用程序和维基,这些工具有利于微服务开发人员遵守前文提到的微服务三大支柱。这类工具种类繁多且不少已经非常成熟,大家可以自行尝试与选择。
结语
软件世界中不断有新的开源工具涌现,我们应当时刻保持关注。本文的这一微服务系统工具清单是一个不错的起点,但在未来势必会有更多更好的工具出现,毕竟这正是开源的本质意义所在。
评论 1 条评论