【从0-1成为架构师】网络架构模式

文章目录

        • 网络架构模式
          • 分层
          • 分割
          • 分布式
            • 分布式应用和服务
            • 分布式静态资源
            • 分布式数据与存储
          • 集群
          • 缓存
            • CDN
            • 反向代理
            • 本地缓存
            • 分布式缓存
          • 异步
            • 提高系统可用行
            • 加快网站相应速度
            • 消除并发访问高峰
          • 冗余
          • 自动化
            • 自动化代码管理
            • 自动化测试
            • 自动化安全检查
            • 自动化部署
            • 自动化监控
            • 自动化报警
            • 自动化失效转移
            • 自动化失效恢复
            • 自动化降级
            • 自动化分配资源

网络架构模式

为了解决大型互联网公司面临的高并发,海量数据处理,高可靠运行等一一系列问题。互联网公司在实践中提出了很多解决方案,来达到高可用,高性能,易伸缩,易扩展的架构目标,这些解决方案又被更多的网站重复使用,从而逐渐形成大型网站架构模式。

分层

将系统在横向分割成几部分,每个部分执行一部分简单的单一职责,然后通过上层对下层的依赖和调用组成一个系统。
网络的7层协议是一种分层,计算机硬件,操作系统,应用软件也可以看多是一种分层。在软件系统中一般会分为三层,应用层,服务层和数据层

应用层 负责具体的业务和视图展示
服务层 为应用层提供数据支持
数据层 提供数据库访问支持
通过分层,可以将一个大的系统拆分成不同的部分,便于分工合作和维护,每一层有一定的独立性,只要维持接口不变,各层内部的逻辑可以根据业务的变动而变化。
分层也有一些弊端,一个是需要把握好每一层的边界,一个是要严格遵守调用约束,禁止跨层调用,禁止逆向调用。
在实际工作中,也不用一定按照三层去分,每一层还可以继续细分,比如应用层可以分成专门数据处理和视图处理的,数据层可以分成数据接口层和数据处理层。
分层逻辑是逻辑上的,物理上可以在部署在同一个服务器上,当然当网站体量增大,也可以部署到不同的服务器上。
虽然分层最初的目的是为了便于开发,但在网站发展过程中,分层结构对支持网站向分布式发展至关重要,因此在最初网站设计中就应该考虑分层的设计。
分割

如果说分层是系统的横向分割,那么分割可以说是纵向分割了,网站越大,功能越复杂,将这些不同的业务和数据处理分割开来,包装成高内聚低耦合的模块,一方面有助于软件的开发和维护,一方面便于模块的分布式部署,提高网站的并发能力和功能扩展能力。

分布式

对于大型软件,将系统进行分割和分层的主要目的就是为了将模块分布式部署,将不同的模块部署到不同的服务器上利用远程调用方式协同工作可以使用更多的服务器完成同样的功能,服务器越多,cpu,内存,存储资源就与越多,可以为更多的用户提供服务。
但是分布式在解决网站高并发的问题的同时也会带来新的问题。首先分布式就意味着需要进行远程的方式进行调用,这可能会对性能造成严重的影响,其次服务器越多,服务宕机的几率也会越大,是网站的可用率降低,其次在分布式场景中分布式事务也不好处理。分布式还会导致网站依赖复杂,开发管理维护困难,所以我们不能为了分布式而分布式。
常见的分布式方案有一下几种

分布式应用和服务

将分层和分割后的应用和服务模块分布式部署,可以改善网站的性能和并发性,加快开发和发布速度,减少数据库连接资源消耗

分布式静态资源

网站的静态资源例如js,css图片等资源独立分布式部署,采用独立的域名,即动静分离,静态资源分布式部署可以减轻应用服务器的负载压力

分布式数据与存储

大型网站的数据量是极大的,单台服务器无法提供如此大的存储空间,这些数据需要分布式存储,除了对关系型数据库分布式部署,其他的大部分nosql基本上都是分布式的

集群

使用分布式部署的方式已将分层和分割后的模块独立部署了,但是对于访问量比较大的模块还需要将独立部署的模块集群化,即多台服务器部署相同的应用构成一个集群,通过负载均衡模块共同对外进行服务。
因为服务集群有更多的服务器对外提供服务,可以支持更高的并发,当有更多的用户访问时候,只需要在集群中增加服务器即可。并且因为多个服务器同时对外提供服务,当集群中的一个或几个服务器发生故障时,负载均衡服务器会将请求转移到其他服务器上,保证服务的可用性。

缓存

缓存就是将数据存放在距离计算最近的位置以加快处理速度,现在cpu越来越快的一个原因就是使用了缓存,在复杂的软件设计中,缓存几户无处不在。使用缓存有两个前提,一是数据的访问热点不均衡,某些数据会频繁的访问,这部分数据应该放在缓存中,二是数据在某个时间段内有效,不会很快过期,否则缓存的数据就会出现脏读。网站设计中缓存除了可以加快数据访问速度,还可以减轻后端应用与数据存储的压力。

CDN

内容分发网络,部署在离终端最近的网络服务商,用户的请求总是最先到达他的网络服务商处,在这里缓存一些网站的静态资源,可以就近以最快的速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容缓存在cdn。

反向代理

反向代理属于前端的一部分,部署在网络的前端,当用户的请求到达网站的数据中心是,最先访问到的就是反向代理服务器,这里缓存网站的静态资源

本地缓存

在应用服务器本地缓存数据,应用服务器可以直接读取这些数据,不需要访问数据库

分布式缓存

网站的数据量是庞大的,将数据专门存放在一个分布式缓存集群中。

异步

驱动计算机发展的一个重要目标和驱动力就是降低软件的耦合性,事务之间的联系越少,相互影响的关系越少,越可以独立发展,网站架构中解耦的方式处理上面说的分层,分割,分布以外还有一个重要的就是异步。服务之间的消息投递不是同步的,而是将业务分割成不同阶段,每一个阶段之间通过共享数据的方式异步执行。
在单一服务器上可以利用多线程共享内存资源的方式实现异步,处在业务处理前的线程将输入写入队列,后面业务的线程从队列中读取数据进行操作,在分布式系统中可以通过分布式消息队列进行异步。
异步架构典型的例子就是消费者和生产者模式,两者不直接调用,只要保证数据结构不变,彼此功能实现可以任意变化。使用异步对网站有以下优点

提高系统可用行
加快网站相应速度
消除并发访问高峰

但需要注意的是使用异步可能会对用户的体验业务流程造成影响,需要根据业务来使用

冗余

网站需要7*24小时的提供访问,但是服务器随时都有可能出现孤故障,想要保证服务器宕机的时候仍然能提供访问,数据不丢失,就需要进行服务器冗余,数据冗余备份。
访问和数据量很小的服务器也至少需要两台构成集群,数据库除了定时备份,还需要对数据库进行读写分离。

自动化

在无人监守的时候网站也可以正常运行,一切都可以自动化是理想状态,

自动化代码管理
自动化测试
自动化安全检查
自动化部署
自动化监控
自动化报警
自动化失效转移
自动化失效恢复
自动化降级
自动化分配资源

你可能感兴趣的:(架构师,网络,架构,数据库)