架构师训练营 - 学习总结 - 第十一讲
组件设计原则
高内聚,低耦合。
常用,可服用的功能可以拆分成组件。
一个复杂度为100的软件系统,如果能拆分成两个互不相关、同等规模的子系统,那么每个子系统的复杂度应该是25,而不是50。
架构师职责:拆解系统,理顺各模块的依赖关系。
组件内聚原则(指导性,弱原则)
复用发布等同原则:软件复用的最小粒度应该等同于其发布的最小粒度。
共同封闭原则:我们应该将那些会同时修改,并且为了相同目的而修改的类放到同一个组件中。而将不会为了相同目的而修改的类放到不同的组建中。(就是说修改一个功能时只需要修改一个组件,不应该波及到其他组件)
共同复用原则:不要强迫一个组件的用户依赖他们不需要的东西。
共同复用和共同封闭有可能发生冲突。这时要判断哪个更重要。
组件耦合原则(必须符合,强原则)
无循环依赖原则:组件依赖关系中不应该出现环。
稳定依赖原则:组件依赖关系必须指向更稳定的方向。(组件不应该依赖一个比自己还稳定的组件)
稳定抽象原则:一个组件的抽象化程度应该与其稳定性程度一致。
版本号约定建议
主版本号.次版本号.修订号
主版本号升级,表示组件发生了不向前兼容的重大修订;
次版本号升级,表示组件进行了重要的功能修订或者bug修复,但是组件是向前兼容的;
修订号升级,表示组件进行了不重要的功能修订或者bug修复。
安全架构
常见攻击:
XSS攻击:跨站点脚本攻击
防御手段:
消毒,对HTML危险字符转义。如“>”转义为“>”
SQL注入攻击:
防御手段:
消毒,通过正则皮皮飞,过滤请求数据中可能注入的SQL文。
SQL预编译参数绑定。最好的方式。
CSRF攻击:跨站点请求伪造
防御手段:
表单Token:在页面表单中增加一个随机数Token,每次请求的Token都不相同。还可以防爬虫。
验证码:用户体验糟糕,必要时才使用。
Referer check:HTTP请求头的referer域中记录着请求来源,可通过检查请求来源验证是否合法。有一定局限性,referer并不一定总能得到。
其他攻击和漏洞
错误页面:指定到500
文件上传:指定可上传文件类型
路径遍历:资源文件独立服务器,独立域名。其他文件不使用静态URL,动态参数不包含文件路径。
开源web应用防火墙ModSecurity
核心是正则表达式
信息安全和加密
单向散列加密:密文无法还原为原文,例如MD5
使用场景:用户密码
对称加密:同一个密钥加解密。数据库存储密文,使用时解密。
使用场景:系统内部使用的信用卡号
非对称加密:加密密钥和解密密钥不同。反过来用就是电子签名。
使用场景:HTTPS
反垃圾邮件
贝叶斯分类算法
布隆过滤器黑名单
引起故障的原因:硬件故障、软件bug、系统发布、并发压力、网络攻击、外部灾害
高可用架构方案策略
解耦
高内聚、低耦合的组件设计原则
面向对象基本设计原则
面向对象设计模式
领域驱动设计建模
隔离
业务与子系统隔离
微服务与中台架构
生产者与消费者隔离
虚拟机与容器隔离
异步
多线程编程
反应式编程
异步通信网络编程
事件驱动异步架构
备份
集群涉及
数据库复制,CAP
失效转移
数据库主主失效转移
负载均衡失效转移
幂等
一个操作执行多次情况下,结果是相同的。
事务补偿
重试
上游调用者超时时间应大于下游超时时间之和
熔断
限流:丢弃一部分的用户请求,保证大部分用户可以访问。
计数器算法
令牌桶算法
漏桶算法
自适应限流
实时自动评估QPS
降级
关闭非核心功能保证核心功能
异地多活
高可用运维
发布
自动化测试
自动化部署
持续部署三步走:持续集成、持续交付、持续部署
预发布验证
系统监控:开源的cat
高可用价值观
保持简单,使问题易于发现,快速解决。
目标明确,解决特定环境下的具体问题。
价值回归,成本收益要合理。
评论