应用交付网络方案
业务系统服务端部署于阿里云上,访问者如何找到服务并流畅地访问服务,本文重点阐述访问者和服务端之间的网络方案,即应用交付网络方案。
1 背景和概念
1.1 什么是应用交付网络?
“移动互联网和微服务化,催熟了应用交付网络技术”。我们使用的每一个互联网应用背后,都依赖应用交付网络技术支撑。
首先,请从客户端-服务端访问模型的宏观角度感受一下什么是应用交付网络:

1)客户端,20年前没有无线智能终端设备,终端基本就是个人PC、里面基本也就是一个浏览器客户端;10年前(2014年)中国正式进入4G移动网络时代(带宽、速率提升到足以支撑应用、视频等App的使用),客户端种类变得丰富起来;现在我们的移动客户端上应用安装的数量可达几个屏幕、可以说只有你想不到的、没有你下载不到的。各种社交App、支付App、购物App、视频App等。
2)服务端,一个App的功能越来越多(短视频App里面有直播、电商、评论等,电商App里面有各种频道等等),这意味着服务端从单线程→多线程→微服务演进。
那么,这么多的客户端App、这么多的服务端微服务,二者异地分隔、遥遥相望,如何能让你在客户端上的每一次点击和滑动都能快速地找到服务端的服务并得到响应?---------这就依赖于连接客户端和服务端的应用交付网络实现网络加速、负载均衡、安全防护、可观测性等关键特性。
我们再从微观分解看看:

从客户端到服务端的一次请求的报文(数据包)之旅来看:客户端App要投递的数据报文需经过源端的TCP/IP协议栈(应用层、传输层、网络层)、再经过中间的互联网络和网络设备、到达服务端后再通过TCP/IP协议栈一层一层送达到服务端进程或微服务程序。那么这个传输过程中,如何找到服务IP(服务器)、服务端口(服务进程)、URL(服务处理组件)等,并快速、准确地投递送达过去?这个就要靠应用交付网络技术。
1.2 应用交付网络的作用?
1)服务发现(Service Discovery)
根据服务端(Server)不同的类型(ECS、容器POD、IDC内服务器等)和不同的网络层级(L4的TCP或UDP、L7的HTTP或HTTPS等),服务发现所用的技术和产品也不相同。

2)服务连通(Service Connectivity)
IP层的网络连通是靠路由寻址和选路来实现的,IP层之上的网络连通主要依靠“代理”来实现,因为代理除了能实现网络连通之外,还具备以下应用交付所需的能力:
• TLS termination
• Load balancing
• Authentication/authorization
• Tracing, logging
• Security
• Application traffic capture
• 加速

阿里云上,有不同的“网络代理”产品来实现服务连通:

所以,针对不同服务端(Server)类型(ECS、容器POD、IDC内服务器等)、应用服务所处的不同网络层级(L4的TCP或UDP、L7的HTTP或HTTPS等),使用不同的“网络代理”产品来构建不同的应用交付网络方案。
注:本文介绍的应用交付网络方案专指和互联网服务相关的,企业内部的内网应用交付网络不具备典型性在此不做介绍。
2 本方案目标客户
互联网行业客户
即通过互联网进行信息交流、服务提供、产品销售等一系列活动的产业集合。如:电子商务、社交媒体、搜索引擎、在线娱乐、物联网(IoT)、金融科技(Fintech)等。
这类客户首先需要解决客户端如何发现互联网上的这些服务、并且能够流畅地访问服务的问题。
非互联网行业(传统泛企业)但使用互联网访问企业内部信息化系统的客户
随着互联网技术的发展,企业内部的信息化系统(企业资源规划(ERP)、客户关系管理(CRM)、供应链管理(SCM)、办公自动化(OA)等),越来越多地依赖于互联网接入来提升对客户端网络的覆盖。
这类客户同样也是互联网访问,也需要解决服务发现和服务连通的问题。
3 方案介绍
根据服务端(Server)类型(ECS、IDC内服务器、容器POD等)和应用服务所处的不同网络层级(L4的TCP或UDP、L7的HTTP或HTTPS等),我们提供不同应用交付网络方案。
3.1 云服务器ECS的应用交付网络方案

