🌏【架构师指南】教你如何设计和规划系统架构(13 条)
架构设计原则和理论的 AKF 架构原则
前提概要
人在身处逆境时,适应环境的能力实在惊人。人可以忍受不幸,也可以战胜不幸,因为人有着惊人的潜力,只要立志发挥它,就一定能渡过难关。
N+1 设计 (N>=2)
对分布式技术体系而言,部署的服务节点永远不要少于两个,通常为三个。比方说无状态的 Web/API 一般部署至少>=2 个。最佳典型的案例就是:Zookeeper 的部署、Redis 的部署(Master-Slave 架构)、(Sentinel 架构)、(Cluster 架构)等。
回滚设计
确保系统可以回滚到以前发布过的任何版本。可以通过发布系统保留历史版本,或者代码中引入动态开关切换机制 (Feature Switch)。防止出现问题,只好可以留有后路,返回到上一个版本,不会影响系统服务使用。
禁用设计
能够关闭任何发布的功能。新功能隐藏在动态开关机制 (Feature Switch) 后面,可以按需一键打开,如发现问题随时关闭禁用。
监控设计
在设计阶段就必须考虑监控,而不是在实施完毕之后补充。例如在需求阶段就要考虑关键指标监控项,这就是度量驱动开发 (Metrics Driven Development) 的理念。
异地多活 IDC
不要被一个数据中心的解决方案把自己限制住。当然也要考虑成本和公司规模发展阶段。
技术体系
只用确实好用的技术。商业组织毕竟不是研究机构,技术要落地实用,成熟的技术一般坑都被踩平了,新技术在完全成熟前一般需要踩坑躺坑。
异步设计
能异步尽量用异步,只有当绝对必要或者无法异步时,才使用同步调用。以及尽可能减少阻塞和等待。
无状态化
尽可能无状态,当业务确实需要,才使用状态。无状态系统易于扩展,有状态系统不易扩展且状态复杂时更易出错。
水平扩展(而非垂直升级)
永远不要依赖更大、更快的系统。一般公司成长到一定阶段普遍经历过买更大、更快系统的阶段,即使淘宝当年也买小型机扛流量,后来扛不住才体会这样做不 scalable,所以才有后来的去 IOE 行动。
前瞻性
在扩展性问题发生前考虑好下一步的行动计划。架构师的价值就体现在这里,架构设计对于流量的增长要有提前量。
小构建、小发布和快试错
全部研发要小构建,不断迭代,让系统不断成长。这个和微服务理念一致。
隔离故障
实现故障隔离设计,通过断路保护避免故障传播和交叉影响。通过舱壁泳道等机制隔离失败单元 (Failure Unit),一个单元的失败不至影响其它单元的正常工作。
自动化
设计和构建自动化的过程。如果机器可以做,就不要依赖于人。自动化是 DevOps 的基础
版权声明: 本文为 InfoQ 作者【李浩宇/Alex】的原创文章。
原文链接:【http://xie.infoq.cn/article/42afd1614f69f9c177b796ffe】。文章转载请联系作者。
评论