这 15 个架构原则来自《架构即未来 (The Art of Scalability)》[附录 2] 一书,作者马丁 L. 阿伯特和迈克尔 T. 费舍尔分别是 eBay 和 PayPal 的前 CTO,他们经历过 eBay 和 PayPal 大规模分布式电商平台的架构演进,在一线实战经验的基础上总结并提炼出 15 条架构原则:

1.N + 1
集群化部署,设计永远不要少于两个,通常为三个。比方说无状态的 Web/API 一般部署至少>=2 个。

2. 回滚设计
版本发布失败,保证可回滚是至关重要的,确保系统可以回滚到以前发布过的任何版本。可以通过发布系统保留历史版本,或者代码中引入动态开关切换机制 (Feature Switch)。

3. 开关设计
能够关闭任何发布的功能。新功能隐藏在动态开关机制 (Feature Switch) 后面,可以按需一键打开,如发现问题随时关闭禁用。

4. 监控设计
在设计阶段就必须考虑监控,而不是在实施完毕之后补充。例如在需求阶段就要考虑关键指标监控项,这就是度量驱动开发 (Metrics Driven Development) 的理念。

5. 使用成熟的技术
只用确实好用的技术。商业组织毕竟不是研究机构,技术要落地实用,成熟的技术一般坑都被踩平了,新技术在完全成熟前一般需要踩坑躺坑,这里包含:小到成熟功能函数,大到开源或商业的组件、中间件。

6. 异步设计
能异步尽量用异步,只有当绝对必要或者无法异步时,才使用同步调用。

7. 无状态系统
尽可能无状态,只有当业务确实需要,才使用状态。无状态系统易于扩展,有状态系统不易扩展且状态复杂时更易出错。

8. 水平扩展而非垂直升级
永远不要依赖更大、更快的硬件设备构建核心业务系统。一般公司成长到一定阶段普遍经历过买更大、更快机器硬件的阶段,即使淘宝当年也买小型机扛流量,后来扛不住才体会这样做不 scalable,所以才有后来的去 IOE 行动。

9. 前瞻性设计
设计时至少要有两步前瞻性,在扩展性问题发生前考虑好下一步的行动计划。架构师的价值就体现在这里,架构设计对于流量的增长要有提前量。我们一般设计出能支撑短期目标20倍容量的目标系统架构,实现支撑5倍以上容量的架构方案开发,部署2倍容量的系统。

10. 非核心则购买
如果不是你最擅长,也提供不了差异化的竞争优势则直接购买。避免 Not Invented Here 症状,避免凡事都要重造轮子,毕竟达成业务目标才是重点。

11. 使用商品化硬件
在大多数情况下,便宜的就是最好的。这点和第 9 点是一致的,通过商品化硬件水平扩展,而不是买更大、更快的系统。

12. 小构建、小发布和快速试错
全部研发要小构建,不断迭代,让系统不断成长。这个和微服务理念一致。

13. 隔离故障
实现故障隔离设计,通过断路保护避免故障传播和交叉影响。
故障隔离包括:1.基础组件内的节点屏蔽;2.单个系统单个服务降级、流控;3.全局流控降级;4.系统单元化:通过舱壁泳道等机制隔离失败单元 (Failure Unit),一个单元的失败不至影响其它单元的正常工作;

14. 自动化
设计和构建自动化的过程。如果机器可以做,就不要依赖于人。自动化是 DevOps 的基础。目前大一些的互联网公司通过自动构建和发布平台来支撑版本构建和发布,大大提升效率及可靠性。

15. 多活设计
当一个重要的交易系统发展到一定程度,多数据中心或多活站点设计就被提上日程,不要被一个数据中心的解决方案把自己限制住。当然也要考虑成本和公司规模发展阶段。

