该不该将单体架构迁移到微服务?

译者 | 陈峻
目前,业界最常见的软件范例有:单体(Monolith)和微服务架构两种类型 。两者的逻辑结构如下图所示 。

该不该将单体架构迁移到微服务?

文章插图
通常:
  • 微服务架构是将应用程序表示为微小的、松散耦合的服务集合 。由于整体的复杂性被转移到了服务的协调级别上,因此每个服务都代表了一种业务功能,可以更加容易地去定位相关代码 。
  • 而单体架构是将几个离散的功能组成一个单元,作为一个整体进行测试、部署和扩展 。由于所有组件都是相互依赖的,因此通常不能够单独运行 。这就意味着某个模块中的错误,可能会减慢、甚至破坏整个应用程序 。
1.微服务架构的优点一直以来,我们都沿用且谙熟单体架构,下面,我们先主要来讨论微服务架构的各项优点:
  • 易于扩展
  • 应用组件相互独立
  • 有清晰的边界,并能通过HTTP实现通信
  • 可以使用不同的编程语言和数据存储
  • 开发过程可被分到多个团队
  • 可被独立部署
  • 易于更新和维护
  • 使用较小的代码库
2.微服务架构的缺点
  • 难以监控
  • 具有更为复杂的服务部署
  • 服务之间的通信需要额外安全加固
  • 性能会有所降低
  • 鉴于分布式系统的远程调用较慢,因此经常存在着编程难度大和失败的风险
  • 增加了运营的复杂性
3.何时选择微服务2001年,面对各种应用请求的增加,编码问题突显、开发的延迟、以及服务间的相互依赖性等问题,Amazon逐渐意识到需要从头开始重构其系统,因此它将其单一的应用程序分解成小型的、独立的特定于服务(service-specific)的应用程序,开创了微服务的架构 。该架构实现了由一种服务接受订单,另一种服务生成待购买的推荐商品列表,而第三种服务负责提供简单的身份验证服务等模式 。正如Martin Fowler早在2015年,针对如何构建实用的软件,所给出的建议那样:“几乎所有成功的微服务案例都是从拆分一个巨型的单体架构开始的 。”当然,仅仅根据现代化趋势来选择微服务,不一定是正确的 。通常,我们认为如下的应用和代码设计需求,更适合企业选择转向微服务:
  • 繁重的系统负载,需要与不同的支付系统进行交互 。
  • 用户需求不断增长和规模持续扩大,现有应用系统常出现中断 。
  • 单体应用变得不够灵活且无法升级 。
  • 为了在竞争激烈的业务环境中取得成功,需要加快应用的开发和发布时间,并可在后续着手进行功能的更新与升级 。
  • 需要实施人工智能之类高级的商业智能方案,以获得更深入、更具竞争力的业务数据、报告和分析 。
  • 目前的基础设施无法提供所需的横向可扩展性,无法处理大数据的处理负载 。

该不该将单体架构迁移到微服务?

文章插图
上图是Amazon在2008年完成的被称为“死亡之星”的微服务基础设施
4.迁移至微服务所面临的挑战企业在从单体架构向微服务架构的迁移过程中,往往会遇到各种技术和组织方面的挑战,因此我们有必要了解与之相伴的各类风险: