# 稳定性:系统高可用的 11 个方案技巧
作者:Tom哥
公众号:微观技术
博客:https://offercome.cn (opens new window)
人生理念:知道的越多,不知道的越多,努力去学
大型互联网架构设计,讲究一个四件套 组合拳玩法,高并发 、高性能 、高可用 、高扩展 。
如果能掌握这四个方面,应付大厂面试以及日常工作中的架构方案设计基本不是什么难题。
今天,Tom哥就带大家学习下高可用 都有哪些设计技巧?
# 一、系统拆分
有句古话 "牵一发而动全身"。
面对一个庞然大物,如果没有一个合理的分工分层。任何一个小小失误都会被无限放大,酿成巨大灾难。
万物相通,回到我们的软件架构。
早前的系统都是单体系统,比如电商业务,会员、商品、订单、物流、营销等模块都堆积在一个系统。每到节假日搞个大促活动,系统扩容时,一扩全扩,一挂全挂。只要一个接口出了问题,整个系统都不可用。
“鸡蛋不能放在一个篮子里”,这种连带风险换谁都承受不起。
因此,系统拆分 成了更多人的选择。
慢慢的就有了我们现在看到的微服务 架构,将一个复杂的业务域按DDD的思想拆分成若干子系统,每个子系统负责专属的业务功能,做好垂直化建设,各个子系统之间做好边界隔离,降低风险蔓延。
# 二、解耦
软件开发有个重要原则“高内聚、低耦合”。
小到接口抽象 、MVC 分层 ,大到 SOLID 原则 、23种设计模式 。核心都是降低不同模块间的耦合度,避免一处错误改动影响到整个系统。
就以开闭原则 为例,对扩展是开放的,对修改是关闭的。随着业务功能迭代,如何做到每次改动不对原来的旧代码产生影响。
Spring 框架给我们提供了一个很好的思路,里面有个重要设计AOP ,全称(Aspect Oriented Programming),面向切面编程。
核心就是采用动态代理技术,通过对字节码进行增强,在方法调用的时候进行拦截,以便于在方法调用前后,增加我们需要的额外处理逻辑。 当然还有一个重要思路就是事件机制 ,通过发布订阅模式 ,新增的需求,只需要订阅对应的事件通知 ,针对性消费即可。不会对原来的代码侵入性修改,是不是会好很多。