《微服务架构设计模式》读书笔记 01.逃离单体地狱

单体架构的好处

  • 应用开发简单;
    • 一个Git,可以看到代码全貌
  • 易对应用程序进行大规模修改;
  • 测试相对简单直观;
  • 部署简单明了;
  • 横向扩展不费吹灰之力;多实例+负载均衡即可。

单体架构的问题

  • 过度复杂性会吓退开发者;
    • 理解复杂
    • 代码难理解—更改时容易出错—冗余代码—-更复杂
  • 开发速度慢;
    • IDE卡顿,编译慢,启动慢。
  • 从代码提交到实际部署的周期很长,容易出问题;
    • 不同模块分了团队后,团队的时间不一致。
    • A团队的代码可能对B团队产生影响。
  • 难以扩展;
    • 有的模块需要硬盘,有的模块需要CPU,这样就必须把服务器配置拉满,造成浪费。
  • 交付可靠的单体应用是一项挑战;
    • 没有隔离。
  • 需要长期依赖某个可能已过时的技术栈;
    • 难以重构,需要整体重写。

系统的扩展

  • X轴:负载均衡,随机算法、平均算法,复制多个单体就好了。
  • Z轴:根据请求路由,有针对地扩容。
  • Y轴:功能性拆分,将应用拆分成服务。

微服务的特点

  • 根据业务拆分服务,独立开发、测试、部署,并且拥有自己的数据库。
  • 服务间采用轻量级的通信机制。

和SOA的区别

  • SOA是全局数据库,微服务的独立数据库。
  • 微服务的拆分更小。
  • SOA的通信方式更重,采用了ESB企业总线,微服务采用的RPC。

微服务的好处

  • 使大型的复杂应用程序可以持续交付和持续部署
    • 自动化测试—-持续交付和持续部署
    • 独立部署
    • 开发团队自主且松散耦合
  • 每个服务都相对较小并容易维护;
    • IDE快,启动快。
    • 提高调试、部署等环节效率。
  • 服务可以独立部署;
  • 服务可以独立扩展;
    • 有针对地选择服务器。
  • 微服务架构可以实现团队的自治;
    • 每个团队可以有自己的技术和管理方法。
  • 更容易实验和采纳新技术;
    • 方便试错和迭代。
  • 更好的容错性;
    • 故障隔离了,进程和数据库都隔离了。

微服务的弊端

  • 服务的拆分与定义是一项挑战;
    • 没有具体的、良好的算法可以完成拆分工作,这让服务的拆分更像一门艺术。
    • 如果拆分的不好,会成分布式单体,会包含单体和微服务两者的弊端。
  • 分布式系统带来各种复杂性,使开发、测试和部署变得困难;
    • 跨服务的事务和查询。
    • 数据一致性。
    • 需要高度自动化。
  • 当部署跨越多个服务的功能时需要谨慎地协调更多开发团队;
    • 需要根据服务依赖来制定开发计划。
  • 开发者需要思考到底应该在应用的什么阶段使用微服务架构;
    • 初创公司应该从单体开始。

新架构的推进

银弹现象:

过热期(迷恋和崇拜)—- 低谷期(失望)—- 成熟期(生产力的高地,理性地使用)

理性地看待新技术。

骑大象的人:大象代表思维中情绪化的部分,它完成了绝大部分决策。骑大象的人代表理性的部分,用来对大象的决策进行判断。

团队增大,沟通成本也会迅速增加,解决之道就是将大团队划分成小团队。

让团队“自治”。

持续交付:

持续交付能够以可持续的方式安全、快速地将所有类型的更改(包括新功能、配置更改、错误修复和实验)交付到生产环境或用户手中

  • 部暑频率:软件部署到生产环境中的频率。
  • 交付时间:从开发人员提交变更到变更被部署的时间。
  • 平均恢复时间:从生产环境问题中恢复的时间。
  • 变更失败率:导致生产环境问题的变更提交百分比。

微服务带来的管理问题

  • 失落和放弃:改变总是痛苦的,要脱离舒适区,人们会叨念之前的好。
  • 中立区:纠结并开始学习新的工作方式。
  • 新的开始:体会到了新工作方式的好,开始热情地拥抱新的工作方式。
原文地址:https://www.cnblogs.com/HappyTeemo/p/15377391.html