写点什么

架构师训练营 - 学习总结 - 第十一讲

用户头像
吕浩
关注
发布于: 2020 年 08 月 26 日

组件设计原则

高内聚,低耦合。

常用,可服用的功能可以拆分成组件。

一个复杂度为100的软件系统,如果能拆分成两个互不相关、同等规模的子系统,那么每个子系统的复杂度应该是25,而不是50。

架构师职责:拆解系统,理顺各模块的依赖关系。



组件内聚原则(指导性,弱原则)

复用发布等同原则:软件复用的最小粒度应该等同于其发布的最小粒度。

共同封闭原则:我们应该将那些会同时修改,并且为了相同目的而修改的类放到同一个组件中。而将不会为了相同目的而修改的类放到不同的组建中。(就是说修改一个功能时只需要修改一个组件,不应该波及到其他组件)

共同复用原则:不要强迫一个组件的用户依赖他们不需要的东西。

共同复用和共同封闭有可能发生冲突。这时要判断哪个更重要。



组件耦合原则(必须符合,强原则)

无循环依赖原则:组件依赖关系中不应该出现环。

稳定依赖原则:组件依赖关系必须指向更稳定的方向。(组件不应该依赖一个比自己还稳定的组件)

稳定抽象原则:一个组件的抽象化程度应该与其稳定性程度一致。



版本号约定建议

主版本号.次版本号.修订号

主版本号升级,表示组件发生了不向前兼容的重大修订;

次版本号升级,表示组件进行了重要的功能修订或者bug修复,但是组件是向前兼容的;

修订号升级,表示组件进行了不重要的功能修订或者bug修复。



安全架构

常见攻击:

XSS攻击:跨站点脚本攻击

防御手段:

消毒,对HTML危险字符转义。如“>”转义为“&gt”



SQL注入攻击:

防御手段:

消毒,通过正则皮皮飞,过滤请求数据中可能注入的SQL文。

SQL预编译参数绑定。最好的方式。



CSRF攻击:跨站点请求伪造

防御手段:

表单Token:在页面表单中增加一个随机数Token,每次请求的Token都不相同。还可以防爬虫。

验证码:用户体验糟糕,必要时才使用。

Referer check:HTTP请求头的referer域中记录着请求来源,可通过检查请求来源验证是否合法。有一定局限性,referer并不一定总能得到。



其他攻击和漏洞

错误页面:指定到500

文件上传:指定可上传文件类型

路径遍历:资源文件独立服务器,独立域名。其他文件不使用静态URL,动态参数不包含文件路径。



开源web应用防火墙ModSecurity

核心是正则表达式



信息安全和加密

单向散列加密:密文无法还原为原文,例如MD5

使用场景:用户密码

对称加密:同一个密钥加解密。数据库存储密文,使用时解密。

使用场景:系统内部使用的信用卡号

非对称加密:加密密钥和解密密钥不同。反过来用就是电子签名。

使用场景:HTTPS



反垃圾邮件

贝叶斯分类算法

布隆过滤器黑名单



引起故障的原因:硬件故障、软件bug、系统发布、并发压力、网络攻击、外部灾害



高可用架构方案策略

解耦

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

面向对象基本设计原则

面向对象设计模式

领域驱动设计建模



隔离

业务与子系统隔离

微服务与中台架构

生产者与消费者隔离

虚拟机与容器隔离



异步

多线程编程

反应式编程

异步通信网络编程

事件驱动异步架构



备份

集群涉及

数据库复制,CAP



失效转移

数据库主主失效转移

负载均衡失效转移



幂等

一个操作执行多次情况下,结果是相同的。



事务补偿



重试

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



熔断



限流:丢弃一部分的用户请求,保证大部分用户可以访问。

计数器算法

令牌桶算法

漏桶算法



自适应限流

实时自动评估QPS



降级

关闭非核心功能保证核心功能



异地多活



高可用运维

发布

自动化测试

自动化部署



持续部署三步走:持续集成、持续交付、持续部署

预发布验证



系统监控:开源的cat



高可用价值观

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

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

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



用户头像

吕浩

关注

还未添加个人签名 2018.04.27 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 学习总结 - 第十一讲