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

文章插图
通常:
- 微服务架构是将应用程序表示为微小的、松散耦合的服务集合 。由于整体的复杂性被转移到了服务的协调级别上,因此每个服务都代表了一种业务功能,可以更加容易地去定位相关代码 。
- 而单体架构是将几个离散的功能组成一个单元,作为一个整体进行测试、部署和扩展 。由于所有组件都是相互依赖的,因此通常不能够单独运行 。这就意味着某个模块中的错误,可能会减慢、甚至破坏整个应用程序 。
- 易于扩展
- 应用组件相互独立
- 有清晰的边界,并能通过HTTP实现通信
- 可以使用不同的编程语言和数据存储
- 开发过程可被分到多个团队
- 可被独立部署
- 易于更新和维护
- 使用较小的代码库
- 难以监控
- 具有更为复杂的服务部署
- 服务之间的通信需要额外安全加固
- 性能会有所降低
- 鉴于分布式系统的远程调用较慢,因此经常存在着编程难度大和失败的风险
- 增加了运营的复杂性
- 繁重的系统负载,需要与不同的支付系统进行交互 。
- 用户需求不断增长和规模持续扩大,现有应用系统常出现中断 。
- 单体应用变得不够灵活且无法升级 。
- 为了在竞争激烈的业务环境中取得成功,需要加快应用的开发和发布时间,并可在后续着手进行功能的更新与升级 。
- 需要实施人工智能之类高级的商业智能方案,以获得更深入、更具竞争力的业务数据、报告和分析 。
- 目前的基础设施无法提供所需的横向可扩展性,无法处理大数据的处理负载 。

文章插图
上图是Amazon在2008年完成的被称为“死亡之星”的微服务基础设施
4.迁移至微服务所面临的挑战企业在从单体架构向微服务架构的迁移过程中,往往会遇到各种技术和组织方面的挑战,因此我们有必要了解与之相伴的各类风险:
- 麻烦且耗时 。由于从单体应用整体迁移到微服务是非常耗费时间和精力的,因此企业往往选择以“小步快跑”的方式进行分步迁移 。如果需要在迁移的过程中引入新的服务特性,那么开发团队还要投入更多的精力 。
- 成本较高 。无论是从开发与编写代码的角度,还是从支持、运维、以及更改的角度,迁移到微服务的成本都比较高 。企业需要在构建基础设施、开发文档、以及重构应用等方面进行大量的投资 。
- 由于微服务是一个分布式系统,因此开发团队需要选择,并实现基于消息传递或RPC的进程间通信机制 。
- 移动代码库 。为了顺利地将数据从现有的单体架构提取至配合微服务的数据库和代码库,我们有可能需要重构其实现的过程,并通过完备的测试覆盖率,以避免引入新的bug 。
- 组织的转变 。为了实现迁移,企业需要将现有的大型项目团队,拆分成能够自主开展工作的小型团队 。同时,企业仍需要保持组织架构的一致型 。
- 团队应对其服务负责 。在完成迁移后,各个团队将拥有自己的代码库,一旦出现服务交付的失败,他们将不再可以归咎他人,而需要从自身找原因,动手解决,负责到底 。
- 此外,在系统不宕机的情况下进行迁移,并保证用户持续有权访问应用程序 。这本身就有一定的风险 。
推荐阅读
- 星座男|研究生不只考试难,宿舍都要“抢”?专科、本科毕业该不该考研?
- |老板和副总说有机会让我进下一级的领导那里,该不该答应
- excel|新手会计在小公司工作,没人带全靠自己摸索,经验积累慢该不该辞
- 单体建筑(成都拥有世界最大单体建筑)
- 饭局告密者该不该被鼓励?
- 买房该不该提前还款 提前还贷划算吗
- 体检前该不该喝水? 体检前可以喝水吗
- 大学|考上大专会计专业,但是家里不支持,该不该去?不能放弃读书!
- 特斯拉|单体能量暴增5倍!特斯拉柏林工厂已生产首辆4680电池Model Y
- 中华田园犬到底该不该禁养 中华田园犬为什么禁养
