第十一周作业
一、导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
列一些我碰到的导致系统不可用的原因:
1、服务器硬盘资源不足,同时又缺少监控,排查了很久最终发现是硬盘满了。
2、Redis内存写满。有些key么有失效时间,没有及时清理无用的值,没有预估资源的增长情况。
3、并发压力。系统中某个时间并发增大,使系统负载较高,响应慢,无法处理后续请求。
4、微服务超时时间比较长,某个功能执行缓慢等待超时,越来越多请求进来后,占满了线程池。
5、代码bug,执行一个更新操作,某些场景导致不带where条件,全表更新。
6、数据库负载高,查询缓慢。
7、数据库死锁。
高可用方案:
解耦、拆分子系统分布部署。
异步。多线程编程。事件驱动异步架构。
备份。集群设计,数据库复制。
失效转移。负载均衡失效转移,数据库实现转移。(一般通过配置服务器进行心跳管理,确认是否失效,进行故障转移)
熔断。
限流。计数器算法。令牌桶算法。漏桶算法。自适用限流(根据服务器负载动态限流)。
降级。高并发时,将非核心功能下线。
异地多活。
二、请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
使用Md5进行加密。加密时将明文密码+用户id同时进行MD5,保存加密结果,防止用户密码简单,被暴力破解。验证密码时,进行同样的加密与数据库中保存的密码进行对比。
评论