1、场景方案选择
用阿里云上ECS做Web Server,即:Application安装在ECS中。NLB挂载ECS、通过NLB的EIP+4层PORT提供互联网访问。上图1
用阿里云上ECS做Web Server,即:Application安装在ECS中。ALB挂载ECS、通过ALB的7层监听和转发提供互联网的Url访问。上图2
用阿里云上ECS做Web Server,即:Application安装在ECS中。如果7层自研和定制化有较高要求,选择4层NLB+自建7层代理方式。NLB挂载自建的7层代理、通过NLB的EIP+4层PORT提供互联网访问,7层URL的转发由自建7层代理完成。上图3
2、NLB/ALB物理位置选择
Region:尽量和ECS在同地,如果有贴近客户端加速需求或跨地域公网出口容灾需求时可以跨地域部署
可用区:多可用区,尽量和ECS相同以便于同可用区转发时延最短
对NLB/ALB的访问尽量使用其自带的域名方式:可用区故障后可以自动摘除故障的VIP
3、NLB/ALB和后端Real Server之间的网络
尽量同VPC、可以支持跨VPC或跨地域中间使用TR等方式使私网路由可达,具体参见VPC内网络设计和全球互联网络设计
4、安全防护设计【可选】
安全组:NLB/ALB可以加入安全组实现黑白名单策略
VPC的NACL:可以支持到私网NLB/ALB的VIP的访问流量过滤
DDoS&WAF:公网NLB/ALB的EIP前端可以挂DDoS和WAF防护
3.2 IDC服务器(公网出口用阿里云)的应用交付网络方案

场景方案选择
用IDC服务器做Web Server,即:Application安装在IDC服务器、通过4层PORT暴露服务,互联网服务入口使用阿里云。NLB通过EIP或域名承接互联网访问、转发请求到IDC服务器。上图1
用IDC服务器做Web Server,即:Application安装在IDC服务器、通过URL暴露服务、互联网服务入口使用阿里云。ALB直接挂载IDC服务器、通过ALB的7层监听和转发提供互联网的Url访问,ALB通过EIP或域名承接互联网访问。上图2
用IDC服务器做Web Server,即:Application安装在IDC服务器、通过URL暴露服务、互联网服务入口使用阿里云。NLB挂载自建的7层代理(在阿里云上)、通过NLB的EIP+4层PORT提供互联网访问,7层URL的转发由自建7层代理完成。NLB通过EIP或域名承接互联网访问。上图3
用IDC服务器做Web Server,即:Application安装在IDC服务器、通过URL暴露服务、互联网服务入口使用阿里云。NLB挂载自建的7层代理(在IDC)、通过NLB的EIP+4层PORT提供互联网访问,7层URL的转发由自建7层代理完成。NLB通过EIP或域名承接互联网访问。上图4
1、NLB/ALB物理位置选择
Region:尽量和ECS在同地,如果有贴近客户端加速需求或跨地域公网出口容灾需求时可以跨地域部署
可用区:多可用区,尽量和ECS相同以便于同可用区转发时延最短
对NLB/ALB的访问尽量使用其自带的域名方式:可用区故障后可以自动摘除故障的VIP
2、NLB/ALB和后端Real Server之间的网络
尽量同VPC、可以支持跨VPC或跨地域中间使用TR等方式使私网路由可达,具体参见VPC内网络设计和全球互联网络设计
NLB直接挂载IDC服务器时,不能直接透传报文源IP,需要使用Protocol Proxy或TOA方式携带
ALB直接挂载IDC服务器时,不能直接透传报文源IP,需要使用HTTP头的XFF字段携带
3、安全防护设计【可选】
安全组:NLB/ALB可以加入安全组实现黑白名单策略
VPC的NACL:可以支持到私网NLB/ALB的VIP的访问流量过滤
DDoS&WAF:公网NLB/ALB的EIP前端可以挂DDoS和WAF防护
3.3 容器POD的应用交付网络方案


