微服务架构,或者微服务本身,是一种用于提高软件系统可扩展性的架构风格。与微服务相关的好文章数不胜数,本文希望为那些从未尝试过微服务,或刚开始尝试微服务的人提供一份最佳开源工具列表。微服务架构可用于企业、政府、学校和慈善机构等的企业级应用程序。与传统风格的单体架构完全不同,微服务专注于单个应用程序单元。微服务是小型、独立且独特的。构建和维护微服务架构都可能很复杂。微服务可以使用同步协议、HTTP/REST或异步协议相互通信,以服务于总体业务目标。HTTP/REST或AMQP是协作服务的示例,它们通过实现彼此相关的功能尽可能高效地协同工作。微服务的概念听起来很清晰,但在实践中,使用所需的所有工具构建微服务应用程序并非易事。这不仅仅是开发、测试或部署软件的传统问题。我们还需要持续监控,以确保出现问题时能够快速解决。永远记住,没有一站式工具可以为微服务提供一站式解决方案。MikeAmundsen的《微服务架构三大支柱》文章曾提出,在微服务成功的关键因素中,在组织设计层面有三个关键组成部分:沟通、团队和创新。在所有支柱中,沟通无疑是最不可或缺的。市场上有许多支持构建微服务架构的工具,其中大多数工具中的一些特定功能是免费的,但许多工具还提供额外的付费升级以获得额外的功能和服务。API管理与测试01.APIFortressAPIFortress是一款API测试和健康工具,可以对企业API进行自动化的功能测试、健康监控和负载测试。它被设计为几乎无代码,完全基于现代API架构实践和模式构建。链接:https://apifortress.com02.PostmanPostman是一个面向个人开发者和团队的API开发套件,可让您轻松运行UI驱动的API测试。Postman是一个功能强大的HTTP客户端,它使RESTfulAPI探索变得轻而易举。用户可以快速组合简单和复杂的HTTP请求,以立即测试、开发和记录API。链接:https://www.getpostman.com03。TykTyk是一个开箱即用的开源API管理平台,它快速、可扩展且现代。无论您是本地部署、使用云服务,还是更喜欢混合场景,Tyk都能满足您的需求。使用Tyk,您可以以最低的成本获得极高的可用性和低延迟。链接:https://tyk.io消息服务04.RabbitMqRabbitMQ可以帮助您使用不同的模式在微服务之间进行通信、扩展应用程序并解决大多数分布式系统问题。您可以使用RabbitMQ连接各种微服务环境或任何其他分布式系统中的竞争微服务。您还可以使用该工具在服务之间交换事件。链接:https://www.rabbitmq.com05.AmazonSimpleQueueService(SQS)AmazonSQS(SimpleQueueService,简单队列服务)提供强大、灵活、可靠的微服务通信功能。如果您选择发布-订阅微服务通信模型,像AmazonSQS这样的消息队列服务可以解决多个开发人员问题。除了更好的安全性之外,队列还可以通过存储待处理消息的可靠位置来增强消息传递。链接:https://aws.amazon.com/cn/sqs/06。ApacheKafka消息队列在微服务架构中至关重要,因为它需要处理微服务之间以及微服务与外部源之间的通信。无论是用于密集型数据处理还是API调用,ApacheKafka都是一个具有高容错性和弹性的分布式流处理平台。链接:https://kafka.apache.org07.GoogleCloudPub/SubGoogleCloudPub/Sub是一种完全托管的实时消息传递服务,可让您在微服务之间发送和接收消息。将您的应用程序与GoogleCloudPub/Sub集成将有助于处理您必须接收的所有异步请求,并最大限度地减少用户等待响应所花费的时间。链接:https://cloud.google.com/pubsub/监控08.Logstash部署好微服务后,需要对其进行监控。此时你需要思考很多问题,例如:特定的微服务响应良好还是需要调优?其他系统部分(如数据库)是否正常工作?您需要检查日志并执行此操作,此时Logstash将是一个很好的选择。的工具。它是一个开源平台,您可以在其中集中、存储和转换数据。链接:https://www.elastic.co/cn/products/logstash09.Graylog不妨试试把Logstash和Graylog结合起来做一个中心化服务器。它易于使用、交互且快速。用户可以使用该系统轻松浏览数据。它具有可扩展性,可以根据发展需要设计成与用户的业务一起成长。Graylog不是免费的,但价格实惠。链接:https://www.graylog.orgKube开发10.KubernetesKubernetes固然属于容器编排领域,但在微服务领域也应该有一席之地。Kubernetes已成为最佳部署实践的黄金标准。Kubernetes在容器调度、负载均衡和服务发现方面尤为强大。对于使用Kubernetes构建微服务的开发人员,还有许多可用的开源工具。链接:https://kubernetes.io11.TelepresenceTelepresence是一个快速的Kubernetes本地开发工具。借助Telepresence,用户可以使用混合模型,其中可以在用户的??笔记本电脑上本地完成服务编码,同时通过双向代理连接到Kubernetes中的服务。我不建议将Telepresence用于生产,但它对于开发来说确实很棒。链接:https://www.telepresence.io12.IstioIstio支持在Kubernetes上部署服务。通过Istio的服务网格技术,可以为微服务通信增加可靠性、安全性和可管理性。服务网格技术允许您改善应用程序和微服务之间的关系和交互。链接:https://istio.io13.MinikubeMinikube是一个方便的开源工具,可让您在没有Wi-Fi的笔记本电脑上运行Kubernetes。例如,当您想在飞机上编写代码并且没有随机Wi-Fi时,Minikube就派上用场了。链接:https://github.com/kubernetes/minikubeOrchestration14.ConductorConductor是Netflix的微服务编排引擎,是NetflixOSS生态的一部分。Conductor可以运行在云端,使用流编排器通过微服务执行任务。它还有助于控制和可视化微服务之间的交互。链接:https://netflix.github.io/conductor/编程语言15.Elixir您可以尝试使用Elixir扩展您的编程技能。Elixir是一种并发的、函数式的、通用的编程语言,可在ErlangVM(也称为BEAM)上处理字节码。链接:https://elixir-lang.org16。SpringBoot使用SpringBoot框架可以大大简化基于REST的微服务的创建,只需几行代码。您可以使用可用的SpringBoot示例之一或SpringInitializr快速轻松地启动您的项目。链接:http://spring.iotoolkit17.fabric8fabric8是一个“开源平台即服务”工具,帮助开发者通过git提供配置管理系统,处理IP地址复杂性和端口映射,并使服务能够进行负载均衡。fabric8还提供可扩展性和高可用性。链接:http://fabric8.io18.SenecaSeneca是一个Node.js微服务工具包,通过它可以轻松构建基于消息的微服务流程,编写干净、有条理的代码,并轻松系统化应用程序的业务逻辑。链接:http://senecajs.org19.GoogleCloudFunctionsGoogleCloudPlatform的CloudFunctions(BETA)非常轻量级,无服务器,易于部署和维护。它的控制台帮助开发人员通过事件驱动的架构构建松散耦合的微服务应用程序。它按使用量计费,用户可以使用GoogleCompute的API将CloudFunctions链接到其他产品。链接:https://cloud.google.com/functions/ArchitectureFramework20.goagoa提供了一个框架,用于使用设计优先的方法在Golang编程语言中构建RESTAPI和微服务。使用goa,开发人员可以设计API,然后生成其他所有内容:JSON文档、命令行应用程序、JavaScript库等。所有goadesign服务都运行在谷歌云平台之上。链接:https://stackshare.io/goa21。KongKong可以安装在多种运行环境中,并利用大量的读取部署插件来帮助开发和部署微服务。借助Kong,您可以利用微服务和容器设计模式来快速构建以API为中心的应用程序。链接:https://konghq.com无服务器工具无服务器技术或“功能即服务”是微服务的重要组成部分。它优化了将事物分解为最小功能的方式。22.Claudia使用Claudia的Lambda微服务后,用户可以专注于业务而不是处理AWS部署。Claudia负责AWSLambda和APIGateway的部署。Claudia还可以开箱即用地自动执行容易出错的部署和配置任务。除此之外,它还包含增强的工具,如ClaudiaAPIBuilder和ClaudiaBotBuilder。链接:https://claudiajs.com23.ApacheOpenwhiskApacheOpenwhisk除了是一个基于事件的编程服务,ApacheOpenwhisk还是一个易于扩展的无服务器计算平台,使开发人员能够创建、测试和连接到其他人的操作并帮助调试.您可以在Mac、Windows或Linux上通过Docker安装和使用OpenWhisk。链接:https://openwhisk.apache.org24.Serverless这个工具正如其名:它是一个将FaaS/serverless技术与其他云服务相结合的控制台,帮助开发者构建复杂的系统。Serverless还提供可扩展性、集成安全性和增强的可操作性。链接:https://serverless.com25.KubelessKubeless是一个Kubernetes原生的无服务器框架,允许用户只部署少量代码而无需担心底层基础设施管道。Kubeless了解Kubernetes开箱即用的资源,还提供自动伸缩、API路由、监控和故障排除等功能。Kubeless完全依赖于K8s原语,因此Kubernetes用户也可以使用原生的K8sAPI服务器和API网关。链接:https://github.com/kubeless/kubeless26.IronFunctionsIronFunctions是一个可以在任何地方运行的开源无服务器或FaaS平台。IronFunctions是用Golang编写的,真正支持任何语言的函数。IronFunctions的主要优点是它支持AWSLambda格式。您可以直接从Lambda导入函数并在任何地方运行它们。链接:https://github.com/iron-io/functions27.AWSLambdaAWSLambda为您的微服务构建提供基础设施较少的服务器,按使用量收费。Lambda还可以与AWSAPIGateway结合使用,它可以托管REST或API服务。这两者共同使您的API能够满足用户可能提出的任何需求。链接:https://aws.amazon.com/cn/lambda/28.OpenfaasOpenFaaS是一个开源的无服务器软件程序,承诺“让无服务器功能更简单”。OpenFaaS可帮助您将任何进程或容器打包为适用于Windows或Linux的无服务器功能。与任何无服务器技术一样,好处是它允许开发人员专注于交付业务价值,而不必担心底层应用程序结构的日常管理。链接:https://www.openfaas.com29.MicrosoftAzureFunctionsMicrosoftAzureFunctions是一种事件驱动的按需计算功能,增强现有的Azure应用程序功能。您只需根据规模和需求为您使用的资源付费。AzureFunctions帮助开发人员连接到数据源/消息服务解决方案,以便他们可以轻松地处理和响应事件。开发人员还可以利用AzureFunctions构建基于HTTP的API端点。链接:https://azure.microsoft.com/en-us/services/functions/TeamBuildingTools开发团队经常需要在微服务上做常规工作。要实现真正的团队自治,团队成员之间良好的沟通与合作必不可少。应用程序生命周期的所有部分、所有阶段都需要灵活性和问责制。有许多可用于团队协作的工具,例如视频会议、聊天工具、项目管理应用程序和wiki,这些工具有助于微服务开发人员遵守前面提到的微服务的三大支柱。这类工具的种类很多,很多都非常成熟,大家可以自行尝试选择。结论软件世界中出现了新的开源工具,我们应该密切关注它们。本文列出的微服务系统工具是一个很好的起点,但未来势必会出现更多更好的工具,毕竟这才是开源的本质。
