架构师训练营第十一周总结

用户头像
跨域刀
关注
发布于: 2020 年 08 月 26 日

架构师训练营第十一周总结



组件设计原则



组件最初用于把一堆常用的方法集中在一起,也就是方法的复用。

架构师职责在于把复杂度高的系统设计成一个个模块,每个模块复杂度很低,处理好各个模块之间的关系,降低整体的复杂度。



组件内聚原则 -- 目的在于讨论哪些类应该聚集在同一个组件中,使其既能提供相对完整的功能,又不至于太庞大



1、复用发布等同原则

软件复用的最小粒度等同于其发布的最小粒度。

-- 可供复用的软件产品包含了10种,其中除源代码外,还包括体系结构、需求模型和规约、各种设计、用户界面、数据、测试用例、用户文档、技术文档、项目计划和成本估计等。组件有小到大,可以包括方法函数,用户注册/登录功能,用户管理组件。

组件发布后,别人可以依赖组件,复用组件。

组件设计的粒度有多大,由业务场景决定。如果用户登录和注册是分别复用的,则登录和注册功能分开。如果是使用用户管理组件,则登录和注册会作为一个组件被使用。

业务上的变更会经常导致主版本号升级



2、共同封闭原则 --把相互关联性比较强的类放在一个组件中,即对系统不同功能升级的时候,对不同组件的修改量不同,目的是保证可维护性,修改量比较集中,缩小修改对其他组件带来的影响。

单一原则是面向对象的。

3、共同复用原则 --相互依赖的类,应该放在同一个组件中。

接口隔离原则 -- 不能强迫用户依赖不需要的东西

共同复用和共同封闭相互矛盾,需要思考判断哪个更重要一点。



组件耦合原则 -- 说明组件之间的调用依赖关系怎么设计

1、无循环依赖原则 -- 各个组件之间的依赖不能循环形成闭环。



避免循环依赖,必须做到单项依赖,组件之间的功能不能互相调用,有边界,架构文档要写清楚依赖和层次关系;否则系统必死无疑。



课程三部分:架构方法(架构文档很重要哦),程序设计,架构设计



2、稳定依赖原则 -- 组件a,b,c...依赖组件A,则组件A一定不能经常变化,一定是稳定的。而如果a,b,c...经常变化,则其是不稳定的,其一定要依赖于比自己稳定的组件,不然当A发生过多变化时,a,b,c......也会受到连锁反应



3、稳定抽象原则 -- 抽象描述的是接口和规范(稳定),不是具体实现(不稳定)

给组件设计一个接口类,封装在专门的组件中。这样别人就依赖接口组件(稳定),而不是依赖组件实现。



对稳定性不同的团队设计不同的组件



架构师核心三个维度:技术,业务,团队

自己思考关系,哪个对自己的架构设计比较重要,不要被合作团队或环境影响。



组件和模块区别

组件一般是物理的,独立发布的东西。

模块有时不是物理上的,是逻辑上的。



组件的依赖关系 -- 通过文档保证,系统的架构层次图,不同层次不能反向依赖



一个系统可以有很多个组件,把系统切分成若干个组件,让团队开发。



安全架构



XXS攻击 -- 跨站点脚本攻击,通过服务器攻击用户

防御方法:用户不能发脚本给服务器





sql注入攻击  -- 直接攻击服务器



防御:现今主流浏览器都支持过滤反射型了

SQL注入要用预处理Statement,但以前有人用存储过程,在那里拼接sql,这种用预处理也没办法了

方法:建立DMZ隔离区

CSRF最简单的防攻击办法,就是检查Referer,必须是来自可信任的域名。



错误回显:要显示给用户专门的页面,而不是代码错误。







CSRF攻击  -- 跨站点请求伪造



token防不了爬虫

验证码用于检验是人的请求还是机器的请求,用户可以知道是否是被利用了。



安全功能:正则表达式,网关,应用程序的过滤器



安全策略:web攻击,信息安全 参考modsecurity



信息加密及秘钥管理

加密:单项散列加密,对称加密,非对称加密

秘钥管理 :认证,保证多人持有秘钥的不同部分



反垃圾邮件  -- 训练关键字(特征)



布隆过滤器黑名单



电子商务风险控制、

规则引擎

机器学习



高可用的度量

可用性指标:(1-年度不可用时间/年度时间)*100%

业界常用多少个9来衡量网站的可用性,如qq是99.99%



故障处理后一般是“甩锅”大会,然后诞生一个“背锅侠”。



引起故障的原因

硬件故障、软件故障(bug)、系统发布(版本控制,数据库和代码管理,服务器配置等)、并发压力(高并发压力过大)、网络攻击、外部灾害



高可用架构

解耦 -- 大多数公司不会像淘宝一样出现高并发现象,编程为主要优化对象

高内聚、低耦合的组件设计原则 -- 发布阶段出现问题概率高,依赖关系要清晰

面向对象的基本设计原则

面向对象设计模式

领域驱动设计建模



隔离-- 使得故障不会扩散

业务和子系统隔离   

微服务与中台架构

生产者和消费者隔离

虚拟机与容器隔离



异步 -- 同步导致一个失效,多个连锁失效

多线程编程

反应式编程

异步通信网络编程

事件驱动异步架构



备份 -- 当应用只部署在一个服务器上,服务器发生故障,则该应用不可使用

集群设计

数据库复制,CAP原理



失效转移 -- 检测到用户实

数据库主主失效转移

负载均衡失效转移



幂等



事务补偿



重试 -- 远程服务发生超时,保证重新服务再次重试可以修复单词调用的故障



熔断 -- 当服务器服务延迟和失败调用增加时,采用断路器熔断处理



限流 -- 在高并发情况下,设定好数值,丢弃一部分用户请求,保证大部分用户请求得到响应



自适应限流 -- 检测高并发情况,根据自身负载进行自适应限流



降级 -- -- 在高并发情况下关闭一些不重要的服务



异地多活 --在多个地方部署机房



高可用系统运维

发布

自动化测试 -- web功能测试,兼容性测试,采用WEB自动化测试工具或脚本完成测试

手工测试和自动化测试,业务前期可以用手工测试,后期复杂度增加采用自动化测试



自动化部署



持续部署流程



预发布验证 --把系统部署在生产环境的一台服务器上,但只能让测试人员登录,用户无法登录,测试人员在生产环境测试



代码版本控制 -- 主干发布,分支开发;分支发布,主干开发



自动化发布



灰度发布 -- 把服务器群分成几部分,先一个部分发布,无误再另一个部分发布,无误再下一个部分发布,如此类推,直到全部发布完



网站监控运营

监控数据采集

用户日志行为收集

服务器性能检测

业务运行数据报告

监控管理



用户头像

跨域刀

关注

还未添加个人签名 2020.03.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第十一周总结