场景方案选择
用阿里云上容器ACK的POD做Web Server,即:Application安装在ACK的POD中、 4层服务通过LoadBalancer暴露。NLB做LoadBalancer角色,被ACK集群的Cloud-Controller-Manager纳管。上图1
用阿里云上容器ACK的POD做Web Server,即:Application安装在ACK的POD中、 7层服务通过ALB Ingress暴露,ALB通过EIP或域名,承接互联网访问。上图2
用阿里云上容器ACK的POD做Web Server,即:Application安装在ACK的POD中、7层服务通过Nginx Ingress暴露。NLB做南北网关,对外暴露EIP或域名,将互联网访问引流到Nginx Ingress上。用Nginx自建Ingress、定制化能力强,适合需要复杂功能且技术实力深厚的客户。上图3
用阿里云上容器ACK的POD做Web Server,即:Application安装在ACK的POD中、7层服务通过MSE Ingress暴露。NLB做南北网关,对外暴露EIP或域名,将互联网访问引流到MSE上。适合需要复杂Ingress功能、又不想自己运维的客户。上图4
1、NLB做LoadBalancer类型Service,提供L4层服务
ACK集群的Cloud-Controller-Manager(简称CCM)管理NLB
可以通过ACK控制台或kubectl(YAML脚本)配置NLB
通过Service YAML文件中的Annotation(注解)可以实现丰富的负载均衡功能配置,参考链接:通过Annotation配置网络型负载均衡NLB
注意NLB配额限制:产品性能及使用限制
2、ALB做Ingress类型Service,提供L7层服务
ACK集群的Alb-Ingress-Controller通过AlbConfig(CRD)来管理ALB。ALB配置词典:ALB Ingress配置词典
因为ALB自身具备南北流量入口、负载均衡、高可靠能力,所以不需要额外创建LoadBalancer Service
注意ALB配额限制:ALB配额计算方式
3、NLB做南北网关,引流到Nginx Ingress Controller提供L7层服务
ACK集群的Nginx-Ingress-Controller管理NLB,以NLB实例创建LoadBalancer Service,作为南北网关(南北流量入口、4层流量负载分发、跨可用区高可靠)
4、NLB做南北网关,引流到MSE提供L7层服务
ACK集群的MSE-Ingress-Controller管理NLB,以NLB实例创建LoadBalancer Service,作为南北网关(南北流量入口、4层流量负载分发、跨可用区高可靠)
3.4 客户端到负载均衡SLB的广域网加速
负载均衡仅仅解决了访问请求进入阿里云之后如何到达后端服务的服务发现和服务连通问题,某些情况下为了改善客户端到负载均衡之间的网络质量,还需要广域网加速方案。
【方案概述】全球加速GA在加速区域(上车点)部署反向代理、将客户端流量就近吸入、利用阿里云全球网络(专线互联:丢包少、抖动小、时延低)传送回Server,同时对TCP、HTTP等协议自动调优。

