写点什么

架构师训练营第 2 期 第 11 周总结

用户头像
月下独酌
关注
发布于: 2021 年 01 月 03 日

高可用

要能快速暴露问题。

目标明确,到底要什么样的高可用,具体的高可用目标会有相对应的解决方法。

成本与收益的平衡。


可用性指标

业界用多少个 9 衡量网站可用性,大部分网站目标是维持在 99.99%

可用性指标通常用年度作为时间单位

网站年度可用性指标 = (1-网站不可用时间/年度总时间)* 100%

故障时间 = 故障修复时间点 - 故障发现时间点


高可用故障考核体系

故障分管理(权重),比如每个小组分发一定的积分,作为容许出现故障的场景,出现故障进行相应的扣除。

事故级故障(100): 网站不可用

A 类故障(20):访问不流畅,核心功能不可用

B 类故障(5):非核心功能不可用,或核心功能上的不可用影响到了少数用户

C 类故障(1): 以上故障以外的故障

引起故障的原因:硬件故障、软件 BUG,系统发布,并发压力,网络攻击、外部灾害


解耦

高内聚、低耦合的组件设计原则

面向对象基本设计原则

面向对象的设计模式

领域驱动设计建模


隔离

隔离首先依赖于解耦,按业务层面上划分,在物理层面上(部署在不同的服务器)实现隔离

具体有

业务与子系统隔离:部分子系统的崩溃不能去影响到其他不相关的功能。

微服务与中台架构:子系统更细粒度的拆分,且能做集群,能容灾备份,即使挂了部分微服务,不影响服务的整体可用,不影响到用户。

生成者与消费者隔离:生产者与消费者部署在不同的服务器上,使用分布式消息队列(隔离开),如果一方出现故障不会影响到另一方。

虚拟机与容器隔离:不同的业务可部署在不同的虚拟机里,如果某个虚拟机内的进程抛出了会停止运行的 BUG(比如 OOM),则不会影响其他虚拟机上的业务,容器同理。


异步

多线程编程:单一线程的故障不影响其他线程,也是把故障隔离开

反应式编程:依赖异步消息传递机制,组件解耦,故障单独处理。

异步通信网络编程:避免网络阻塞降低网络可用性

事件驱动异步架构:利用了消息队列达成生成者与消费者隔离的效果。


备份

集群设计:多台服务器,用来应对部分服务器宕机的场景

数据库复制:应付数据库压力过大,以及数据库服务器宕机等场景,

失效转移:当系统监控到某台服务器宕机,要把前往该服务器的请求,转移到其他服务器上。

比如数据库主主失效转移,负载均衡失效转移。


幂等

因网络波动、调用、失效转移等会出现操作命令重发的场景,要小心考虑是否需要进行幂等性处理。


事务补偿

1、在单台服务器以及单台数据库服务器的操作时,如出现问题,通过传统事务回滚到事务前的状态

2、在分布式环境下,可能业务操作在不同的服务器,不同的数据库连接,甚至不同的数据库,分布式事务有时候过于繁重,此时需要依赖业务逻辑上的逆操作,来补偿。


重试

当出现长时间未收到请求时,上级调用者可能需要重新调用。同时,上级的超时时间要大于下级操作时间之和。


熔断

服务(上某个方法)出现故障到一定程度,如单位时间内出错达到 50%,宣告该服务不可用,熔断器打开,调用该方法上的熔断方法去执行。过段时间尝试发送请求,判断是否维持熔断器开关打开状态。


限流

系统访问量超过系统承受能力,需要对请求进行限制,即需要抛弃部分用户请求,影响部分用户的使用。限流的方法:计数器算法(固定窗口、滑动窗口)、令牌桶算法,漏桶算法。

自适应限流,自动采集 QPS,控制流量限制指标,保持性能的最合适的场景,并且有利于代码的测试与维护。

降级

非核心的功能可能有承担较大的压力,当整体系统压力上来时,可以把这些功能占用的资源让给其他功能。


异地多活

因自然灾害或生产事故等不可抗力导致的不可用,异地备份系统维持系统整体可用。难度时保持数据的同步时,成本与性能的取舍。


更新集群服务步骤


自动化测试

Selenium 可完成 WEB 测试与浏览器兼容测试


自动化部署

开发者提交代码,被检测到,运行单元测试,通过后编译组装一个可部署的文件,重新部署/创建开发环境,进行集成测试,重新部署/创建生产环境。


预发布验证

通过自动化验证,回归验证,还是担心会出现问题,比较开发环境与线上不同。那么可以准备一个预发布环境,配置是真实的环境,但入口只开放给公司内部。


代码版本控制

主干开发,分支发布: 代码修改都在主干上进行,需要发布,拉取分支,分支出现 bug,修改分支,成功后合回主干。

分支开发,主干发布:主干上拉取分支,分支开发测试完上线,再合回主干。容易出现代码冲突,所以分支要经常从主干上拉取代码


自动化发布

提交发布请求,QA、安全、DBA 确认,代码合并,预发布验证,正式发布


灰度发布

不一次性发布完所有的服务器,分批次发布,先观察几天,如有故障,回滚的量可控,不至于整体回滚。


网站运行监控

实时监控指标完善,并有快速报警机制,最好有故障邮件、短信等通知值班人员。

用户行为日志收集:可以用来个性化营销,方法有服务端日志收集,客户端浏览器日志收集。

自动控制:如上面提及过的熔断与限流等方法


用户头像

月下独酌

关注

还未添加个人签名 2019.07.22 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第2期 第11周总结