《架构即未来》中最常用的15个架构原则
《架构即未来》这本书的第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个架构原则相关推荐
- linux中Grep常用的15个例子,Linux中Grep惯用的15个例子
Linux中Grep常用的15个例子 Grep命令主要用于从文件中查找指定的字符串. 首先建一个demo_file: $ cat demo_file THIS LINE IS THE 1ST UPPE ...
- linux grep 例子,Linux中Grep常用的15个例子
Grep命令主要用于从文件中查找指定的字符串. 首先建一个demo_file: $ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS ...
- 每天学习一个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 ...
- mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...
mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...
- GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...
原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...
- 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个
从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Djang ...
- 查看Linux系统架构类型的5条常用命令
导读 很多时候我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 Linux 环境,以下命令几乎 ...
- r怎么对两组数据统计检验_数据科学中最常用的统计检验是什么
r怎么对两组数据统计检验 Business analytics and data science is a convergence of many fields of expertise. Profe ...
- java excel 插件开发工具_程序员常用的15 种开发者工具推荐
程序员常用的15 种开发者工具推荐:Java 线上诊断工具 Arthas.IDE 插件 Cloud Toolkit.混沌实验注入工具 ChaosBlade.Java 代码规约扫描插件.应用实时监控工具 ...
- 阿里程序员常用的 15 个高效工具,大部分已开源!
阿里程序员常用的 15 个高效工具,大部分已开源! 阿里将自身在各类业务场景下的技术积淀,通过开源.云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率. ...
最新文章
- 面向对象三大特性一一封装(encapsulation)
- spark入门_Spark技术入门——配置部署、SparkSQL应用
- Oracle数据库锁诊断
- LeetCode 53. 最大子序和(Maximum Subarray)
- Xtreme ToolkitPro 初使用
- 学长的求职经验 记录【就业创业信息网、求职流程、求职小细节】
- DecimalFormat 类
- 台虚拟机更改计算机名,检查虚拟机的硬件信息、更改虚拟机名称、查看虚拟机配...
- java计算器简单吗,java简单计算器
- Jenkins配置:添加用户和管理权限
- Chrome浏览器必装插件!尤其程序猿!
- 【特征提取】基于matlab一帧语音共振峰提取【含Matlab源码 1768期】
- Android开发之ListView中Adapter的优化
- NodeBB实现登录企业账号系统(简单实现,非CAS登录)
- 【12月原创】RT-thread - 柿饼UI —— 网络流媒体播放器
- 搭建mpi测试环境,使用intell的mpi库
- 加速度传感器灵敏度的几种表示方式
- 玫瑰花pythone_用python画玫瑰,玫瑰花
- 谈谈JS中的函数劫持
- 【无聊之作】①CSS测试三基色融合测试是否能得到新颜色(白、黄、橙等);②CSS赋值英文red、green、blue与三基色RGB对应测试
热门文章
- html跳转多个域名自动选择,nginx实现两个域名之间跳转配置
- 动图处理_终于找到了,最全的废气处理动图
- opencv threshold_OpenCV致幻
- html中展开的小箭头,HTML5 移动网页应用中的展开式标签(带上下指示箭头)
- 使用Android实现水波纹动画,插件形式可直接引用
- MyBatis的其它方法
- JSP 的“4379”
- 【Python小程序】第3讲:如何将json数据转换成csv格式?
- CString转char*的两种方法讨论
- AtCoder Beginner Contest 137 解题报告(A ~ E)