分布式系统架构设计原则和理论 --AKF 架构原则相关推荐

  1. 《系统架构设计》-01-架构和架构师概述

    文章目录 1. 架构的基本定义 1.1 架构组成理论 1.1.1 系统元素 1)概念 2)静态结构和动态结构 1.1.2 基本系统属性 1.1.3 设计和发展原则 1.2 架构的决策理论 1.2.1 ...

  2. 系统架构设计:程序员向架构师转型之路-张勇-专题视频课程

    系统架构设计:程序员向架构师转型之路-247人已学习 课程介绍         本课程首先围绕普通开发人员如何向架构师转型这一课题,从架构师的角色以及转型过程中会遇到的困难及其解决方法切入展开讨论,总 ...

  3. 微服务架构设计实践之七:业务架构

    微服务架构设计实践之七:业务架构 原文:微服务架构设计实践之七:业务架构 版权声明: https://blog.csdn.net/beyondself_77/article/details/79842 ...

  4. 架构设计(1)-谈谈架构

    架构设计学习思维导图: 架构设计系列主要的ADM(架构开发方法)主要基于TOGAF9或者TOGAF9.1来论述.这是个人学习实践和总结笔记,专注并不断积累和更新,努力精进自己.个人拙见,仅供参考. 1 ...

  5. 架构设计三部曲之如何做架构设计

    架构设计不是架构师的专属工作,对非技术人员甚至是开发人员来说,从实实在在的需求到高神莫测的架构设计仿佛是一个神秘的过程,只有具有架构师头衔的人才能掌握各中玄妙,这篇文章就是从最基本的事物关系来回答如何 ...

  6. 深入解读 MySQL 架构设计原理,剖析存储架构选型核心

    孙玄,江湖人称"玄姐",前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何升级的,以及他们是如何玩转 My ...

  7. 互联网架构设计漫谈 (6)-90%的架构师都知道的工作流原理

    互联网架构设计漫谈 (6)-90%的架构师都知道的工作流原理 工作流是互联网中常见的应用场景,目前国内有很多厂商提供各种各样的工作流引擎.在国际也有一些知名的工作流引擎,比如:jBPM 和 Activ ...

  8. 微服务架构设计实践系列之五:架构准备阶段

    微服务架构设计实践系列之五:架构准备阶段 原文:微服务架构设计实践系列之五:架构准备阶段 版权声明: https://blog.csdn.net/beyondself_77/article/detai ...

  9. 架构设计工作笔记002---微服务架构理论-扩展立方体

    JAVA技术交流QQ群:170933152 主要就是说了架构设计原则中的x,y,z轴吧,感觉也没有什么实质性的内容,立方体,也算是个新词,记录一下吧 x指水平扩展,就是横向扩展,复制系统,然后做负载均 ...

最新文章

  1. python3.6.5安装教程-Centos7 安装Python3.6.
  2. office 2010中自带的 微软拼音输入法2010卸载
  3. 2014科目三大路考各项目操作要求
  4. qq饥荒联机版服务器没有响应,饥荒联机版专用服务器卡顿原因及解决方法汇总...
  5. 2799 高校排名 加强版
  6. 以弹窗形式打开页面_“弹窗广告”肆意而为!扰民?还可能侵权!
  7. python 删除大表数据
  8. 2020.10.30文献1:《滇中引水工程香炉山隧洞地应力特征及其活动构造响应》
  9. JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
  10. 因特网中的域名服务器系统负责全网IP,因特网中的域名服务器系统负责全网IP地址的解析工作,它的好处是()...
  11. Docker三大核心之容器
  12. LC.826. Most Profit Assigning Work
  13. 关于保险和理财,我是这么看的
  14. 我来自台湾:普力600 消毒锭_普力-600 消毒片PL-600 SH-XT-K礼盒小套组_易迅发现_易迅网...
  15. 练习题 StringBuilder类的使用
  16. python输入年月日输出_python下输出指定年月日的方法之一
  17. json数据自动生成图表
  18. autodesk genuine service卸载不掉
  19. 【iOS-知乎日报第二周总结】
  20. python系统学习日记 L32 循环和列表

热门文章

  1. python环境变量配置(win10+Python27)
  2. 计算机毕设 SpringBoot+Vue影院售票系统 影院线上购票系统 影厅订票系统 电影院售票系统Java Vue MySQL数据库 远程调试 代码讲解
  3. Abbexa 山羊 F(ab‘)2 IgG 同种型对照
  4. xampp-windows-x64-7.3.3-0-VC15的安装与配置
  5. 记事本写java出现找不到或无法加载主类
  6. 基于Java (spring-boot)和微信小程序的校园闲置二手小程序交易商城(毕业设计优秀论文)
  7. VS2022插件(visual studio2022)之VAssistX番茄插件的使用1-固定每行字符-换行显示
  8. android 人脸道具,Faceunity 面部跟踪和虚拟道具 SDK 在 Android 平台中的集成 Demo
  9. Python机器学习17——极限学习机(ELM)
  10. iOS导航栏使用总结