跳至主要内容

微服务

构建高度可用的微服务,为各种规模的应用程序提供支持。

单体架构与微服务架构的对比

在单体应用程序中,所有进程紧密耦合,并作为单项服务运行。这意味着,如果应用程序的一个进程遇到需求峰值,则必须扩展整个架构。随着代码库的增长,添加或改进单体应用程序的功能会变得更加复杂。这种复杂性限制了试验的可行性,并使实施新概念变得困难。单体架构增加了应用程序可用性的风险,因为许多依赖且紧密耦合的进程会扩大单个进程故障的影响。

使用微服务架构,将应用程序构建为独立的组件,并将每个应用程序进程作为一项服务运行。多项服务使用轻量级 API 通过明确定义的接口进行通信。这些服务是围绕业务功能构建的,每项服务执行一项功能。新功能易于开发和部署。由于它们是独立运行的,因此可以针对各项服务独立进行更新、部署和扩展,以满足对应用程序特定功能的需求。

微服务架构是一种软件设计模式,体现了流程的成熟度并有助于减少技术负债。这种面向服务的架构为开发人员和组织带来了诸多优势。

Diagram comparing a monolithic node.js API service with users, threads, and posts grouped together, to a microservices architecture with separate services for users, threads, and posts.

微服务架构的特性

自主性

可以对微服务架构中的每项独立服务进行开发、部署、运营和扩展,而不影响其他服务的功能。独立的服务不需要与其他服务共享任何代码或实施。在基于微服务的应用程序中,各个组件之间的任何通信都是通过明确定义的 API 进行的。

专业性

微服务架构中的每项服务都是针对一组功能而设计的,并专注于解决特定的问题。如果开发人员逐渐将更多代码增加到一项服务中并且这项服务变得复杂,那么可以将其拆分成多项服务。

协调服务

每项微服务与一项或多项其他服务协调配合,共同构成一个完整的应用程序。服务间通信必须定义明确且可靠,以实现可扩展的分布式架构风格。多项服务必须能够同时与单项服务通信,且不出现故障或数据可靠性问题。

API 网关

面向服务的架构需要 API 网关来处理路由、身份验证、流量管理以及应用程序可观测性指标。该中心是微服务架构中各服务数据进出的主要节点。

服务注册表

每个应用程序都有一个服务注册表,其中列出了微服务架构中的所有服务。在注册表中,每项服务都关联有相应的元数据,例如其状态、IP 地址、协议及其他关键信息。注册表中的服务发现会查询和更新每个正在运行的服务实例的状态和详细信息。

微服务的优势

敏捷性

微服务促进若干小型独立团队形成一个组织,这些团队负责自己的服务。各团队在规模较小且易于理解的环境中开展工作,能够更加独立、更加高效地推进任务。这缩短了开发周期时间。您可以从组织的总吞吐量中显著获益。

灵活扩展

微服务架构允许独立扩展每项服务,以满足其所支持的应用程序功能的需求。这使团队能够适当调整基础设施需求,准确衡量功能成本,并在服务需求激增时保持可用性。

轻松部署

微服务架构支持持续集成和持续交付,可以轻松尝试新想法,并在无法正常运行时进行回滚。由于故障成本较低,因此可以大胆试验,更轻松地更新代码,并缩短新功能的上市时间。它还降低了操作复杂性。

技术自由

微服务架构不遵循“一刀切”的方法。团队可以自由选择最佳工具或不同的编程语言来解决其特定问题。因此,构建微服务架构的团队可以为每项工作选择最佳工具和详细的实现方式。

可重复使用的代码

将软件划分为小型且明确定义的模块,让团队可以将功能用于多种目的。专为某项功能编写的服务可以用作另一项功能的构建块。这样应用程序就可以自行引导,因为开发人员可以创建新功能,而无需从头开始编写代码。

弹性

服务独立性提高了整个应用程序应对故障的弹性。在单体架构中,如果一个组件出现故障,可能导致整个应用程序无法运行。而使用微服务架构时,应用程序可以通过降级功能而非导致整个应用程序崩溃的方式来处理完全的服务故障。

开发人员专业化

微服务架构中的松耦合服务具有各自的内部业务规则和明确的服务边界。这使小型团队或个人开发人员能够同时专注于单项服务的开发。开发人员可以在深度业务逻辑、机器学习应用程序或用户界面开发等服务领域深入专研。

容器和微服务

微服务架构非常适合容器技术。云容器是软件代码包,其中包含应用程序的代码、库以及在云中运行所需的其他依赖项。

