gitbook/趣谈网络协议/docs/12991.md
2022-09-03 22:05:03 +08:00

9.3 KiB
Raw Permalink Blame History

第37讲 | 知识串讲:用双十一的故事串起碎片的网络协议(上)

基本的网络知识我们都讲完了,还记得最初举的那个“双十一”下单的例子吗?这一节开始,我们详细地讲解这个过程,用这个过程串起我们讲过的网络协议。

我把这个过程分为十个阶段从云平台中搭建一个电商开始到BGP路由广播再到DNS域名解析从客户看商品图片到最终下单的整个过程每一步我都会详细讲解。这节我们先来看前三个阶段。

1.部署一个高可用高并发的电商平台

首先,咱们要有个电商平台。假设我们已经有了一个特别大的电商平台,这个平台应该部署在哪里呢?假设我们用公有云,一般公有云会有多个位置,比如在华东、华北、华南都有。毕竟咱们的电商是要服务全国的,当然到处都要部署了。我们把主站点放在华东。

为了每个点都能“雨露均沾”也为了高可用性往往需要有多个机房形成多个可用区Available Zone。由于咱们的应用是分布在两个可用区的所以假如任何一个可用区挂了都不会受影响。

我们来回想数据中心那一节,每个可用区里有一片一片的机柜,每个机柜上有一排一排的服务器,每个机柜都有一个接入交换机,有一个汇聚交换机将多个机柜连在一起。

这些服务器里面部署的都是计算节点每台上面都有Open vSwitch创建的虚拟交换机将来在这台机器上创建的虚拟机都会连到Open vSwitch上。

接下来,你在云计算的界面上创建一个VPCVirtual Private Cloud虚拟私有网络指定一个IP段这样以后你部署的所有应用都会在这个虚拟网络里使用你分配的这个IP段。为了不同的VPC相互隔离每个VPC都会被分配一个VXLAN的ID。尽管不同用户的虚拟机有可能在同一个物理机上但是不同的VPC二层压根儿是不通的。

由于有两个可用区在这个VPC里面要为每一个可用区分配一个Subnet也就是在大的网段里分配两个小的网段。当两个可用区里面网段不同的时候就可以配置路由策略访问另外一个可用区走某一条路由了。

接下来,应该创建数据库持久化层。大部分云平台都会提供PaaS服务也就是说不需要你自己搭建数据库而是采用直接提供数据库的服务并且单机房的主备切换都是默认做好的数据库也是部署在虚拟机里面的只不过从界面上你看不到数据库所在的虚拟机而已。

云平台会给每个Subnet的数据库实例分配一个域名。创建数据库实例的时候需要你指定可用区和Subnet这样创建出来的数据库实例可以通过这个Subnet的私网IP进行访问。

为了分库分表实现高并发的读写,在创建的多个数据库实例之上,会创建一个分布式数据库的实例也需要指定可用区和Subnet还会为分布式数据库分配一个私网IP和域名。

对于数据库这种高可用性比较高的,需要进行跨机房高可用,因而两个可用区都要部署一套,但是只有一个是主,另外一个是备,云平台往往会提供数据库同步工具,将应用写入主的数据同步给备数据库集群。

接下来是创建缓存集群。云平台也会提供PaaS服务也需要每个可用区和Subnet创建一套缓存的数据在内存中由于读写性能要求高一般不要求跨可用区读写。

再往上层就是部署咱们自己写的程序了。基础服务层、组合服务层、Controller层以及Nginx层、API网关等等这些都是部署在虚拟机里面的。它们之间通过RPC相互调用需要到注册中心进行注册。

它们之间的网络通信是虚拟机和虚拟机之间的。如果是同一台物理机则那台物理机上的OVS就能转发过去如果是不同的物理机这台物理机的OVS和另一台物理机的OVS中间有一个VXLAN的隧道将请求转发过去。

再往外就是负载均衡负载均衡也是云平台提供的PaaS服务也是属于某个VPC的部署在虚拟机里面的但是负载均衡有个外网的IP这个外网的IP地址就是在网关节点的外网网口上的。在网关节点上会有NAT规则将外网IP地址转换为VPC里面的私网IP地址通过这些私网IP地址访问到虚拟机上的负载均衡节点然后通过负载均衡节点转发到API网关的节点。

