架构师训练营第 0 期第 4 周学习总结
0、本周感想
本周学习到互联网系统架构中遇到的问题,解决思路和手段,为后续工作中解决系统问题提供了很多有效的建议;
更重要的是 系统设计的架构模式,每一个模式描述了一个在我们周围不断【重复发生】的问题该问题解决方案的核心;
模式的关键在于模式的【可重复性】,问题与场景的【可重复性】带来解决方案的【可重复使用】;
互联网架构模式就是要试图描述那些为解决互联网系统高性能,高可用,易扩展,可伸缩和安全等目标;
互联网架构主要遇到的问题
1、复杂性 --> 分层,分割;业务逻辑越来越复杂;
2、高并发请求;
3、高并发读;
4、高并发写;
1、分层模式
分层是企业应用中最常见的架构模式,将系统在【横向维度】上切分成几个部分,每个部分负责相对比较【单一的职责】,然后通过上层对下层的依赖和调用组成一个完整的系统。
一般软件系统的分层架构:
1-1、分层的好处
无需过多了解其他层次的细节,可以将某一层作为一个【整体】理解;
可以替换某层的具体实现,只要前后提供的服务相同即可;
可以将层次间的依赖降到最低;
分层有利于标准化工作;
一旦构建好某一层,就可以用它为很多上层服务提供支持;
1-2、分层的缺陷
层次不能封装所有东西,有时会带来级联修改;例如增加一个数据域,就必须修改数据库中的字段,还必须在各层之间做修改;
过多的层次影响性能;
2、分割模式
【分层】是软件在【横向】方面的切分,那么【分割】就是【纵向】对软件进行切分;
系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成【高内聚低耦合】的模块单元,这样做的好处有:
有助于软件的开发和维护;
便于不同模块的分布式部署,目的是提高网站的【并发处理能力】和【功能扩展能力】;
常用的分割依据:按【业务】进行拆分;
利用分层和分割后,将功能和层次拆分成一个个小模块,各个模块内部由对应的人进行开发;
DDD 是系统分割的主要设计方法;
分割模式的软件,以电商为例(不一定准确):
以阿里的电商体系为例,产品层包含了 淘宝、天猫 等产品,而这些产品都有 会员、订单、商家、物流等功能,根据不同的业务功能对系统进行分割;
3、分布式
对于大型网站,分层和分割的主要目的是为了切分后模块便于【分布式部署】,即将不同模块部署在不同的服务器上,通过远程调用协同工作。
分布式意味着解决同样问题,可以使用更多的计算机,计算机越多,CPU、内存、硬盘资源也就越多,能处理的并发访问和数据量就越大;
分布式系统可以分为:
分布式应用和服务;
分布式静态资源;
分布式数据和存储;
分布式计算;
4、集群
使用分布式虽然将分层和分割后的模块独立部署,但是对于用户访问集中的模块,比如网站的首页,还需要将独立部署的服务集群化,即多台服务器部署相同应用构成一个集群,通过【负载均衡】设备共同对外提供服务;
5、缓存
缓存就是讲数据存放在【距离计算最近】的位置以加快处理速度(降低响应时间和提升并发访问);
缓存是改善软件性能的第一手段,在复杂软件设计中,缓存几乎无处不在;
大学网站架构设计在很多方面都使用缓存设计;
缓存的种类:
CDN;
反向代理;
本地缓存;
远程缓存;
6、异步
软件发展的一个重要目标和驱动力就是【降低软件耦合性】。
事物之间越少直接关系,就越少被彼此影响,越可以独立发展;
异步就是将一个业务操作分成多个阶段,每个阶段之间通过【共享数据】而不是直接调用方法进行协作;
同步处理是【强耦合】,如果服务端系统出现问题,通过同步方式造成请求超时或失败,导致业务处理异常;
异步的好处有:
提高系统可用性,因为对外依赖变少,外部服务宕机对系统本身影响较小;
加快网站响应速度,通过异步方式,与其他系统的交互时间变短,从而提升整个网站的速度;
消除并发访问高峰;在业务突然出现高峰,如电商中的秒杀或抢券,依赖的服务或数据库都可能出现瓶颈,通过异步方式可以降低系统压力;
常见的异步技术实现方式:
Java 多线程异步处理;
消息队列;
7、冗余
背景:
互联网应用需要 7X24 小时连续运行,但是服务器总有可能出现故障,特别是服务器规模较大时,服务器宕机时必然事件;
要想保住服务器在宕机情况下系统依然可以服务,数据不丢失,就需要一定城府的服务器冗余运行,数据冗余备份(如 数据库主从复制,如果主机挂了,从机可以代替主机继续提供服务);
这样做的目的是提高系统的可用性;
8、自动化
自动化运维;
总结
提升系统高性能的方法
1、缓存;
2、集群;
3、异步调用;
4、分布式数据库和分布式文件系统;
提供系统高可用的方法:
1、冗余;
2、数据层主从复制;
评论