基于微服务的应用程序可以由数十、数百甚至数千个容器组成。每个容器运行自己的微服务或捆绑多项相关服务。容器独立部署,容器及整个应用程序均由容器编排产品管理。

容器化是云端流行的部署策略,因为容器可以跨多个实例和区域进行部署。容器化技术支持 DevOps 基础架构,例如持续集成和持续部署。

容器堆栈

容器堆栈包括容器编排解决方案、容器注册表、用于容器部署的云实例以及容器网络解决方案。

容器化技术堆栈使软件开发人员能够构建可移植、可复用、可扩展且具有成本效益的应用程序。独立部署服务并对每项服务进行测试的能力有助于提升代码安全性。

微服务架构设计模式

按服务划分数据库

在按服务划分数据库设计模式中,每个微服务都有自己的数据库,并负责控制自身的数据存储与管理。这种微服务架构设计模式允许开发人员自主决定首选数据库类型及数据管理方式。开发人员必须努力维护此设计模式中的数据一致性,因为不同的服务对相同数据的处理方式各不相同。

异步消息收发

异步消息收发设计模式是一种事件和命令驱动的架构,其中消息代理位于各服务之间。消息代理负责处理事务管理。这种模式实现了服务之间的松耦合,消费者服务无需处于在线状态也能在稍后接收消息。这些可独立部署、松耦合的服务构建了一个具有容错能力的系统。

消息桥

当各个服务各自采用不同类型的通信机制时,需要使用消息桥设计模式。消息桥允许不同协议相互通信,将消息转换为数据摄取所需的格式。

责任链

责任链设计模式是一种微服务架构,其中独立服务之间的交接按照顺序且可重复的方式依次进行。这种设计模式易于实现,可确保微服务通信方式和数据流转方式的一致性。

边车

在边车微服务架构设计模式中,一个服务具有一个或多个关联的微服务。例如,某服务可能具有边车服务依赖项,例如日志记录或监控。这种模式对微服务进行进一步解构,将相关服务与底层业务逻辑解耦。

网关聚合

网关聚合设计模式将跨多个服务的微服务输出组合在一起,返回合并后的结果,从而提升性能。中间网关为每项相应的服务执行此聚合。

网关卸载

在网关卸载模式中,整个应用程序中频繁使用的小型服务将被直接嵌入网关中。此类服务的示例包括加密和授权用户服务。这种设计模式可带来性能方面的优势。

绞杀无花果 (Strangler Fig)

绞杀无花果微服务架构设计模式是一种对单体应用程序进行重构的方法,每次只迁移一个功能。采用这种策略,开发人员每次创建一项服务,逐步缩减单体架构的规模,直到整个系统由多个微服务组成。

最完整的微服务架构平台

容器

Amazon Elastic Container Service 是一项高度可扩展的高性能容器管理服务,支持 Docker 容器,让您能够在托管的 Amazon EC2 实例集群上轻松运行应用程序。了解更多

AWS Lambda AWS Lambda 让您无需预置或管理服务器即可运行代码。只需上传您的代码,Lambda 会管理运行和扩展高可用性代码所需的一切工作。了解更多

Coursera 现在,使用 Amazon ECS,Coursera 在资源隔离的环境中只需要几分钟而不是几个小时即可完成软件更改的部署。了解更多

Localytics Localytics 利用 AWS Lambda 构建微服务,允许其开发团队在没有中央支持的情况下构建自定义分析。了解更多

存储与数据库

Amazon ElastiCache Amazon ElastiCache 允许您从快速的托管内存缓存中检索信息,而无需完全依赖速度较慢的基于磁盘的数据库,从而提高服务性能。了解更多

Amazon S3 Amazon S3 为开发人员和 IT 团队提供适用于所有数据(无论大小)的高度可靠、安全且可扩展的对象存储。了解更多

Amazon DynamoDB 一项快速灵活且完全托管的 NoSQL 数据库服务,适合所有需要一致性且延迟低于 10 毫秒的任意规模的应用程序。了解更多

Amazon RDS 在云中轻松设置、操作和扩展关系数据库。有六种常见的数据库引擎可供选择,其中包括 Oracle、Microsoft SQL Server、PostgreSQL、MySQL 和 MariaDB。了解更多

Amazon Aurora 一个关系型数据库引擎,结合了高端商用数据库的速度和可用性,同时还具有开源数据库的简单性和成本效益。提供的吞吐量最高可为同一硬件上运行的标准 MySQL 的 5 倍。了解更多

