架构训练营第十一周作业
作业一:
第一题
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
解答
导致系统不可用主要有以下几种原因:
硬件故障。例如内存损坏、硬盘损坏、网络问题等等
软件 bug。开发的代码中存在漏洞,触发问题时会使一个到多个节点崩溃
系统发布。系统在发布的时候,原有服务进程会被杀掉。此时就是没有服务的状态,导致不可用
并发压力。当并发超过了系统承受上限,系统会变慢,甚至崩溃,停止响应
网络攻击。例如 XSS 攻击,SQL 注入攻击等,被攻击者破坏了服务器,服务停止
外部灾害。当发生例如火灾、地震等灾害,导致服务器损坏的情况
保障系统稳定高可用的方案:
高可用设计
解耦:贯彻高内聚、低耦合的设计原则,面向对象的设计原则;还可以利用设计模式选型,利用 DDD 进行设计等。
隔离:业务与子系统隔离;微服务部署,中台架构;生产消费者隔离;虚拟机、容器化
异步:利用多线程编程、反应式编程、异步通信、事件驱动异步架构
备份:使用服务器集群;使用数据库复制;结合使用失效转移;
失效转移:包括数据库主主失效转移;负载均衡失效转移;设计无状态服务
幂等:一次调用和多次调用结果相同,保证失效转移能够得到正确结果
事务补偿:在不能幂等的情况下,依靠传统事务的 ACID 特性保证事务;对于分布式事务,可以通过执行业务逻辑的逆操作,实现事务回滚
保障高可用的其他手段
重试:多次重试,可以提高一些因为网络等原因产生的暂时不可用问题的可用性;要注意上游调用者超时时间要大于下游所有调用超时时间之和
熔断:当某个服务出现故障时,为了避免级联失效影响其调用者,进而导致整个系统不可用,可以用断路器阻断对故障服务的调用
限流:当并发大于承受能力时,可以丢弃部分请求,保证整个系统可用;具体的限流算法有计数器算法、令牌桶算法、漏桶算法等;还可以使用自适应限流
降级:在高并发的情况下,可以关闭一些非核心功能(系统降级),保证核心功能的可用
异地多活:在不同地点建立多个数据中心,保证在某地机房不可用的情况下,系统仍然可用
第二题
请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。
解答
用 Go 语言实现。我设计了 3 个函数,分别是
由字符串生成 md5 哈希的函数 encryptPW:
使用用户名+明文密码生成密码,并将密码保存入键值字典的 setPW。
检查用户名,明文密码,密文密码是否对应的 checkPW。
入口 main 函数
作业二:
根据当周学习情况,完成一篇学习总结
解答
整理为以下脑图:
版权声明: 本文为 InfoQ 作者【一期一会】的原创文章。
原文链接:【http://xie.infoq.cn/article/714793b4c3d3c4879e86c6320】。文章转载请联系作者。
评论