架构师 0 期 | 导致系统不可用的那些事儿
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
导致系统不可用原因
最次的一种情况,系统有bug,崩了,服务直接挂了。慢SQL、内存泄露等。
部署不规范,发布导致系统宕机。比如关闭了一台缓存服务器,造成缓存雪崩,白天系统根本无法重启,只能等到半夜,使用人数少了之后,才能重启成功。
大规模并发,造成的系统过载。
服务器配置过低,硬盘满了,比如:日志把硬盘写满了。
被黑客攻击。 SQL注入,XSS攻击,执行恶意脚本等。
硬盘老化、机房断电。
自然灾害,不可抗拒的力量。台风、洪水直接摧毁机房。电缆被挖断等硬件故障。
保障系统高可用的方案
做好代码设计、评审、review、测试等工作,减少系统bug。
规范部署流程,部署流程尽量自动化。采用微服务,减少系统直接的耦合。发现问题,及时回滚。避免大面积崩溃,把影响控制在最小范围内。使用负载均衡,如果部分服务器挂了,有其他服务器可以顶上。采用灰度发布等。
引入系统监控系统,实时监控系统关键指标。如果有负载过高指标计时通知,发邮件、发短信、打电话。及时进行处理。
根据压测数据,合理进行硬件设备冗余。
引入安全策略,防攻击。比如:在Java的数据库的访问层使用 PrepareStatement,防止SQL注入。比如:在网关中引入Web应用防火墙。
使用多机房、多数据中心。
异地多活。当一个城市的机房有故障,能够切换到另一个城市的机房。
写一个用户密码验证函数
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
评论