互联网架构模板:“网络层”技术

极客时间:《从 0 开始学架构》:互联网架构模板:“网络层”技术

这里的网络层强调的是站在网络层的角度整体设计架构,而不是某个具体网络的构建。

负载均衡

负载均衡就是将请求均衡地分配到多个系统上。由于每个系统的处理能力是有限的,因此为了应对大容量的访问,就必须使用多个系统

1、DNS

DNS 是最简单也是最常见的负载均衡方式,一般用来实现地理级别的均衡。
DNS负载均衡的优点是通用(全球通用)、成本低(申请域名,注册DNS即可),缺点在于:

  • DNS缓存的时间比较长,即使将某台业务机器从DNS服务器上删除,由于缓存的缘故,还是有很多用户会继续访问已经被删除的机器。
  • DNS不够灵活。

因此,对于时延和故障敏感的业务,有实力的公司会尝试实现HTTP-DNS的功能,即使用HTTP协议实现一个私有的DNS系统。HTTP-DNS 主要应用在通过 App 提供服务的业务上,因为在 App 端可以实现灵活的服务器访问策略,如果是 Web 业务,实现起来就比较麻烦一些,因为 URL 的解析是由浏览器来完成的,只有 Javascript 的访问可以像 App 那样实现比较灵活的控制。

2、Nginx、LVS、F5

DNS用于实现地理级别的负载均衡,而Nginx、LVS、F5 用于同一地点内机器级别的负载均衡。其中 Nginx 是软件的 7 层负载均衡,LVS 是内核的 4 层负载均衡,F5 是硬件的 4 层负载均衡。

3、CDN

CDN 是为了解决用户网络访问时的“最后一公里”效应,本质上是一种“以空间换时间”的加速策略,即将内容缓存在离用户最近的地方,用户访问的是缓存的内容,而不是站点实时的内容。
下面是简单的 CDN 请求流程示意图:

多机房

从架构上来说,单机房就是一个全局的网络单点,在发生比较大的故障或者灾害时,单机房难以保证业务的高可用。
多机房设计最核心的因素就是如何处理时延带来的影响,常见的策略有:

    1. 同城多机房
      同一个城市多个机房,距离不会太远,可以投入重金,搭建私有的高速网络,基本上能够做到和同机房一样的效果。
    1. 跨城多机房
      在不同的城市搭建多个机房,机房间通过网络进行数据复制(例如,MySQL 主备复制),但由于跨城网络时延的问题,业务上需要做一定的妥协和兼容,比如不需要数据的实时强一致性,只是保证最终一致性。
    1. 跨国多机房
      和跨城多机房类似,只是地理上分布更远,时延更大。由于时延太大和用户跨国访问实在太慢,跨国多机房一般仅用于备份和服务本国用户。

多中心

多中心必须以多机房为前提,但从设计的角度来看,多中心相比多机房是本质上的飞越,难度也高出一个等级。
多中心设计的关键就在于“数据一致性”“数据事务性”如何保证,这两个难点都和业务紧密相关,目前没有很成熟的且通用的解决方案,需要基于业务的特性进行详细的分析和设计,

PS:为什么可以购买负载均衡和 CDN 服务,但却不能购买多机房和多中心服务?

负载均衡和cdn基本是和业务无关,具有通用性,而每个业务对数据的一致性和事务要求都不一样,需要单独设计,所以无法将多机房和多中心作为基础服务对外提供

像车联网这种业务,拥有上百万的车载终端,车端会实时上传当前数据,同时服务器会需要控制单独某台车(下行消息),这种场景一般采用哪种架构呢?如果采用MQ的话,一般的消息中间件只能支持几千上万的队列,满足不了要求,

通常的做法是将连接管理和消息管理分开,消息队列存储需要下发的消息,连接管理从消息队列取消息然后下发,消息中标识要发给哪台车

posted @ 2022-01-27 16:21  牛犁heart  阅读(315)  评论(0)    收藏  举报