架构师训练营第十一周学习笔记
安全架构
常见攻击方式与防御手段
XSS 攻击:对 HTML 中的危险字符转义
SQL 注入攻击:使用预编译
CSRF 攻击:使用验证码,或增加 referer check
加密算法
单向散列加密
对称算法
非对称加密
专门的秘钥管理与加解密服务
应用
反垃圾邮件:
通过批量已分类的邮件进行训练
贝叶斯分类算法
布隆过滤器:用于过滤黑名单,可能会将正常邮箱误判为垃圾邮箱,不会漏判
电子商务风控:
规则引擎
机器学习
人工审核
故障原因及应对方案
导致系统不可用的原因有很多,从用户侧到系统侧,再深入系统内部,链路上的各个环节都可能出现问题从而导致系统不可用,而出问题的原因又多种多样,包括有意的和无意的。除此之外,还有地震、火灾等可能的客观因素导致系统不可用。
可能的原因:
硬件故障:机器的磁盘、内存坏了,系统就没法运行了
软件 bug:软件有 bug,系统可用性自然也就受影响;可能有自身的软件故障,也可能是因为依赖的其他系统的有问题
系统发布:比如将错误的版本发布到线上
并发压力:系统的接收的压力超过了系统的最大处理能力,从而把系统压垮
网络攻击:有人恶意攻击,修改了系统内的数据,或删除了数据库表,或者把光线挖断
外部灾害:地震、火灾等自然灾害,导致机房受损
保证高可用的方案:
冗余:服务不要出现单点,以集群的形式搭建;必要的话,要做数据中心的异地多活
备份:数据要定时备份,避免数据丢失
隔离:系统与系统之间要尽量隔离,不通过的组件、不同的层里的故障,不要蔓延到其他组件和层。这和最后的「解耦」有一定的相似之处
限流:对流量要有主动控制的能力,接收的流量要在系统的处理能力之内
熔断:当服务出现故障,继续调用这个服务会造成调用者阻塞,是系统状态进一步恶化,这种情况下需要使用熔断器阻断对故障服务的调用
降级:有一些非核心的业务也会对系统造成很大压力,所以在系统压力大的时候,可以选择性地关闭非核心业务
异步:对于大并发、耗时的操作,可以以异步的形式处理,处理完成后再通知用户
失效转移:当服务出现故障时,要将流量从故障实例切换到其他实例上,比如数据库的主主备份
重试:在服务请求失败时,增加重试的机制,尽量保证请求能被成功处理
幂等:这一点应该是「要求」,而不是「方案」。有些业务特性要求某些操作多次执行,结果保持一致。比如请求从一个故障节点切换到了其他节点,请求会被重新处理,要保证在重复执行的情况下,结果是一致的,就像只执行了一遍一样。
解耦:从服务间的依赖关系,到代码层面的高内聚低耦合,都要尽量做到解耦
事务补偿:在事务失败的条件下,通过执行业务的逆操作,使事务回到执行前的状态
运维
负载均衡,分批发布
自动化测试
自动化部署
持续部署:持续集成、持续交付、持续部署
预发布验证:和线上服务器的唯一不通过就是没有在负责均衡服务器上,不接收线上流量
代码版本控制
自动化发布
灰度发布
运行监控
版权声明: 本文为 InfoQ 作者【一马行千里】的原创文章。
原文链接:【http://xie.infoq.cn/article/7c0d506d48b7b8f0736cf04ea】。文章转载请联系作者。
评论