打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
微服务架构

软件设计师的库

内容

  • 挑战
  • 解决方案
  • 概念图
  • 真实示例
  • 好处
  • 缺点
  • 什么时候应该使用它?
  • 概括

1.挑战

您正在开发一个服务器端企业应用程序,该应用程序:

  • 支持各种不同的客户端,包括桌面浏览器,移动浏览器,本机移动应用程序,以及为第三方提供API;
  • 通过Web服务或消息代理与其他应用程序集成;
  • 通过执行业务逻辑来处理HTTP请求和消息;访问数据库;与其他系统交换消息;返回HTML / JSON / XML响应;
  • 由对应于应用程序不同功能区域的逻辑组件组成。这些组件可能会承受不同的负载,因此需要适当且独立地进行缩放。

2.解决方案

将应用程序安排为一组松耦合的交互服务。

  • 服务使用与技术无关的协议(例如HTTP / REST或AMQP)进行通信,因此,数据合同是恒定的;
  • 独立开发和部署服务-使团队可以开发和部署服务,而无需与其他服务和团队进行协调
  • 每个服务都有自己的数据库,以便与其他服务分离。
  • 通过事件渠道或消息代理将业务事务实现为一系列本地事务(服务到服务)。

3.概念图

假设的微服务应用程序包含以下组件:

  • API网关从客户端获取所有API调用,然后通过请求路由,组合和协议转换将它们路由到适当的微服务。
  • Web App实现用户Web界面。
  • 后端服务包括服务A和服务B-它们是带有数据库的业务逻辑执行单元。他们通过消息代理进行通信。

> Microservices architecture conceptual diagram

4.实际的无服务器微服务架构(AWS)

此示例是实现为具有无服务器后端的微服务的电子学习平台。

组件说明

  • Cognito处理用户注册,登录和访问控制。
  • CloudFront在边缘缓存静态S3 Web内容。
  • API网关处理API调用。它使用API Gateway的“ Lambda授权者”,连接Lambda函数,该函数处理Authorization标头并返回IAM策略。然后,API Gateway使用该策略来确定它对于资源是否有效,并路由请求或拒绝请求。API Gateway会缓存IAM策略一段时间,因此您也可以将其分类为“代客密钥”模式。API Gateway将日志分发到CloudWatch。
  • Lambda处理运行和扩展执行所需的一切,以高可用性满足实际需求。Lambda支持多种编程语言,可以直接从任何Web或移动应用程序中调用它。Lambda与API网关集成。从API网关到AWS Lambda的同步调用使应用程序可以作为无服务器运行。AWS Lambda将动态数据存储在NoSQL数据库DynamoDB中,并将静态数据存储在S3 Bucket中。
  • MQ Broker-负责微服务之间的异步通信。
  • RDS存储用户配置文件和其他业务对象。 > E-learning platform serverless microservices architecture

5.好处

  • 支持大型复杂应用程序的连续交付和部署。A)每个服务都相对较小,因此更易于理解和更改,更易于维护。B)服务更小,测试速度更快-测试更容易。C)服务可以独立部署-部署更容易。D)开发工作是围绕多个自治团队组织的。每个团队都拥有并负责一项或多项服务。每个团队可以独立于所有其他团队开发,测试,部署和扩展其服务。更轻松,更可扩展的开发。
  • 每个微服务都相对较小.A)开发人员更容易理解B)IDE更快,使开发人员生产率更高C)应用程序启动速度更快,这使开发人员生产率更高,并加快了部署速度
  • 每个微服务都是隔离的,如果一个服务失败,其他服务将不受影响并继续处理请求。相比之下,整体架构的一个行为不当的组件可能会使整个系统崩溃。
  • 对技术栈没有长期承诺。在开发新服务时,您可以选择新技术栈。同样,当对现有服务进行重大更改时,您可以使用新技术堆栈将其重写。

6.缺点

  • 创建分布式系统的额外复杂性A)开发人员必须实现服务间通信机制并处理部分故障B)难以实现跨多个服务的请求C)测试服务之间的交互更为困难D)实施跨多个服务的请求需要谨慎团队之间的协调E)开发人员工具/ IDE面向构建整体应用程序,不为开发分布式应用程序提供明确支持
  • 部署复杂性在生产中,部署和管理由许多不同服务组成的系统也存在操作复杂性。
  • 增加的内存消耗微服务体系结构用NxM服务实例代替了N个单片应用程序实例。如果每个服务都在其自己的JVM(或等效版本)中运行(通常是隔离实例所必需的),则JVM运行时的开销是M倍。此外,如果每个服务都在自己的VM(例如EC2实例)上运行(例如Netflix的情况),则开销会更高。

7.什么时候应该使用它?

对于应用程序的第一个版本绝对不是一个好主意,因为您根本没有此方法可以解决的问题。使用精心设计的分布式体系结构将减慢开发速度。对于初创企业而言,这可能是一个主要问题,其最大的挑战通常是如何快速发展业务模型和随附的应用程序。功能分解可能使快速迭代变得更加困难。但是,稍后,当挑战在于如何扩展并且您需要使用功能分解时,复杂的依赖关系可能会使将单片应用程序分解为一组服务变得困难。

8.总结

  • 微服务体系结构的核心思想是将应用程序后端拆分为一组松散耦合的服务,这些服务独立开发,部署,测试和扩展。
  • 好处是:
    1)能够连续交付和部署大型,复杂的应用程序;
    2)对技术栈没有长期承诺;
    3)维护更简单;
    4)增加了故障容忍度。
  • 缺点是
    1)开发和部署的复杂性增加;
    2)增加内存消耗。
  • 当扩展成为最重要的问题时,在开发的后期阶段应用微服务架构模式。

(本文由闻数起舞翻译自Lokajit Tikayatray的文章《Microservices Architecture》,转载请注明出处,原文链接:
https://levelup.gitconnected.com/microservices-architecture-74c26df8688)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
AWS上的Serverless架构详谈,概述了无服务器架构的五大原则【爱哟】
终于有人把云原生讲明白了
微服务设计最佳实践
云原生与微服务架构基础:02 | 云原生基础架构的组成以及云原生应用的特征
微服务设计指南
Service Mesh是什么技术
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服