网关节点的外网网口是带公网IP地址的里面有一个虚拟网关转发模块还会有一个OVS将私网IP地址放到VXLAN隧道里面转发到虚拟机上从而实现外网和虚拟机网络之间的互通。

不同的可用区之间,通过核心交换机连在一起,核心交换机之外是边界路由器。

在华北、华东、华南同样也部署了一整套每个地区都创建了VPC这就需要有一种机制将VPC连接到一起。云平台一般会提供硬件的VPC互连的方式当然也可以使用软件互连的方式也就是使用VPN网关通过IPsec VPN将不同地区的不同VPC通过VPN连接起来。

对于不同地区和不同运营商的用户我们希望他能够就近访问到网站而且当一个点出了故障之后我们希望能够在不同的地区之间切换这就需要有智能DNS这个也是云平台提供的。

对于一些静态资源可以保持在对象存储里面通过CDN下发到边缘节点这样客户端就能尽快加载出来。

2.大声告诉全世界,可以到我这里买东西

当电商应用搭建完毕之后,接下来需要将如何访问到这个电商网站广播给全网。

刚才那张图画的是一个可用区的情况,对于多个可用区的情况,我们可以隐去计算节点的情况,将外网访问区域放大。

外网IP是放在虚拟网关的外网网口上的这个IP如何让全世界知道呢当然是通过BGP路由协议了。

每个可用区都有自己的汇聚交换机如果机器数目比较多可以直接用核心交换机每个Region也有自己的核心交换区域。

在核心交换外面是安全设备然后就是边界路由器。边界路由器会和多个运营商连接从而每个运营商都能够访问到这个网站。边界路由器可以通过BGP协议将自己数据中心里面的外网IP向外广播也就是告诉全世界如果要访问这些外网IP都来我这里。

每个运营商也有很多的路由器、很多的点于是就可以将如何到达这些IP地址的路由信息广播到全国乃至全世界。

3.打开手机来上网,域名解析得地址

这个时候不但你的这个网站的IP地址全世界都知道了你打的广告可能大家也都看到了于是有客户下载App来买东西了。

客户的手机开机以后在附近寻找基站eNodeB发送请求申请上网。基站将请求发给MMEMME对手机进行认证和鉴权还会请求HSS看有没有钱看看是在哪里上网。

当MME通过了手机的认证之后开始建立隧道建设的数据通路分两段路其实是两个隧道。一段是从eNodeB到SGW第二段是从SGW到PGW在PGW之外就是互联网。

PGW会为手机分配一个IP地址手机上网都是带着这个IP地址的。

当在手机上面打开一个App的时候首先要做的事情就是解析这个网站的域名。

在手机运营商所在的互联网区域里有一个本地的DNS手机会向这个DNS请求解析DNS。当这个DNS本地有缓存则直接返回如果没有缓存本地DNS才需要递归地从根DNS服务器查到.com的顶级域名服务器最终查到权威DNS服务器。

如果你使用云平台的时候配置了智能DNS和全局负载均衡在权威DNS服务中一般是通过配置CNAME的方式我们可以起一个别名例如 vip.yourcomany.com 然后告诉本地DNS服务器让它请求GSLB解析这个域名GSLB就可以在解析这个域名的过程中通过自己的策略实现负载均衡。

GSLB通过查看请求它的本地DNS服务器所在的运营商和地址就知道用户所在的运营商和地址然后将距离用户位置比较近的Region里面三个负载均衡SLB的公网IP地址返回给本地DNS服务器。本地DNS解析器将结果缓存后返回给客户端。

对于手机App来说可以绕过刚才的传统DNS解析机制直接只要HTTPDNS服务通过直接调用HTTPDNS服务器得到这三个SLB的公网IP地址。

经过了如此复杂的过程咱们的万里长征还没迈出第一步刚刚得到IP地址包还没发呢话说手机App拿到了公网IP地址接下来应该做什么呢

欢迎你留言和我讨论。趣谈网络协议,我们下期见!