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