微服务应用程序可以以多种方式运行,微服务每种方式都有不同的底该权衡和成本结构。适用于跨越几个服务的样部小型应用程序可能不足以用于大型系统。 从简单到复杂,微服务以下是底该运行微服务的五种方式: 在最基本的层面上,我们可以在一台机器上将微服务应用程序作为多个进程运行。每个服务侦听不同的端口并通过环回接口进行通信。 微服务部署的最基本形式使用单机。亿华云计算应用程序是一组加上负载平衡的进程。 这种简单的方法有一些明显的好处: DIY 方法最适合只有少量微服务的小型应用程序。除此之外,它还不够,因为: https://semaphoreci.com/blog/build-stage]构建[/url]和测试工件,然后使用持续部署进行部署。 这是学习微服务基础知识的最佳选择。您可以运行一个小型微服务应用程序来熟悉。单台服务器将带您走很远,直到您需要扩展,此时您可以升级到下一个选项。 该选项本质上是选项1的升级。当应用程序超出服务器的容量时,我们可以纵向扩展(升级服务器)或横向扩展(添加更多服务器)。在微服务的情况下,水平扩展到两台或多台机器更有意义,因为我们获得了更高的可用性作为奖励。而且,一旦我们有了分布式设置,我们总是可以通过升级服务器来扩大规模。 负载均衡器仍然是单点故障。为了避免这种情况,多个平衡器可以并行运行。 然而,水平缩放并非没有问题。超越一台机器会带来一些关键点,高防服务器这些关键点会使故障排除变得更加复杂,并且会出现使用微服务架构带来的典型问题。 这些都是分布式计算固有的问题,一旦涉及多台机器,您就会遇到(并且必须处理)问题。 如果您有几台备用机器并希望提高应用程序的可用性,则此选项非常有用。只要您保持简单,使用或多或少统一的服务(相同的语言,类似的框架),您就可以了。一旦您通过了某个复杂度阈值,您将需要容器来提供更大的灵活性。 虽然直接将微服务作为进程运行非常有效,但它是有代价的。 所有这些缺点都可以通过容器来缓解。容器是包含程序运行所需的一切的包。容器镜像是一个独立的单元,可以在任何服务器上运行,而无需先安装任何依赖项或工具(容器运行时本身除外)。 容器提供了足够的虚拟化来单独运行软件。有了它们,我们可以获得以下好处: 上图容器化工作负载需要 CI/CD 上的镜像构建阶段。 1、服务器上的容器 这种方法用容器代替了流程,因为它们给了我们更大的灵活性和控制力。与选项 2 一样,我们可以在任意数量的机器上分配负载。 将微服务进程包装在容器中使它们更加便携和灵活。 2、无服务器容器 到目前为止描述的所有选项都是基于服务器的。但是软件公司不从事管理服务器的业务——必须配置、修补和升级的服务器——他们从事解决代码问题的业务。因此,许多公司宁愿尽可能避免使用服务器也就不足为奇了。 AWS Fargate和Heroku等容器即服务产品使运行容器化应用程序成为可能,而无需处理服务器。我们只需要构建容器镜像并将其指向云提供商,它会处理剩下的事情:配置虚拟机,下载、启动和监控镜像。这些托管服务通常包括一个内置的负载均衡器,这是一件少担心的事情。 使用 Fargate 的弹性容器服务 (ECS) 让我们无需租用服务器即可运行容器。它们由云提供商维护。 以下是托管容器服务的一些好处: 但是,在开始之前,您必须意识到一些重大缺点: 编排器是专门在一组服务器上分配容器工作负载的平台。最著名的编排器是Kubernetes,这是一个由 Google 创建的开源项目,由Cloud Native Computing Foundation维护。 除了容器管理之外,Orchestrator 还提供广泛的网络功能,例如路由、安全性、负载平衡和集中式日志——运行微服务应用程序可能需要的一切。 Kubernetes 使用 pod 作为调度单元。Pod 是一组共享一个网络地址的一个或多个容器。 使用 Kubernetes,我们摆脱了自定义部署脚本。相反,我们使用清单来编码所需的状态,并让集群负责其余的工作。 持续部署管道将清单发送到集群,集群会采取必要的步骤来完成它。 Kubernetes 得到所有云提供商的支持,是事实上的微服务部署平台。因此,您可能认为这是运行微服务的绝对最佳方式。对于许多公司来说,这是事实,但也需要牢记以下几点: 无服务器函数偏离了我们迄今为止讨论的所有其他内容。我们使用云来简单地按需运行代码,而不是服务器、进程或容器。AWS Lambda和Google Cloud Functions等无服务器产品可处理可扩展和高可用性服务所需的所有基础设施细节,让我们可以专注于编码。 无服务器函数可自动扩展并按使用计费。 这是一个完全不同的范式,具有不同的优点和缺点。从好的方面来说,我们得到: 看不见的账单:由于成本是基于使用情况的,因此很难预测月底发票的大小。使用高峰可能会导致令人讨厌的意外。 无服务器为可扩展性提供了一种无需干预的解决方案。与 Kubernetes 相比,它没有给你太多的控制权,但它更容易使用,因为你不需要专门的 serverless 技能。对于快速发展的小公司来说,无服务器是一个很好的选择,只要他们能够忍受它的缺点和限制。 运行微服务应用程序的最佳方式是由许多因素决定的。使用容器(或进程)的单个服务器是试验或测试原型的绝佳起点。 如果应用程序成熟并且跨越许多服务,您将需要更健壮的东西,例如托管容器或无服务器,并且随着应用程序的增长,可能还会需要 Kubernetes。