架构师训练营第 1 期 -Week4 - 系统架构学习总结

用户头像
鲁小鲁
关注
发布于: 2020 年 10 月 18 日



这周主要讲了互联网系统架构面临的挑战、演化过程、架构模式、架构要素。传统应用面向的是内部员工,互联网应用面向的是外部的用户。互联网应用有用户量大、数据量大、并发量高、7*24小时提供等特点。互联网应用要解决的主要矛盾是服务器资源与高并发的用户请求的问题。解决这个矛盾的两个技术方向是:垂直伸缩和水平伸缩,主要采用是通过构建分布式系统集群来实现的水平伸缩。成功的互联网应用都是演化出来的。



上周内容



在前两个单元讨论了软件设计的最终目的是实现高内聚、低耦合,而面向对象编程更符合我们对现实世界的抽象。讨论了糟糕代码的臭味,进而讨论了避免这些臭味的面向对象编程的设计原则和设计模式。



糟糕代码的臭味

  • 僵化性

  • 脆弱性

  • 牢固性

  • 粘滞性

  • 晦涩性

  • 不必要的复杂

  • 不必要的重复



设计原则 - SOLID

  • 开闭原则:最根本的原则

  • 里氏替换原则: 指导继承的设计

  • 依赖倒置原则:指导框架设计

  • 单一职责原则:指导类的设计

  • 接口隔离原则:指导接口的设计



设计模式

设计模式按照功能可以分:

  • 创建模式:对类的实例化过程的抽象

  • 结构模式:将类或者对象结合在一起形成更大的结构

  • 行为模式:对不同对象之间划分职责和算法的抽象化



设计模式按照方式可以分:

  • 类模式:继承的方式

  • 对象模式:组合的方式



模式是一种问题可重复的解决方案。



注意:不是定义了一个类,给他一些属性、一些方法就是OOP了,这只是使用面向对象语言进行编程。

OOP是对现实对象、现实问题的抽象,生成类。



本周内容



互联网的架构的挑战



主要挑战有:

  • 高并发、大流量:需要面对高并发用户,大流量访问

  • 高可用:系统7*2小时不间断服务。

  • 海量数据: 需要存储、管理海量数据

  • 用户分布广泛,网络情况复杂

  • 安全环境恶劣

  • 需求快速变更,发布频繁

  • 渐进式发展



解决这些挑战有两个技术方向:垂直伸缩和水平伸缩



垂直伸缩是提升单一台服务器的处理能力(CPU、内存、硬盘、网络等)

水平伸缩是通过增加服务器,提升服务器计算能力。主要的手段时按层、按功能拆分服务构建分布式的集群。

互联网应用的架构的演化

  • 第零阶段:单机架构

  • 第一阶段:应用数据分离

  • 第二阶段:使用缓存改善系统性能

  • 第三阶段:使用应用服务器集群改善系统的并发处理能力

  • 第四阶段:数据库读写分离

  • 第五阶段:使用反向代理和CDN加速网站响应

  • 第六阶段:使用分布式文件系统和分布式数据库系统

  • 第七阶段:使用NoSQL和搜索引擎

  • 第八阶段:业务拆分

  • 第九阶段:微服务及中台化

  • 第十阶段:大数据和智能化



互联网应用的架构模式

  • 分层架构

  • 分割架构

  • 分布式架构

  • 集群架构

  • 缓存架构

  • 异步架构

  • 冗余架构

  • 自动化架构

  • 安全架构



互联网应用的架构的五个核心要素

  • 高性能

  • 高可用

  • 可伸缩

  • 可扩展

  • 安全



互联网架构技术一览

前端



  • App及Web开发技术

  • 浏览器及HTTP优化技术

  • CDN

  • 动静分离

  • 图片服务

  • 反向代理

  • DNS



网关及应用层



  • 网关架构:

  • 负载均衡

  • 动态页面静态化

  • 业务拆分



网关架构主要关心的是用户请求的安全认证、一些身份识别、一些负载均衡



服务层



  • 微服务架构

  • 分布式消息队列

  • 分布式缓存

  • 分布式一致性(锁)服务



存储层



  • 分布式文件

  • 分布式关系数据库

  • NoSQL数据库



后台架构



  • 大数据平台

  • 搜索引擎

  • 推荐引擎

  • 数据仓库



提供一些数据支持服务



运维与安全



  • 数据采集与展示

  • 数据监控与报警

  • 攻击与防护

  • 数据加密与解密



思考和总结



技术的发展,其实是伴随着业务发展的,是业务的发展,驱动着技术的发展,技术是为业务服务的。



架构师在做技术选型的时候,根据场景选择技术,做技术选型。不要一味地听从外面的文章是怎么写的,别人是怎么用的。要从自己的使用角度去分析,你真正想要的是什么?明白自己的需求,同时也明白技术方案的优缺点。去选择最适合自己的方案(适合的才是最好的,github的星不星的不重要)



老师在本章中提到架构师或者技术人员在追求技术的时候,一方面要看自己的兴趣,另一方面也要看业界的潮流。最好是和潮流相吻合的。不要逆潮流而动。我感觉这个很重要,大家工作基本上不是为了实现人生理想,个人价值,或者为社会做贡献。应该都是为了钱。顺应潮流能获得最大的收益。所以学Golang、学习智能化推荐系统是目前很正确的选择。



用户头像

鲁小鲁

关注

博学而笃志,切问而近思。 2018.09.29 加入

Go开发

评论

发布
暂无评论
架构师训练营第 1 期 -Week4 - 系统架构学习总结