架构师训练营 -- 第 11 周作业

用户头像
stardust20
关注
发布于: 2020 年 08 月 25 日
  • 导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

系统不可用的原因:

硬件故障

软件bug

系统发布

并发压力

网络攻击

外部灾害

保障系统稳定高可用的方案有哪些:

解耦: 高内聚低耦合的系统设计,出问题时更易排查,也能更好的进行隔离防止相互影响和进行横向扩容

隔离:相互隔离,防止互相影响

异步:异步调用,不会阻塞在某个异常的环节

备份:冗余备份,防止单点故障

Failover(失效转移):当某个服务不可服务时,可以转移到可服务的节点

幂等: 执行多次的结果是一样的

事务补偿:最终一致性

重试:偶尔的实败时,进行重试,如网络波动等重试后可恢复

熔断:出现频繁出错时,熔断一段时间,不再发起请求

限流:对超过服务容量的请求进行限制,防止系统因为负载过高而服务异常

降级:当服务压力过大,适当的舍弃掉部分不重要的功能

异地多活:在多个地方机房同时部署服务,当某地机房异常时,可以由另外的机房进行服务

  • 请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。

import hashlib

FIXED_VALUE = "xxxsdfdsdfa"

def md5(data):
hs = hashlib.md5()
hs.update(str(data).encode("utf-8"))
return hs.hexdigest()

def checkPW(user_id, pass_word, secret):
u"""
校验方法:
secret = md5(user_id + pass_word + FIXED_VALUE)
:param user_id: 用户ID
:param pass_word: 密码明文
:param secret: 密码密文
:return: true 校验通过
false 校验不通过
"""
return secret == md5(user_id + pass_word + FIXED_VALUE)

if __name__ == "__main__":
user_id = '1233'
pass_word = '123456'
secret = '86413efe3f43d9f690fe4b1313016c6a'
result = checkPW(user_id, pass_word, secret)
print(result)




用户头像

stardust20

关注

还未添加个人签名 2019.11.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 -- 第11周作业