《架构即未来》这本书的第12章简单阐述了架构设计的一些常用的原则(后面章节会详细阐述)。这些原则中很多都是在架构一开始的设计中就要考虑进去的,这样在出现任何问题时,我们都能够及时的处理,和把问题影响的范围有效的缩小。否则就像我现在的项目,一开始设计时,考虑的很少,出问题时,没有做到及时的反馈,和缩小影响范围,只能在事故的代价中将所需要的原则添加进来,慢慢完善。

1.N+1设计

要确保任何你所开发的系统在发生故障时,至少有一个冗余的实例。

一个实例确实很危险,当这个实例出现不明原因的问题不能对外服务,需要debug的时候,如果优先debug,那当前实例就要暂停服务直到你找到问题为止。如果你直接重启实例恢复服务,就没有事故现场进行debug了。而这时如果有一个冗余的实例,就可以先让冗余的实例对外服务,事故现场的环境也得以保留。

多个实例来做负载均衡也是一种不错的选择。

2.回滚设计

确保系统可以回滚到以前发布过的任何版本。

以前做游戏的时候经常遇到回滚,有时候是数据库回滚,有时候是服务器端回滚,一般都是回滚到上个版本。

3.禁用设计

能够关闭任何发布的功能。

当一个功能出现严重问题不得不关闭时,如果关闭整个系统代价就有点大了,所有要有单个功能的开关。像商城系统的支付功能就一定要有开关,如果出现比较严重的bug,可以关闭支付而不影响下单。

4.监控设计

在设计阶段就必须要考虑监控,而不是在实施完成之后补充。

如果监控做的好,不仅能发现服务的死活,检查日志文件,还能收集系统相关的数据,评估终端用户的响应时间。如果系统和应用在设计和构建时就考虑好监控,那么即使不能自我修复,也至少可以自我诊断。

5.设计多活数据中心

不要被一个数据中心的解决方案把自己限制住。

有钱就多建一个,让股东放心。

6.只用成熟的技术

只用确实好用的技术。

不管用什么技术,都要确保是一个成熟的技术。也许某个新技术有众多优点,比如,降低开发成本,提高开发效率,提高可扩展能力,减少终端用户的响应时间。但是,只要这项技术故障率比较高,就绝不能使用。

7.异步设计

只有在绝对必要的时候才进行同步调用。

异步适合并发。

8.无状态系统

只有当业务确实需要的时候,才使用状态。

无状态的系统更利于扩展,更利于做负载均衡。

9.水平扩展非垂直升级

永远不要依赖更大、更快的系统。

微服务是水平扩展的一个例子,不要把所有的功能都集中在一个系统里面。必要的时候把需求分为多个系统,而不是升级原有的系统。

10.设计至少有两个步骤的前瞻性

在扩展性问题发生前考虑好下一步的行动计划。

想的更远一点,就能减少重构的次数。

11.非核心则购买

如果不是你最擅长的,也提供不了差异化的竞争优势则直接购买。

云服务这种的就购买好了。

12.使用商品化硬件

在大多数情况下,便宜的是最好的。

硬件这块儿,满足需求即可,在必要的时候增加配置。

13.小构建,小发布,快试错

全部研发要小构建,不断迭代,让系统不断地成长。

小版本的失败率较低,因为失败率与解决方案中的变更数量直接相关。

14.隔离故障

实现隔离故障设计,通过断路保护避免故障传播和交叉影响。

避免多系统之间的互相影响,这个很重要。

15.自动化

设计和构建自动化的过程。如果机器可以做,就不要依赖于人。

人常犯错误,更令人沮丧的是,他们往往会以不同的方式多次犯同样的错误。

转载于:https://www.cnblogs.com/andyidea/p/6294493.html

《架构即未来》中最常用的15个架构原则相关推荐

  1. linux中Grep常用的15个例子,Linux中Grep惯用的15个例子

    Linux中Grep常用的15个例子 Grep命令主要用于从文件中查找指定的字符串. 首先建一个demo_file: $ cat demo_file THIS LINE IS THE 1ST UPPE ...

  2. linux grep 例子,Linux中Grep常用的15个例子

    Grep命令主要用于从文件中查找指定的字符串. 首先建一个demo_file: $ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS ...

  3. 每天学习一个Android中的常用框架——0.目录

    文章目录 1.前言 2.环境 3.目录 3.1 持久化 3.1.1 Litepal 3.1.2 GreenDao 3.1.3 Realm 3.1.4 DBFlow 3.2 网络传输 3.2.1 OkH ...

  4. mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...

    mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...

  5. GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  6. 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个

    从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Djang ...

  7. 查看Linux系统架构类型的5条常用命令

    导读 很多时候我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎 ...

  8. r怎么对两组数据统计检验_数据科学中最常用的统计检验是什么

    r怎么对两组数据统计检验 Business analytics and data science is a convergence of many fields of expertise. Profe ...

  9. java excel 插件开发工具_程序员常用的15 种开发者工具推荐

    程序员常用的15 种开发者工具推荐:Java 线上诊断工具 Arthas.IDE 插件 Cloud Toolkit.混沌实验注入工具 ChaosBlade.Java 代码规约扫描插件.应用实时监控工具 ...

  10. 阿里程序员常用的 15 个高效工具,大部分已开源!

    阿里程序员常用的 15 个高效工具,大部分已开源! 阿里将自身在各类业务场景下的技术积淀,通过开源.云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率. ...

最新文章

  1. 面向对象三大特性一一封装(encapsulation)
  2. spark入门_Spark技术入门——配置部署、SparkSQL应用
  3. Oracle数据库锁诊断
  4. LeetCode 53. 最大子序和(Maximum Subarray)
  5. Xtreme ToolkitPro 初使用
  6. 学长的求职经验 记录【就业创业信息网、求职流程、求职小细节】
  7. DecimalFormat 类
  8. 台虚拟机更改计算机名,检查虚拟机的硬件信息、更改虚拟机名称、查看虚拟机配...
  9. java计算器简单吗,java简单计算器
  10. Jenkins配置:添加用户和管理权限
  11. Chrome浏览器必装插件!尤其程序猿!
  12. 【特征提取】基于matlab一帧语音共振峰提取【含Matlab源码 1768期】
  13. Android开发之ListView中Adapter的优化
  14. NodeBB实现登录企业账号系统(简单实现,非CAS登录)
  15. 【12月原创】RT-thread - 柿饼UI —— 网络流媒体播放器
  16. 搭建mpi测试环境,使用intell的mpi库
  17. 加速度传感器灵敏度的几种表示方式
  18. 玫瑰花pythone_用python画玫瑰,玫瑰花
  19. 谈谈JS中的函数劫持
  20. 【无聊之作】①CSS测试三基色融合测试是否能得到新颜色(白、黄、橙等);②CSS赋值英文red、green、blue与三基色RGB对应测试

热门文章

  1. html跳转多个域名自动选择,nginx实现两个域名之间跳转配置
  2. 动图处理_终于找到了,最全的废气处理动图
  3. opencv threshold_OpenCV致幻
  4. html中展开的小箭头,HTML5 移动网页应用中的展开式标签(带上下指示箭头)
  5. 使用Android实现水波纹动画,插件形式可直接引用
  6. MyBatis的其它方法
  7. JSP 的“4379”
  8. 【Python小程序】第3讲:如何将json数据转换成csv格式?
  9. CString转char*的两种方法讨论
  10. AtCoder Beginner Contest 137 解题报告(A ~ E)