首页 > 其他分享 >《架构即未来》中最常用的15个架构原则

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

时间:2023-09-25 12:03:49浏览次数:35  
标签:服务 常用 15 系统 回滚 实例 设计 架构 冗余

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

1.N+1设计

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

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

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

2.回滚设计

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

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

3.禁用设计

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

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

4.监控设计

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

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

5.设计多活数据中心

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

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

6.只用成熟的技术

只用确实好用的技术。

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

7.异步设计

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

异步适合并发。

8.无状态系统

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

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

9.水平扩展非垂直升级

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

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

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

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

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

11.非核心则购买

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

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

12.使用商品化硬件

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

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

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

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

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

14.隔离故障

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

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

15.自动化

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

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


标签:服务,常用,15,系统,回滚,实例,设计,架构,冗余
From: https://blog.51cto.com/fiftyone/7594381

相关文章

  • Windbg常用命令及分析套路
    自己也在使用windbg分析问题,但是属于刚入门所以转发下大神的总结:https://www.cnblogs.com/fj365/p/13295453.html常用!threadpool查看线程池CPU使用量!threads查看所有托管线程情况!clrstack某个线程托管代码的调用......
  • Educational Codeforces Round 155 (Rated for Div. 2)
    比赛链接A.Rigged!题目链接就是一个比较简单的模拟就可以解决,如何判断能不能第一只需要考虑比他力量大的耐力是不是也比他大就行,而只要比他大,他就不可能第一,否则输出他的力量作为标杆就行,这样也可以避免比他力量小的也可以举起来。#include<bits/stdc++.h>usingnamespaces......
  • ## day15 - 二叉树part02
    day15-二叉树part02力扣102.二叉树的层序遍历思路:使用一个队列,将根节点放入队列,并使用size记录每一层的节点数量,然后遍历。为什么和深度优先搜索不一样了呢?为什么不能使用递归了呢?比如先序遍历时,每层的逻辑都是根左右,遍历到当前节点,就对当前节点实施根左右,可以完成递归。......
  • 交易日均千万订单的存储架构设计与实践
    一、订单系统概述1.1业务范围服务业务线:快递、快运、中小件、大件、冷链、国际、B2B合同物流、CLPS、京喜、三入三出(采购入、退货入、调拨入、销售出、退供出、调拨出)等1.2订单中心价值1、解耦(提升系统稳定性)原系统:交易与生产耦合在一起,业务新增需求,涉及个上下游多个系统。......
  • Git常用命令
     1、配置个人身份gitconfig--globaluser.name枝桠[email protected]、生成ssh公钥ssh-keygen-trsa-C"[email protected]"-b4096查看公钥cat~/.ssh/id_rsa.pub3、拉取代码gitclone[-bBRANCH_NAME][email protected]:sw......
  • 新零售SaaS架构:面向中小连锁的SaaS系统整体规划
    零售企业的发展路径零售企业的发展路径一般可分为以下几个阶段:单店经营阶段:企业在一个地区或城市开设单个门店。这时,企业需要把精力放在了解当地市场和顾客需求上,这是积累经验和品牌知名度的重要环节。为了在市场中建立竞争力,企业需要不断提升产品和服务的质量,比如探索新的零......
  • linux巡检脚本常用
    Linux系统服务巡检脚本原创 李逸皓 运维book思议 2023-09-2418:01 发表于河北收录于合集#linux系统63个#运维103个#shell66个先放个链接,万一有人关注呢运维book思议李小白,一个北漂的运维。希望能够通过本公众号与业内各位大神交流技术问题。186篇......
  • Stream流常用操作
    Stream流是Java8引入的一个新特性,它提供了一种更简洁、更高效的方式来处理集合数据。Stream流的操作可以分为两种:中间操作和终端操作。中间操作(IntermediateOperations):filter(Predicate<T> predicate):根据指定的条件过滤流中的元素。map(Function<T,R>mapper):将流中的每......
  • Java 常用类
    使用Scanner获取键盘输入hasNextXxx()是否还有下个输入项,其中Xxx可以是int、Long等代表基本数据类型的字符串。如果只是判断是否包含下一个字符串,则直接使用hasNext()nextXxx()获取下一个输入项publicclassScannerTest{publicstaticvoidmain(String[]args){......
  • P4824 [USACO15FEB] Censoring S
    P4824[USACO15FEB]CensoringSKMP+栈同样的套路,先找B的最长前后缀,然后与A匹配不同的是要删除A中的B,特殊的是删除之后可能会产生新的B那我们可以利用栈的思想,利用f数组,记录A每一位置上B的匹配程度,这样删除时,直接回到上一个匹配程度,以防漏掉。利用栈记录下标,还在栈内的,说明......