这 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. mongodb的简单使用
  2. linux简单设计与实现代码,《linux内核设计与实现》第五章(示例代码)
  3. Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】
  4. c++ bind和function
  5. pytorch 矩阵相乘_编译PyTorch静态库
  6. Fast R-CNN 个人理解
  7. ai外呼营销系统_为了让居民预约口罩少出门,长宁这个街道使用AI技术智能语音外呼系统...
  8. 因此,甲骨文杀死了java.net
  9. 接口可以继承抽象类吗_Python接口类的多继承以及抽象类的单继承
  10. __gnu_cxx::hash_map使用中的一些问题
  11. 解决Ubuntu 16.04 SSH无法远程登录问题(使用root登录)
  12. 怎么用一个计算机控制两个屏幕,一台电脑带2个显示器,这样操作就对了,双屏显示操作更方便...
  13. qgridlayout 滚动时固定第一行_【德国进口轴承】滚动轴承组合设计应考虑的问题...
  14. python3GUI--下载抖音小姐姐所有无水印视频(附源码)
  15. 联想笔记本桌面计算机不见了,联想电脑任务栏不见了怎么还原
  16. atthesametime啥意思_atthesametime
  17. 天使轮,种子,A轮,B轮,C轮,Pre-IPO
  18. 实验3 交互式SQL语言1
  19. java8/jdk1.8 官网下载地址
  20. 利用二分法查找 设计人与计算机猜数游戏,第8章第1-3.ppt

热门文章

  1. 微信分享universal link校验不通过
  2. 王道考研系列:计算机组成原理
  3. 同相放大电路电阻热噪声分析的一些思考
  4. win10系统下安装informix 12版本安装和简单使用注意
  5. Android 获取软键盘的删除delete事件
  6. Winform初学 ---01设计一个简易的浏览器
  7. 2023 最新一键下载百度网盘/阿里云盘/百度文库/道客巴巴/原创力文档
  8. 八年级上册计算机期末考试题,八年级上册数学期末考试模拟试题及答案
  9. python视频编辑教程_Python 带你高效创作短视频,视频剪辑什么鬼_Python 视频_Python 课程视频_Python 课程_课课家...
  10. 如何成为一名 必学的12个基本步骤