架构师训练营 - 第十一周
作业一:
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
引起系统不可用的原因有如下几个可能性:
硬件故障
软件 Bug
系统发布
并发压力
网络攻击
外部灾害
为了尽量避免或者解决以上问题,通常我们采用的手段如下:
对系统解耦,降低系统的复杂度,这样可以减少 bug 提升系统可维护性
高内聚低耦合的设计原则
面向对象设计和实现我们的程序
通过领域模型来设计我们系统
对解耦后的系统进行隔离,这样防止单个系统出问题后影响整个系统.隔离包括逻辑和物理的隔离
消息队列隔离
中台架构
虚拟机容器隔离
业务系统隔离->微服务
采用异步的方式进行编程,降低系统之间的耦合度,模块出故障不会影响其他模块故障
对系统采用集群的方式部署,单台服务器不可用可以转发流量到其他服务器上.
也就是失效转义
此时注意集群的时候要注意
消息的幂等
事务补偿
建立重试机制
如果服务出现故障,要采用熔断手段方式控制高并发的时候系统的可用度
对高并发还有限流手段.
计数器,有固定窗口和滑动窗口两种
令牌桶
漏桶算法
自适应限流
降级手段来保护核心功能
通过异地多活来保证大范围的可用性
作业二:
根据当周学习情况,完成一篇学习总结
组件设计原则
组件内聚原则
复用发布等同原则
共同封闭原则
共同复用原则
组件耦合原则
无循环依赖原则
稳定依赖原则
稳定抽象原则
常见攻击方式及防御方案
XSS 攻击:通过消毒使脚本失活
SQL 注入攻击:使用 PreparedStatement 进行 SQL 脚本预编译
CSRF 攻击:使用表单 token、验证码
Error Code:配置 Web 服务器参数,跳转 500 页面
HTML 注释:code review,避免该漏洞
文件上传:设置上传文件类型白名单、修改文件扩展名、使用专门的存储
路径遍历:使用动态参数,不包含文件路径信息
信息加密技术
单项散列加密
对称加密
非对称加密
高可用系统的度量
可用性指标:几个九
故障分管理
增加各个岗位角色的高可用意识
引起故障的原因
硬件故障
软件 bug
系统发布
并发压力
网络攻击
外部灾害
高可用系统的架构
解耦
高内聚、低耦合的组件设计原则
面向对象基本设计原则
面向对象设计模式
领域驱动建模
隔离
业务与子系统隔离
微服务与中台架构
生产者消费者隔离
虚拟机与容器隔离
异步
多线程编程
反应式编程
异步通信网络编程
事件驱动异步架构
备份
集群设计
数据库复制
失效转移
幂等
事务补偿
重试
熔断
限流:计数器算法、令牌桶算法、漏桶算法
自适应限流
降级
异地多活
高可用系统的运维
发布
自动化测试
自动化部署
代码版本控制
自动化发布
灰度发布
网站运行监控
监控数据采集
用户行为日志收集
服务器性能监控
业务运行数据报告
监控管理
高可用的价值观
保持简单,使问题易于发现,快速解决
目标明确,解决特定环境下的具体问题
价值回归,成本收益要合理
评论