一. 系统开发
高内聚/低耦合
过度设计
过早优化
重构 (Refactoring)
破窗效应
互不信任原则
持久化 (Persistence)
临界区
阻塞/非阻塞
同步/异步
并发/并行
二. 架构设计
高并发 (High Concurrency)
高可用 (High Availability)
读写分离
冷备/热备
异地多活
负载均衡 (Load Balance)
动静分离
集群
分布式
CAP理论
BASE理论
水平扩展/垂直扩展
平行扩容
弹性扩容
状态同步/帧同步
三. 网络通信
连接池
断线重连
会话保持
长连接/短连接
流量控制/拥塞控制
惊群效应
NAT
四. 故障异常
宕机
coredump
缓存穿透/击穿/雪崩
500/501/502/503/504/505
内存溢出/内存泄漏
句柄泄漏
死锁
软中断/硬中断
毛刺
重放攻击
网络孤岛
数据倾斜
脑裂
五. 监控告警
服务监控
全链路监控
服务拨测
节点探测
告警过滤
告警去重
告警抑制
告警恢复
告警合并
告警收敛
故障自愈
六. 服务治理
微服务
服务发现
流量削峰
版本兼容
过载保护
服务熔断
服务降级
服务限流
故障屏蔽
七. 测试方法
黑盒/白盒测试
单元/集成/系统/验收测试
回归测试
冒烟测试
性能测试
基准测试
A/B测试
代码覆盖测试
八. 发布部署
DEV/PRO/FAT/UAT
灰度发布
回滚 (Rollback)
一. 系统开发
高内聚/低耦合
高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。
模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。一个完整的系统,模块与模块之间,尽可能的使其独立存在。
通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。
过度设计
过度设计就是进行了过多的面向未来的设计或者说把相对简单的事情想复杂了,过度追求模块化、可扩展性、设计模式等,为系统增加了不必要的复杂度。
过早优化
过早指的不是在开发过程的早期,而是在还没弄清楚需求未来的变化的走向的时候。你的优化不仅可能导致你无法很好地实现新的需求,而且你对优化的预期的猜测有可能还是错的,导致实际上你除了把代码变复杂以外什么都没得到。
正确的方法是,先有质量地实现你的需求,写够testcase,然后做profile去找到性能的瓶颈,这个时候才做优化。
扩展阅读:https://blog.csdn.net/jinzhencs/article/details/50580650
重构 (Refactoring)
重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
扩展阅读:https://www.jianshu.com/p/520a7d13a7ae
破窗效应
又称破窗理论,破窗效应(Broken windows theory)是犯罪学的一个理论。此理论认为环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉。一幢有少许破窗的建筑为例,如果那些窗不被修理好,可能将会有破坏者破坏更多的窗户。最终他们甚至会闯入建筑内,如果发现无人居住,也许就在那里定居或者纵火。
应用在软件工程上就是,一定不能让系统代码或者架构设计的隐患有冒头的机会,否则随着时间的推移,隐患会越来越重。反之,一个本身优质的系统,会让人不由自主的写出优质的代码。
互不信任原则
指在程序运行上下游的整个链路中,每个点都是不能保证绝对可靠的,任何一个点都可能随时发生故障或者不可预知的行为,包括机器网络、服务本身、依赖环境、输入和请求等,因此要处处设防。
扩展阅读:https://cloud.tencent.com/developer/article/1005918
持久化 (Persistence)
持久化是将程序数据在临时状态和持久状态间转换的机制。通俗的讲,就是临时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库或者本地磁盘中,能够长久保存)。
临界区
临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。
阻塞/非阻塞
阻塞和非阻塞通常形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。而非阻塞允许多个线程同时进入临界区。
同步/异步
通常同步和异步是指函数/方法调用方面。
同步就是在发出一个函数调用时,在没有得到结果之前,该调用就不返回。异步调用会瞬间返回,但是异步调用瞬间返回并不代表你的任务就完成了,他会在后台起个线程继续进行任务,等任务执行完毕后通过回调callback或其他方式通知调用方。
并发/并行
并行(parallel)
指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。
并发(concurrency)
指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。
扩展阅读:https://www.jianshu.com/p/cbf9588b2afb
二. 架构设计
高并发 (High Concurrency)
由于分布式系统的问世,高并发(High Concurrency)通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。
扩展阅读:https://www.jianshu.com/p/be66a52d2b9b
高可用 (High Availability)