架构知识学习总结
互联网系统面临的挑战
高并发、大流量
互联网需要面对高并发大流量的冲击,系统需要有很强的承受能力。
高可用
互联网的用户可能会在任何时间使用系统,系统需要支持7*24小时的可用,并且如果系统中的某些功能崩溃后系统整体对外也要可用。
海量的数据处理
互联网系统需要对海量数据做存储和处理,Facebook 每周上传的照片数目接近10亿
用户分布广泛,网络环境复杂
很多大型系统的用户遍布全球,对全球的用户提供服务,国内存在各个供应商互通难的问题,中美光缆也出现过一些故障。
安全环境恶劣
互联网系统的开放性,就使它要面对所有不可预知的用户,不管是友好的还是恶意的,如果不能很好地应对,就会造成很大的损失。
渐进式发展
互联网系统不是一开始就存在很多的用户,需要处理很大的数据量,数据量是逐渐的增加的。系统复杂性也是随着发展提高的。
需求迭代变更快速
互联网系统需要能够快速的响应用户的需求,抢占到了用户就抢占到了市场,只有具备快速的迭代能力,才能够留住用户,才能够长久的发展。
应用高并发挑战的两个技术方向
垂直伸缩
垂直伸缩是指通过升级硬件或者增加网络吞吐能力来提升系统的响应能力。因为不需要改变架构,被认为是最简单的短期伸缩方式。
垂直伸缩有一定的缺点,当达到某个程度时,在进行计算能力的增加所需要的成本会比较高。有自己的物理极限,由于操作系统的设计或者应用的设计,造成了垂直伸缩有上限。
水平伸缩
水平伸缩通过增加服务器来提高系统计算能力的一类架构方法。水平伸缩可以增加很多服务器进行扩展,不会遇到垂直伸缩那样的瓶颈。
互联网架构演化的一些阶段
单体架构
项目初期使用的一种方式,数据库和应用在同一台服务器上,针对用户量不大的情况。
应用和数据拆分
解决用户量大造成的资源争用,可能会造成请求延迟,服务崩溃问题
使用缓存缓解系统压力
能够加快数据访问速度,较少计算造成的CPU资源浪费,降低了DB或者文件系统的的访问压力
使用应用集群
使用应用集群,使用负载均衡将请求按照一定的规则分摊到应用集群中:能够提升应用的高并发访问能力
数据库读写分离
解决服务请求中,压力落在DB的情境下,提升数据库的处理能力。
使用反向代理和CDN加速网站响应
减少网站访问压力,加快访问速度,减轻机房的访问压力
使用分布式的文件系统和分布式数据库
针对大流量的情况下的数据访问和文件独写能力,可以根据需要对数据库和文件系统进行水平扩展。
使用nosql和搜索引擎
常用的关系型数据库对数据的模糊查询支持的不够友好,使用nosql和搜索引擎能够提升数据的存储能力和数据的搜索速度。
业务拆分
针对系统用户量大,业务复杂,代码量大的场景
微服务和中台化
将一些公用的服务单独进行拆分,做成微服务集群
大数据与智能化
实现系统的智能化,能够根据用户的喜好进行推送
常见的一些架构模式
分层
分层是将系统在横向层面上进行拆分,将系统分成几个部分,每个部分承担单一的职责,通过每个部分的上层对下层的依赖和调用,组成一个统一的系统对外提供服务,例如应用层、缓存层、数据库层。
分割
分割是将系统根据不同的模块,不同的功能进行拆分,每个模块针对不同的功能堆外提供服务。例如用户服务、登录服务、支付服务。
分布式
分布式将分层和分割的内容部署到不同的服务器上,让他们通过远程调用服务,
冗余
系统需要二十四小时对外提供服务,可能会存在宕机的几率,因此要对服务器做冗余运行,数据做冗余备份处理。
集群
如果分布式中的某个服务停止运行,就可以使用集群。集群中的服务都具有同样的功能,当集群中某台服务不能对外提供服务时,其他机器能够承担不可用的机器请求,从而保证系统的高可用。
缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第
一手段,现代 CPU 越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计
中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。
异步
计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间越少直接关系,
那么就越少被彼此影响,越可以独立发展。大型网站架构中,系统解耦合的手段除了前
面提到的分层、分割、分布等手段,还有一个重要手段是异步,就是将一个业务操作分
成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
自动化
在无人值守的情况下,系统能够自动运行。
安全
系统通过多种认证方式过滤请求,承受各种网络攻击。
衡量一个系统的架构设计
衡量一个系统的架构设计可以通过以下几种方式:高可用、可扩展、高性能、可伸缩、安全。
评论