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


    单体架构的好处

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

    单体架构的问题

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

    系统的扩展

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

    微服务的特点

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

    和SOA的区别

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

    微服务的好处

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

    微服务的弊端

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

    新架构的推进

    银弹现象:

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

    理性地看待新技术。

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

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

    让团队“自治”。

    持续交付:

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

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

    微服务带来的管理问题

    • 失落和放弃:改变总是痛苦的,要脱离舒适区,人们会叨念之前的好。
    • 中立区:纠结并开始学习新的工作方式。
    • 新的开始:体会到了新工作方式的好,开始热情地拥抱新的工作方式。
  • 相关阅读:
    正则表达式记录
    XMLHttpRequest(Ajax)不能设置自定义的Referer
    删除右键菜单上的Adobe Drive CS4,Win7上也没有问题
    A HOWTO on Optimizing PHP(如何优化PHP的一篇文章)
    PHP XML To Array,将XML转换为数组
    让图片在高度确定的块元素中垂直居中
    (转)2011年,還是微軟IE的天下~網頁設計師哭泣吧!
    产生类似GUID的唯一ID
    转:编写跨浏览器兼容的 CSS 代码的金科玉律
    array_intersect 比 array_diff 快
  • 原文地址:https://www.cnblogs.com/HappyTeemo/p/15377391.html
Copyright © 2020-2023  润新知