架构师训练营第11周作业 高可用 加密

导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

引起系统故障的原因大致可以分为硬件原因、软件原因、外部原因三类。

  • 硬件原因:主要是指基础设施故障,例如硬件故障,包括硬盘、内存、CPU、电源故障等,以及网络故障。
  • 软件原因:主要包括软件bug、并发阻塞、黑客攻击等。
  • 外部原因:主要指不可控因素和不可抗力因素,例如断电、自然灾害、光缆断路、审查限制等。

保障系统高可用的方案大致分为架构方案、运维方案、监控方案三类。

架构方案

  • 解耦
    设计高内聚、低耦合的系统组件,遵循面向对象设计原则、设计模式,以领域驱动设计指导领域建模,降低系统复杂度,提升可靠性和故障修复速度
  • 隔离
    从部署上将不同的子系统分离开,使用微服务架构、中间件、容器等技术,从系统层面控制住故障的影响范围。
  • 异步
    通过并发编程、反应式编程、异步通信、消息队列、事件驱动等手段减少系统阻塞的情况,避免由于网络性能的原因带来的系统不可用。
  • 备份
    对特定的子系统和服务进行集群化部署,通过负载均衡分发并发请求,减轻系统的压力。
  • 失效转移
    在备份的前提下,当集群中某台服务器出现故障,需要将流量指向到其他服务器,在数据库集群中还涉及到主服务器的选举。
  • 幂等
    幂等性是设计无状态服务的必要条件,幂等服务在失效后进行重试不会导致数据不一致。
  • 事务补偿
    对于传统的数据库事务应当满足ACID原则,而对于分布式事务应当满足BASE原则,在事务处理失败的时候,需要通过事务补偿,即业务逻辑上的逆操作对事务进行回滚。
  • 重试
    由于阻塞、网络故障等原因造成的短时间请求失败可以通过重试来解决,需要注意上游调用者的超时时间要大于下游调用者的超时时间之和。
  • 熔断
    当某个服务出现故障时,继续调用这个服务会增加系统资源消耗,因此应当使用断路器阻断对该服务的调用。
  • 限流
    在并发量激增的情况下,为了避免系统被压垮,需要对部分请求进行限制,只允许一部分流量进入,这样虽然会对部分用户造成影响,但比整个服务失去响应要好。
  • 降级
    在系统高并发的情况下,可以关闭一些非核心的业务和功能,集中力量保障核心服务的正常运转。
  • 异地多活
    异地多活针对的是整个数据中心不可用,是对数据中心的异地部署,并且每个数据中心都可以独立提供完整服务。

运维方案

  • 发布
    在发布代码更新的时候,需要关停服务、更新代码、重新启动这几个步骤,因此会造成服务的短时不可用,为了避免对用户造成感知上的影响,就需要在前期以集群+负载均衡的形式进行服务部署,通过调整负载均衡路由,分批下线服务并进行更新、重启,然后再重新上线。
    为了避免某次发布带来问题后需要全盘回滚,通常会采用灰度发布的方式,即分批次地对服务和服务器进行更新,每一批次之间间隔一段时间,上一批次没有出现问题的情况下再进行下一批次。
  • 自动化测试
    为了减少人工测试的繁琐和疏忽,自动化测试技术可以在更新发布后对整个应用进行回归测试,尽可能减少bug流传到生产环境的概率。
  • 持续部署
    按照持续集成、持续交付、持续部署三个步骤逐步搭建起自动化运维流程和系统,只需要极少的人工干预就可以完成代码更新的发布、测试和部署工作,确保系统的质量。

监控方案

  • 日志收集与分析
    对用户行为、业务操作、系统性能等指标进行实时的数据记录和分析。
  • 自动控制
    根据日志监控和分析结果自动发现故障并执行相应的失效转移、扩容、限流、熔断、降级等操作。

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

分析

本题描述中,输入的参数已经包含了密码的密文,因此无需考虑密文的查询或解密过程,只需验证明文加密之后是否与密文一致即可。

在实际的软件系统中,验证密码这一运算应当在客户端完成,服务端无需知道密码明文是多少,因此题意应当指的是服务端返回查询到的密码密文后,客户端通过相应函数验证用户输入的密码明文是否正确。这样的设计可以确保网络上传输的仅仅只是请求ID和密码密文,明文不会直接在网络上传输,而且全程只需要对密码明文进行加密操作,而无需揭秘操作,因此可以使用单向散列算法来进行加密。但是考虑到“撞库”破解的风险,不能直接使用默认的加密运算,而是需要在运算中设置一些变化。

代码

from hashlib import sha256


def check_password(uid, password, cipher):
    if encrypt(uid, password) == cipher:
        return True
    return False


def str_to_hex(string):
    string_hex = ''
    for i in range(len(string)):
        string_hex += hex(ord(string[i]))[2:]
    return string_hex

def encrypt(uid, password):
    salt = 'magic words'
    combined_string = str(hex(uid)) + str_to_hex(salt) + str_to_hex(password)
    return sha256(combined_string).hexdigest()


def test():
    print check_password(155, 'P@ssWord', '1cdf025ea9e37482ea93266570cb4ef5fbd96546bf41e400635493d5d99705ca')
    print check_password(155, '123!@#qweASD', '1cdf025ea9e37482ea93266570cb4ef5fbd96546bf41e400635493d5d99705ca')


test()

# 结果:
# True
# False
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356