使用微服务架构的多云策略

按照这份在 Azure、AWS 和 Google Cloud 中构建微服务的完整指南,构建高度可用、可扩展和高性能的应用程序。

2005 年,Peter Rodgers 博士在 Web 服务边缘会议的演讲中谈到了微 Web 服务,第一代微 Web 服务基于面向服务的架构(SOA)。SOA 是作为任务执行的“自包含”软件模块,这允许服务基于 SOAP(简单对象访问协议)进行通信。SOAP 的主要思想是“尽可能做最简单的事情”。

微服务和多云环境

在我们进入微服务架构、模式以及如何构建支持多云部署的基于微服务的应用程序之前,让我们定义术语。微服务是一种架构模式,它允许应用程序由松散耦合的模块组成。但是,微服务设计应遵循以下规则:

  • 每个模块或微服务都有自己的数据,因此应该有一个独立的数据库。
  • 每个微服务都应该由自己的团队开发。这并不意味着基于微服务的应用程序不能由一个团队开发,但是,每个微服务拥有一个团队显示了微服务的独立性。
  • 微服务应该有一个独立的部署过程。
  • 微服务应该更好地控制资源和计算能力,以便您可以根据服务需求独立扩展每个服务。
  • 微服务可以用不同的语言编写,但它们应该使用像REST这样的单一协议进行通信。
  • 多云(即混合云)意味着通过多个云提供商传播应用程序有两种不同的方法。例如,我们可以在 AWS 中构建核心应用程序,还有一些部分可以部署到 Azure 和 Google Cloud。另一个多云示例是为一个云设计的应用程序可以通过微小的更改迁移到另一个云。

    微服务与单体应用

    在我们进入示例之前,让我们看一下微服务和单体架构的优缺点的简要列表:

    表 1:微服务

    优点

    缺点

  • 可扩展性——由于我们拥有所有独立的服务,我们可以独立地扩展每个服务。
  • 隔离– 当一项服务出现故障时,大型项目可能不会受到影响。
  • 灵活性——您可以使用不同的语言和技术,因为所有服务都是独立的。我们可以将整个项目分成微服务,每个微服务将由一个单独的团队开发和支持。
  • DevOps 独立性——所有微服务都是独立的;因此,我们可以为每个微服务实现独立的部署过程。
  • 复杂性——微服务架构对于大型企业级公司和平台来说是一个不错的选择。以 Netflix 为例。在那里,您可以将域和子域分隔到不同的服务和团队。但是,对于小型公司而言,分离可能会增加多余的复杂性。此外,不可能将小项目分成微服务。
  • 测试——测试微服务应用程序可能是一项艰巨的任务,因为您可能需要运行其他服务。
  • 调试——调试微服务可能是一项痛苦的任务;它可能包括运行多个微服务。此外,我们需要不断调查日志。通过集成监控平台可以部分解决此问题。
  • 当我开始设计解决方案时,我总是以单体架构为起点。使用这种方法,我们可以实现以下目标:

  • 在设计和实现过程中,我们已经可以看到我们的应用程序是否可以移动到微服务中。
  • 我们可以通过逐步的方法识别可以迁移到微服务的单体应用程序。
  • 表 2:整体式

    优点

    缺点

  • 简单性——单体架构相对简单,可以用作基础架构或微服务的第一步。
  • 简单的 DevOps – DevOps 过程可以很简单,因为我们可能需要自动化一个简单的应用程序。
  • 供应商锁定——使用单体架构,我们可能会被一个供应商/云提供商锁定。单体架构中的所有模块都彼此紧密相连。很难将它们分布在不同的供应商之间。
  • 不灵活的 DevOps – 一个企业级的单一应用程序的 DevOps 流程可能需要很多时间,因为我们需要等到所有模块都构建和测试后。
  • 坚持使用一种编程语言/技术——单体架构不太灵活——你需要坚持使用一种技术/编程语言。否则,你必须重写整个应用程序来改变核心技术。
  • 在图 1 中,您可以看到一个典型的旅行系统模块化单体架构示例。它允许乘客找到司机、预订并加入旅行。

    图 1:旅行预订应用程序

    该系统由几个模块组成:

  • 用户界面/前端
  • API
  • SQL 适配器
  • 用于处理付款的条带适配器
  • SendGrid 管理电子邮件
  • Twillio 的适配器能够通过电话进行通信(电话、短信、视频)
  • 这种单体架构可以迁移到微服务架构。每个服务都可以独立运行,并且可以将状态保存在自己的数据库中。

    上面解释的解决方案非常简单,可以毫无问题地转化为微服务。然而,在企业层面,这种迁移要复杂得多,就像在 Netflix 等大公司中看到的那样。

    用于构建微服务架构的云组件和服务

    在本节中,我们将介绍一些可用于构建微服务架构的云服务,以便我们知道在微服务架构设计和实施过程中选择什么服务或云组件。

    Container Engine

    容器引擎对于构建微服务至关重要,因为它们允许在各种云提供商中分离、编排和管理微服务。Docker是一种广泛使用的容器引擎,它允许将每个微服务包装到一个容器中,并将其放入基于云的容器编排系统中,如 Kubernetes(AKS、EKS)或直接启动应用程序。Containerd与 Docker 相同,但具有轻量级且更安全的架构。

    Orchestrator

    Kubernetes是一种流行的开源系统,用于编排、自动化部署和扩展容器应用程序。它包含并自动化部署。Azure、AWS和Google Cloud拥有自己的托管编排服务,其中已经包括负载平衡、自动缩放、工作负载管理、监控和服务 格。

    Azure Service Fabric是一个用于编排微服务的分布式平台。几年来,主要目标是为基于 .NET Core/Framework 和 Windows 的微服务提供最佳支持;我们可以在选择服务流程图中看到它。微软声称 Service Fabric 也支持其他语言和平台,如 Linux。

    Message Bus

    队列是一种基于 FIFO(先进先出)原则的服务。所有消息总线系统都基于此服务。例如,Azure 具有包含简单业务逻辑的队列存储。如果你有一个简单的架构需要集中消息存储,你可以依赖队列。AWS 和 Google Cloud 也分别拥有Simple Queue Service和GC Pub/Sub。这些允许您在微服务和软件组件之间发送、存储和接收消息。

    服务总线/消息总线基于与队列相同的方法。但是,消息总线在顶部有更多功能——它包含死信队列、预定传递、消息延迟、事务、重复检测和许多其他功能。例如,Azure Service Bus和AWS Managed Kafka 服务是高度可用的消息代理,适用于可以处理数千条消息的企业级应用程序。

    Serverless

    无服务器允许我们纯粹使用事件驱动的方法来构建微服务架构。它是一个可按需提供的单一云服务单元,旨在专注于直接在云中构建微服务,而无需考虑您应该使用什么容器引擎、编排器或云服务。AWS 和 Azure 分别有Lambda和Azure Functions。Google Cloud Functions遵循相同的原则。

    Essential Microservices Design Patterns

    现在我们了解了微服务架构,可以开始使用微服务开发应用程序了。我们还了解使用微服务的好处以及如何重构应用程序以支持此架构。开始构建应用程序的最佳点是了解微服务设计模式。

    Domain Microservices

    微服务领域模型(领域驱动设计的一部分)不仅仅是一种模式——它是一组设计和范围微服务的原则。应使用以下规则设计微服务域:

  • 单个微服务应该是一个独立的业务功能。因此,应将整体服务范围限定为单一的业务概念。
  • 业务逻辑应封装在基于 REST 的 API 中。
  • Anti-Corruption Layer

    遗留系统可能有不可维护的代码和整体糟糕的设计,但我们仍然依赖来自该模块的数据,Anti-Corruption Layer在新的微服务架构和遗留架构之间提供了立面或桥梁。因此,它使我们能够远离操纵遗留代码并专注于功能开发。

    图 2:反腐败层

    Circuit Breaker

    circuit breaker提供了阻止级联故障并自动恢复到正常状态的机制。想象一下,我们有服务 A 和服务 B,它们依赖于来自服务 C 的数据。我们在服务 C 中引入了一个影响服务 A 和 B 的错误。在设计良好的微服务架构中,每个服务应该相互独立。

    但是,在从单体架构重构为微服务的过程中可能会出现依赖关系。在这种情况下,您需要实现一个断路器来预测级联故障。断路器充当状态机。他们监控最近的许多故障并决定下一步做什么。它们可以允许操作(关闭状态)或返回异常(打开半打开状态)。

    图 3:断路器状态

    Service Mesh

    服务 格实现了微服务架构的通信层。它确保服务请求的传递,提供负载平衡,加密数据(使用 TLS),并提供其他服务的发现。服务 格还:

  • 提供断路器逻辑
  • 提供管理流量控制、 络弹性、安全性和身份验证的流程
  • 有一个使用 sidecar 模式与微服务集成的代理
  • 它不仅允许您管理服务,还可以收集遥测数据并将其发送到控制平面。我们实现了一个服务 格,例如Istio,它是 Kubernetes 中用于管理微服务的最流行的服务 格框架。

    图 4:服务 格算法

    sidecar

    Sidecar 是与主要服务一起部署的实用程序应用程序。Sidecar 有助于:

  • 收集日志
  • 管理配置
  • 控制与服务的连接
  • 图 5:边车

    Microservices in Action

    为了展示微服务的强大功能,我们将把我们的整体旅行应用程序(参见图 1)迁移到微服务架构中。

    我们将使用无服务器方法和 Azure 云。

  • API 关– 使用 API 管理公开后端服务的端点,以便客户端应用程序可以安全地使用它们。
  • 异步队列– 用于处理服务相互通信并在不同服务之间传递信息和数据的消息服务,由 Azure 事件 格表示。
  • 后端服务——直接与数据层和解决方案的其他组件一起操作的服务,与其他组件隔离,并且在需要时可轻松替换。
  • 图 6:旅行预订微服务

    结论

    构建高度可用、可扩展和高性能的应用程序可能具有挑战性。微服务架构为我们提供了不仅可以构建独立服务的选项,还可以创建多个团队来支持每个服务并引入 DevOps 方法。微服务和所有流行的云提供商允许我们构建多云微服务架构。这可以节省资金,因为某些服务具有不同的定价策略。但请务必选择最适合特定微服务领域的服务。例如,我们可以将AKS 与集成服务 格或基于AWS Lambdas的无服务器方法一起使用。多云允许我们应用云原生 DevOps 来独立交付服务。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年7月16日
    下一篇 2022年7月16日

    相关推荐