1、GA实例付费类型选择
用量稳定选包年包月,无法预估用量或用量波动明显选按量付费
2、接入方式选择
CNAME方式【推荐】:将业务域名的权威DNS的默认解析记录CNAME到GA的加速域名(1、加速域名会按地域智能解析;2、如果加速IP不可达,GA会摘除此IP的解析记录实现自动容灾切换)
加速IP方式:1、客户端直接访问加速IP(无域名业务);2、权威DNS中A记录解析到加速IP,需要DNS支持按地域智能解析、当加速IP不可达时手动删除此A记录或使用带健康检查的DNS实现自动容灾切换)
3、加速区域设计
加速区域选择:就近客户端选择一个或多个,当无法判断时可以使用NIS产品控制>性能观测>互联网访问性能工具进行公网质量测量
公网质量类型选择:默认为BGP(多线),需要海外公网回国优化时可以选择BGP(精品)
公网付费方式:用量稳定选按带宽,无法预估用量或用量波动明显选按流量
4、监听设计
监听协议选择:支持tcp/udp/http/https。不同域名/路径到不同源站时选http[s]、到相同源站时可选择tcp
监听路由选择:1)默认选择智能路由类型;2)自定义路由类型可以实现监听端口到后端源站IP+端口的精确映射转发(如游戏、会议根据端口分房)
高级特性:1)同一服务多源站时可以使用客户端亲和性设置将同一客户端请求路由到同一源站;2)附加HTTP头字段可以附带更多客户端信息(如客户端源IP)
5、回源站设计
同一业务多地域源站部署时(如多地域源站主备容灾、多地域源站负载分担、多地域源站就近覆盖客户端、源站跨地域平滑迁移等),使用多地域终端节点组+优先级配置+流量调度百分比+源站健康检查实现
6、高级转发策略设计
创建监听后,系统会自动创建一条默认的转发策略关联到默认终端节点组
如果需要更精细的转发条件(域名、路径、HTTP标头、HTTP请求方法、Cookie、SourceIP、查询字符串)或更多的转发动作(转发至、重定向至、返回固定响应、重写、写入Header、删除Header、丢弃(阻断流量)),可以自定义转发策略及匹配优先级
7、跨境网络选择
跨境:加速区域和源站,一端中国内地、另一端非中国内地。GA提供2种跨境网络:
精品带宽:使用BGP精品线路轻负载、拥塞少的网络跨境
联通专线:比BGP精品线路效果好,需要向联通申请跨境业务合规认证、并且源站域名要在中国内地有ICP备案
网络使用按流量计费时,默认使用精品带宽跨境,符合条件的业务可以手动切换到联通专线跨境来提升加速效果
网络使用按带宽计费时,符合条件的业务需要手动购买联跨域带宽包(通专线跨境)来提升加速效果;不符合条件的业务购买基础带宽包-精品加速带宽
8、运维设计【可选&推荐】
GA的访问日志:可以针对监听+终端节点组开启访问日志,客户端源IP、客户端源端口、目的IP、目的端口、加速地域等字段信息会记录到sls中(SLS有费用)
监控及告警:GA实例可以开启流量、带宽等监控并配置告警
探测与诊断:GA实例配置部署完成后,可以使用实例诊断确认部署是否正确。业务运行期间,开启源站探测可以监控业务可用度,当业务可用度下降时可以开启网络诊断确定是否是网络问题
9、安全防护设计【可选】
GA的访问控制列表:每个监听可以绑定访问控制策略组实现黑白名单机制
关联DDoS:全球加速实例的加速IP默认免费开启了DDoS基础防护,在实例详情页,单击加速区域页签,找到目标加速IP,在加速IP或安全防护列可以查看防护阈值
关联WAF:在GA和源站之间可以部署WAF防护
4 产品选型
4.1 SLB产品选型对比
SLB选型 对比 | 传统型负载均衡CLB | 应用型负载均衡ALB | 网络型负载均衡NLB |
产品定位 |
|
|
|
性能 |
|
|
|
功能特性 |
|
|
|
可靠性 |
|
|
|
云原生支持 |
|
|
|
典型应用场景 |
|
|
|
4.2 容器入口Ingress服务选型对比
维度 | Nginx Ingress | ALB Ingress |
定位 |
|
|
性能 |
|
|
配置 |
|
|
功能 |
|
|
安全 |
|
|
运维 |
|
|
5 应用场景
满足如下2个条件的所有场景:
客户服务端部署在阿里云或IDC、通过阿里云接入互联网;
让他的用户能够通过互联网流畅、安全、可靠地访问到服务端。