写点什么

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

用户头像
Jam
关注
发布于: 2020 年 08 月 27 日

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

系统不可用的原因:

硬件故障

软件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):
return secret == md5(user_id + pass_word + FIXED_VALUE)

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



总结

组件设计原则

降低软件复杂度,拆分成更小粒度的组件

内聚性原则

1.组件内聚原则

复用发布等同原则;复用粒度与发布粒度一致;版本号:主版本号.次版本号.修订号

2.共同封闭原则

同时修改、为同一目的而修改的类放到一个组件中

3.共同复用原则(接口隔离原则)

不要依赖不需要的功能

耦合原则

1.无循环依赖原则

2.稳定依赖原则;不应该依赖一个比自己更不稳定的组件

3.稳定抽象原则;稳定的组件时抽象的

组件的边界与依赖关系涉及技术、业务、人员的因素

安全架构

网络攻击

1.XSS 跨站脚本攻击

反射型XSS:用户自己去点击攻击链接才能触发XSS代码

存储型XSS:恶意代码存储在服务器中,每当有用户访问该页面的时候都会触发代码执行

防御手段:危险字符转义

2.SQL注入攻击

sql预编译参数绑定

3.CSRF 跨站点请求伪造

表单Token

Referer

验证码

4.其他问题漏洞

返回的错误码

html注释

文件上传

路径遍历

如何解决安全问题

WEB应用防火墙 ModSecurity

网站安全漏洞扫描



信息加密技术及密钥安全管理

1.加密算法

单向散列加密

明文->salt->密文

对称加密

明文->密钥-(加密算法)->密文->密钥-(解密算法)->明文

非对称加密

明文->加密密钥-(加密算法)->密文->解密密钥-(解密算法)->明文

2.密钥安全管理与加解密服务系统架构



密钥多人保管(多地存储)

3.反垃圾邮件



贝叶斯分类算法:特征值、概率

布隆过滤器黑名单

4.电子商务风控

规则引擎

机器学习

高可用

可用性指标

例子:99.99% 一年不可用时间大约53分钟

故障分管理

不同故障级别设置不同分数(先解决故障,再进行故障复盘,分析故障级别,确定责任者)

故障处理及考核



故障原因

网络攻击

硬件故障

软件BUG

系统发布

并发压力

外部灾害

高可用架构

解耦:设计原则、模式;建模

隔离:系统间隔离

异步:多线程、反应式、异步通信、事件驱动

备份:集群、数据库复制

失效转移:

幂等

事务补偿:ACID、BASE;代码逻辑逆操作

重试

熔断

限流:计数器、令牌桶、漏桶

自适应限流

降级

异地多活

高可用系统运维

发布:集群、负载均衡

自动化测试:selenium

自动化部署

持续部署

预发布验证

代码版本控制

自动化发布

灰度发布

网站运行监控

监控数据采集

用户行为日志收集

服务器性能监控

业务数据报告

监控管理

监控系统架构



用户头像

Jam

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签,便于分类
2020 年 08 月 27 日 09:50
回复
没有更多了
架构师训练营 - 第 11 周作业