【总结】安全与高可用
安全
互联网企业面临最大的问题就是安全问题,无论如何做总会被报出安全问题,因为安全事件导致企业受损的事件屡屡发生,作为一个架构师如何应对安全问题是一个很大的考验,大企业针对安全会成立一个单独的部门,小公司就只能靠架构师自己折腾了。
为什么需要安全?
安全事故:CSDN泄密、携程泄密等等这些事件导致企业股价直线下降,泄密的东西直接可以在黑市交易,黑市针对用户信息的交易已经成为一个产业链,本属于企业资产,就是因为没有安全意识导致信息被其他用利用,让企业受损。鉴于此安全是企业必须重之重关注的事情。
安全如何实现?
常见的安全攻击形式
XSS跨站脚本攻击
SQL脚本注入攻击
CSRF跨站请求伪造
针对各种攻击互联网的高P们也是发掘出了各种应对方案,比如大公司会有专门的安全部门,专门处理安全相关的事情,而且从事安全的同学们待遇等也是水涨船高,安全我理解就是要防止被攻击同时也是要防止内部的人员,对内外都要执行防御。不光是对外,而且这个投入成本也很大,需要各种规范去约束公司的内部人员,是一个吃力不讨好的差事。
高可用
高可用性是指系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
1. 可用性指标
业务通常使用多少个9来衡量网站的可用性。
网站年度可用性指标=(1-网站不可用时间/年度总时间)* 100%。
网站不可用时间(故障时间)=故障修复时间点-故障发现(报告)时间点。
2. 可用性分级
基本可用,两个9,年度停机时间小于88小时
较高可用,三个9,年度停机时间小于9小时
具有自动恢复能力的高可用,四个9,年度停机时间小于53分钟
极高可用性,五个9,年度停机时间小于5分钟
3. 故障分管理
事故级故障。严重故障,网站整体不可用。分值100。
A类故障。网站访问不顺畅,或核心功能不可用。分值20。
B类故障。非核心功能不可用,或核心功能少数用户不可用。分值5。
C类故障。以上故障外的其它故障。分值1。
4. 故障处理流程及考核
客服报告故障或监控系统发现故障(故障开始时间)
提交故障给相关部门接口人
故障接手&处理
故障处理完毕故障归档(故障结束时间)
确认故障归属记入绩效考核
5. 引起故障的原因
硬件故障
软甲bug
系统发布
并发压力
网络攻击
外部灾害
6. 高可用系统的架构
解耦
高内聚低耦合的组件设计原则
面向对象基本设计原则
面向对象设计模式
领域驱动设计建模
隔离
业务与子系统隔离
微服务与中台架构
生产者消费者隔离
虚拟机与容器隔离
异步
多线程编程
反应式编程
异步通信网络编程
事件驱动异步架构
备份
集群设计
数据库复制
CAP原理
Failover(失效转移)
数据库主主失效转移
负载均衡失效转移
失效状态确认
设计无状态的服务
幂等
调用一次和调用多次结果相同,叫做幂等性
有些服务天然幂等,如GET操作,或者设置用户性别为男性等
转账等操作,非幂等性,需要使用交易编号等信息进行有效性校验
事务补偿
传统事务的ACID
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
分布式事务的BASE
基本可用(Basic Availablity)
软状态(Soft-state)
最终一致性(Eventual consistency)
事务补偿,通过执行业务逻辑逆操作,使事务回滚到事务前状态
重试
远程服务可能由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者可以通过重试的方式修复单次调用的故障
上游调用者超时时间要大于下游调用者超时时间之和
重试的接口要有幂等性
熔断
服务响应延迟或失败率增加,导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务的调用
断路器三种状态,关闭、打开、半开
SpringCloud断路器实现Hystrix
限流
在高并发场景下,系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护
限流就是丢弃一部分用户请求,保证整个系统可用,保证大部分用户是可以访问系统的
限流的几种算法
计数器令牌(固定窗口、滑动窗口)
固定窗口。指定时间间隔内,累计访问次数,达到限制,访问丢弃。下一周期开始,访问次数置零。
滑动窗口。固定窗口容易产生前一个周期尾端和后一个周期首端内访问集聚,超过系统处理能力。通过将时间周期分为N个小周期,分别记录每个小周期内的访问次数,并且根据时间滑动删除过期的小周期
令牌桶算法
以固定的速度向令牌桶中增加令牌,直到令牌桶满。
请求到达时,向令牌痛请求令牌,如获取到令牌则处理请求,否则触发限流策略
漏桶算法
请求到达时,直接放入漏桶,如当前容量已达到限流值则进行丢弃。
漏桶以固定的速率释放访问请求,直到漏桶为空
自适应限流
没有提前的人工评估,便没有提前的评估过时和人的评估疏漏/错误。
实时自动评估QPS
业务流量的不确定性与技术方案的自适应性天生一对
降级
部分非核心功能,给系统带来较大压力
高并发时,进行这些非核心高负荷服务,给系统带来重压,使系统的处理能力更加恶化
在系统高并发时,关掉这些非核心高负荷服务,释放系统资源。
比如,淘宝双11时,关闭收货和评价功能。
异地多活
单个数据中心,可能遭遇地震、火灾、停电等天灾人祸,系统依然不可用。
异地多机房部署,改善用户体验和提高系统处理能力,某一机房不可用,其它机房扔能提供服务。
异地多活动的难点在于数据是否一致
总结
安全和高可用都是高投入的,需要做好balance。
评论