Week 11 学习总结

用户头像
wyzwlj
关注
发布于: 2020 年 08 月 24 日

一、架构设计之模块分解--组件设计

1、为什么进行组件设计

    1)软件的复杂度会随着规模的增长层指数级增长

    2)将复杂的系统拆分成子系统,进行模块化、组件化设计,能够有效降低复杂度

2、组件的设计原则

架构师需要做好组件设计&组件依赖关系的设计

    1)组件内聚原则:主要讨论组件应该包含哪些功能和类,以便组件既能提供相对完整的功能,又不至于太过庞大

        a. 复用发布等同原则

        b. 共同封闭原则

        c. 共同复用原则

    2)组件耦合原则主要讨论组件之间的耦合关系应该如何设计

        a. 无循环依赖原则

            -> 软件分层,上层依赖下层,下层不能依赖上层

            -> 设计好层级,定好边界、依赖

        b. 稳定依赖原则

            -> 不要依赖一个比自己还不稳定的原则

            -> 不稳定的组件应当依赖稳定的组件,而不应该反过来

        c. 稳定抽象原则

3、组件划分原则

    1)组件的边界与依赖关系划分,不仅需要考虑技术问题,也要考虑业务场景问题

    2)易变 or 稳定、依赖 or 被依赖,都需要放在业务场景中进行考察

二、安全架构

1、攻击类型

    1)XSS攻击:基于 用户输入消毒 进行防御

    2)SQL注入攻击:基于 用户输入消毒、SQL预编译参数绑定--PrepareStatement 进行防御

    3)CSRF攻击:通过 添加表单token--避免攻击者获取所有请求参数、验证码 进行防御

    4)其他需要关注的攻击和漏洞:错误码、HTML注释、文件上传、路径遍历

2、信息加密技术&秘钥管理

    1)加密技术

        a. 单向散列加密

        b. 对称加密

        c. 非对称加密

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



三、高可用架构设计

1、高可用系统的度量

    1)可用性指标:网站不可用时间

    2)故障分管理

2、高可用系统的架构方法

    1)解耦

        a. 高内聚、低耦合的组件设计

        b. 面向对象的设计

        c. 设计模式

        d. 领域驱动设计建模

    2)隔离

        a. 业务与子系统隔离

        b. 微服务与中台架构

        c. 生产者消费者隔离

        d. 虚拟机与容器隔离

    3)异步

        a. 多线程编程

        b. 反应式编程

        c. 异步通信网络编程

        d. 事件驱动异步架构

    4)备份

        a. 集群设计

        b. 数据库设置,CAP原理

    5)Failover 失效转移

        a. 失效确认

        b. 使用无状态的服务,方便转移处理

    6)幂等

        a. 服务重复调用有时是无法避免的,必须保证重复调用和调用一次产生的结果相同

    7)事务补偿

        a. 传统事务事务ACID理论

        b. 分布式事务的BASE理论--基于分布式系统的CAP理论

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

    8)重试

    9)熔断

        a. 当某个服务出现故障时,通过断路器阻断对故障服务的调用,避免影响范围扩散

        b. 断路器的三种状态:关闭、打开、半开

        c. Spring Cloud断路器实现:Hystrix

    10)限流

        a. 计数器--固定窗口算法

        b. 计数器--滑动窗口算法

        c. 令牌桶算法

        d. 漏桶算法

        e. 自适应限流

    11)降级

    12)异地多活

3、高可用系统的运维

    1)发布

        a. 系统发布情况下的高可用

        b. 保证发布时系统保持高可用的处理流程



    2)自动化测试

    3)自动化部署

        a. 手工部署 VS 自动化部署

        b. 持续部署三步走:持续集成 ->持续交付 ->持续部署

        c. 持续部署流程



    4)预发布验证



    5)代码版本控制

        a. 主干开发、分支发布

        b. 分支开发、主干发布

    6)自动化发布

    7)灰度发布

        a. 未使用灰度发布时,存在的问题:出问题时,回滚慢

        b. 灰度发布的流程



    8)网站运行监控

        a. 为什么进行监控:不允许没有监控的系统上线

        b. 如何进行监控--数据采集

            -> 用户行为日志收集

            -> 服务器性能监控

            -> 业务运行数据报告

        c. 监控管理的意义

            -> 性能评估、集群规模伸缩性预测

            -> 风险预警

            -> 自动控制:自动失效转移、自动扩容、自动限流

        d. 监控系统架构



4、高可用系统的设计原则

    1)保持简单,使问题易于发现,快速解决

    2)目标明确,解决特定环境下的具体问题

    3)价值回归,成本收益要合理

                



用户头像

wyzwlj

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
Week 11 学习总结