Remind Remind 通过在 Amazon ECS 上为微服务构建 PaaS,将应用程序响应时间缩短了 200%。了解更多

联网

AWS Cloud Map AWS Cloud Map 是一种针对所有云资源的服务发现功能。利用 Cloud Map,您可以为应用程序资源定义自定义名称,它可以维护这些不断变化的资源的更新位置。了解更多

AWS App Mesh AWS App Mesh 使您可以轻松监控和控制运行于 AWS 上的微服务。App Mesh 标准化了微服务的通信方式,为您提供端到端的可见性,并有助于确保应用程序的高可用性。了解更多

应用程序负载均衡器 应用程序负载均衡器对应用程序层(第 7 级)的 HTTP 和 HTTPS 流量进行负载均衡,面向交付包括微服务和容器在内的现代应用程序架构,提供高级请求路由功能。了解更多

网络负载均衡器 网络负载均衡器提供高性能负载均衡,在网络连接层(第 4 级)运行,并且允许您根据 IP 协议数据路由到微服务的连接。网络负载均衡器每秒可以处理数百万个请求,同时保持超低延迟。了解更多

Amazon API Gateway Amazon API Gateway 为 API 管理提供了一个综合平台。借助 Amazon API Gateway,您可以处理成千上万个并发 API 调用和流量管理、授权、访问控制、监控以及 API 版本管理。了解更多

Amazon Route 53 Amazon Route 53 是一种具备高可用性和可扩展性的云域名系统(DNS)Web 服务,可将请求有效连接到在 AWS 中运行的基础设施。它可用于微服务的 IP 运行状况检查和服务发现。了解更多

Airtime Case Study 将应用程序重新设计为在 AWS 上运行的微服务之后,Airtime 能够以更加快速、可靠的方式为客户提供社交体验,且不会产生任何延迟。了解更多

消息收发

Amazon Simple Notification Service (Amazon SNS) Amazon SNS 是一种完全托管的发布/订阅消息收发服务,可轻松分离和扩展微服务、分布式系统和无服务器应用程序。了解更多

Amazon Simple Queue Service (Amazon SQS) Amazon Simple Queue Service(Amazon SQS)是一种完全托管的消息队列服务,可轻松分离和扩展微服务、分布式系统和无服务器应用程序。了解更多

Lyft Case Study Lyft 使用 AWS 快速发展公司并管理其指数级增长,利用 AWS 产品支持 100 多种微服务,从而增强客户体验的每个元素。了解更多

日志记录和监控

AWS CloudTrail 借助 CloudTrail,您可以记录日志、持续监控并保留与整个基础设施中的操作相关的账户活动。CloudTrail 事件历史记录可以简化安全性分析、资源更改跟踪和问题排查工作。了解更多

Amazon CloudWatch 使用 Amazon CloudWatch 收集和跟踪各项指标、收集和监控日志文件、设置警报,并自动应对正在运行的服务和 AWS 资源中的变更。了解更多

AWS X-Ray 获取请求在应用程序中传输时的端到端视图,并查看应用程序底层组件的映射。由于一组微服务协同工作才能处理请求,因此 AWS X-Ray 可以帮助您集中浏览日志,从而监控复杂的交互并对其进行故障排除。了解更多

Shippable 案例研究 通过使用 Amazon ECS 上托管的微服务,Shippable 得以专注于为其客户交付新功能,并加快了功能部署速度(从每周一次到每日多次)。了解更多

DevOps

Amazon Elastic Container Registry (Amazon ECR) 一种完全托管的 Docker 容器注册表,可用于存储、管理和部署 Docker 容器映像。Amazon ECR 与 Amazon Elastic Container Service (Amazon ECS) 集成,从而简化容器生产工作流程的开发。了解更多

AWS 开发人员工具 AWS 开发人员工具是一组服务,可帮助践行 DevOps 的开发人员和 IT 运维专业人员快速、安全地交付软件。这些服务结合起来,可以帮助您安全地存储应用程序的源代码并对其进行版本控制,同时还可自动构建、测试应用程序并将其部署到 AWS 或您的本地环境中。了解更多

Gilt 案例研究 Gilt 将其本地数据中心迁移至 AWS,以充分利用基于云的微服务基础设施所带来的速度与效率优势。了解更多

Browse all cloud computing concepts

Browse all cloud computing concepts content here:

正在加载
正在加载
正在加载
正在加载
正在加载

Did you find what you were looking for today?

Let us know so we can improve the quality of the content on our pages