【架构师训练营第 1 期 11 周】 作业
【架构师训练营第 1 期 11 周】 作业
作业一:
(至少完成一个)
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
导致系统不可用的原因可以分为以下几种类型:
硬件故障:比如服务器宕机、硬盘损坏之类的;
软件bug:比如空指针、查询不走索引导致请求阻塞、代码逻辑错误问题;
系统发布:合并冲突导致代码异常、无法回滚到正确的分支;
并发压力:多线程处理推送出现异常导致OOM、库存超卖、并发过大系统阻塞无法响应;
网络攻击:DDOS攻击导致正常请求无法进入、被入侵篡改首页或添加脚本;
外部灾害:传说中的雷劈网卡、挖掘机挖断光纤、机房空调坏了过热宕机;
保障系统稳定高可用的方案针对上面的各种原因而产生的:
一、从应用代码架构的层面
1.解耦:
高内聚、低耦合的组件设计原则
面向对象基本设计原则
面向对象设计模式
领域驱动设计建模
2.隔离:
业务与子系统隔离
微服务与中台架构
生产者消费者隔离
虚拟机与容器隔离
3.异步:
多线程编程
反应式编程
异步通信网络编程
事件驱动异步架构
4.备份:
集群设计
数据库复制:CAP原理
失效转移(Failover)
数据库主主失效转移
负载均衡失效转移
5.故障失效转移思路
根据系统特性设置故障判断条件,并且做好故障转移的方案。
设计无状态的服务
6.幂等
事务补偿:
传统事务的ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
分布式事务的BASE:基本可用(Basic Availability)、软状态(Soft-state)、最终一致性(Eventual consistency)
事务补偿:通过执行业务逻辑逆操作,使事务回滚到事务前状态
7.故障处理手段
重试:注意上下游超时时间设置
熔断:三种状态:关闭、打开、半开。
限流:计数器算法、令牌桶算法、漏桶算法
自适应限流
降级
异地多活
二、从系统运维的角度
1.规范代码版本控制
使用Git或者SVN控制代码;
分支开发,主干发布,而且发布后打上每个稳定版的target,方便回滚;
规范代码提交规范,减少合并代码带来的风险;
2.引入持续部署工作流程
持续部署:持续集成->持续交付->持续部署
自动化部署:Jenkins
自动化代码扫描:Sonar
自动化测试:Selenium
3.预发布验证
配置预发布环境进行测试
灰度发布上线,逐步上线;
4.监控
网站运行监控:用户行为日志收集、服务器性能监控、
监控管理:报警、自动控制
6.责任落实
引入故障分机制,确保每个人都对故障负责,并纳入绩效考核
最终引用老师的话总结
高可用的价值观:
保持简单,使问题易于发现,快速解决。
目标明确,解决特定环境下的具体问题。
价值回归,成本收益要合理。
============================分割线===============================
使用JAVA进行密码校验
校验类
版权声明: 本文为 InfoQ 作者【Bear在挨踢】的原创文章。
原文链接:【http://xie.infoq.cn/article/d66ff3db4542e6b89c858ee7c】。文章转载请联系作者。
评论