写点什么

【总结】安全与高可用

用户头像
魔曦
关注
发布于: 2020 年 08 月 26 日
【总结】安全与高可用

安全

互联网企业面临最大的问题就是安全问题,无论如何做总会被报出安全问题,因为安全事件导致企业受损的事件屡屡发生,作为一个架构师如何应对安全问题是一个很大的考验,大企业针对安全会成立一个单独的部门,小公司就只能靠架构师自己折腾了。

为什么需要安全?

安全事故:CSDN泄密、携程泄密等等这些事件导致企业股价直线下降,泄密的东西直接可以在黑市交易,黑市针对用户信息的交易已经成为一个产业链,本属于企业资产,就是因为没有安全意识导致信息被其他用利用,让企业受损。鉴于此安全是企业必须重之重关注的事情。

安全如何实现?

常见的安全攻击形式

  1. XSS跨站脚本攻击

  2. SQL脚本注入攻击

  3. CSRF跨站请求伪造

针对各种攻击互联网的高P们也是发掘出了各种应对方案,比如大公司会有专门的安全部门,专门处理安全相关的事情,而且从事安全的同学们待遇等也是水涨船高,安全我理解就是要防止被攻击同时也是要防止内部的人员,对内外都要执行防御。不光是对外,而且这个投入成本也很大,需要各种规范去约束公司的内部人员,是一个吃力不讨好的差事。

高可用

高可用性是指系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

1. 可用性指标

业务通常使用多少个9来衡量网站的可用性。

网站年度可用性指标=(1-网站不可用时间/年度总时间)* 100%。

网站不可用时间(故障时间)=故障修复时间点-故障发现(报告)时间点。

2. 可用性分级

  1. 基本可用,两个9,年度停机时间小于88小时

  2. 较高可用,三个9,年度停机时间小于9小时

  3. 具有自动恢复能力的高可用,四个9,年度停机时间小于53分钟

  4. 极高可用性,五个9,年度停机时间小于5分钟

3. 故障分管理

  1. 事故级故障。严重故障,网站整体不可用。分值100。

  2. A类故障。网站访问不顺畅,或核心功能不可用。分值20。

  3. B类故障。非核心功能不可用,或核心功能少数用户不可用。分值5。

  4. C类故障。以上故障外的其它故障。分值1。

4. 故障处理流程及考核

  1. 客服报告故障或监控系统发现故障(故障开始时间)

  2. 提交故障给相关部门接口人

  3. 故障接手&处理

  4. 故障处理完毕故障归档(故障结束时间)

  5. 确认故障归属记入绩效考核

5. 引起故障的原因

  • 硬件故障

  • 软甲bug

  • 系统发布

  • 并发压力

  • 网络攻击

  • 外部灾害

6. 高可用系统的架构

  • 解耦

  • 高内聚低耦合的组件设计原则

  • 面向对象基本设计原则

  • 面向对象设计模式

  • 领域驱动设计建模

  • 隔离

  • 业务与子系统隔离

  • 微服务与中台架构

  • 生产者消费者隔离

  • 虚拟机与容器隔离

  • 异步

  • 多线程编程

  • 反应式编程

  • 异步通信网络编程

  • 事件驱动异步架构

  • 备份

  • 集群设计

  • 数据库复制

  • CAP原理

  • Failover(失效转移)

  • 数据库主主失效转移

  • 负载均衡失效转移

  • 失效状态确认

  • 设计无状态的服务

  • 幂等

  • 调用一次和调用多次结果相同,叫做幂等性

  • 有些服务天然幂等,如GET操作,或者设置用户性别为男性等

  • 转账等操作,非幂等性,需要使用交易编号等信息进行有效性校验

  • 事务补偿

  • 传统事务的ACID

  • 原子性(Atomicity)

  • 一致性(Consistency)

  • 隔离性(Isolation)

  • 持久性(Durability)

  • 分布式事务的BASE

  • 基本可用(Basic Availablity)

  • 软状态(Soft-state)

  • 最终一致性(Eventual consistency)

  • 事务补偿,通过执行业务逻辑逆操作,使事务回滚到事务前状态

  • 重试

  • 远程服务可能由于线程阻塞、垃圾回收或者网络抖动,而无法及时返还响应,调用者可以通过重试的方式修复单次调用的故障

  • 上游调用者超时时间要大于下游调用者超时时间之和

  • 重试的接口要有幂等性

  • 熔断

  • 服务响应延迟或失败率增加,导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务的调用

  • 断路器三种状态,关闭、打开、半开

  • SpringCloud断路器实现Hystrix

  • 限流

  • 在高并发场景下,系统的访问量超过了系统的承受能力,可以通过限流对系统进行保护

  • 限流就是丢弃一部分用户请求,保证整个系统可用,保证大部分用户是可以访问系统的

  • 限流的几种算法

  • 计数器令牌(固定窗口、滑动窗口)

  • 固定窗口。指定时间间隔内,累计访问次数,达到限制,访问丢弃。下一周期开始,访问次数置零。

  • 滑动窗口。固定窗口容易产生前一个周期尾端和后一个周期首端内访问集聚,超过系统处理能力。通过将时间周期分为N个小周期,分别记录每个小周期内的访问次数,并且根据时间滑动删除过期的小周期

  • 令牌桶算法

  • 以固定的速度向令牌桶中增加令牌,直到令牌桶满。

  • 请求到达时,向令牌痛请求令牌,如获取到令牌则处理请求,否则触发限流策略

  • 漏桶算法

  • 请求到达时,直接放入漏桶,如当前容量已达到限流值则进行丢弃。

  • 漏桶以固定的速率释放访问请求,直到漏桶为空

  • 自适应限流

  • 没有提前的人工评估,便没有提前的评估过时和人的评估疏漏/错误。

  • 实时自动评估QPS

  • 业务流量的不确定性与技术方案的自适应性天生一对

  • 降级

  • 部分非核心功能,给系统带来较大压力

  • 高并发时,进行这些非核心高负荷服务,给系统带来重压,使系统的处理能力更加恶化

  • 在系统高并发时,关掉这些非核心高负荷服务,释放系统资源。

  • 比如,淘宝双11时,关闭收货和评价功能。

  • 异地多活

  • 单个数据中心,可能遭遇地震、火灾、停电等天灾人祸,系统依然不可用。

  • 异地多机房部署,改善用户体验和提高系统处理能力,某一机房不可用,其它机房扔能提供服务。

  • 异地多活动的难点在于数据是否一致

总结

安全和高可用都是高投入的,需要做好balance。



用户头像

魔曦

关注

我思故我在! 2018.01.15 加入

凡事有交代,件件有着落,事事有回音。

评论

发布
暂无评论
【总结】安全与高可用