暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术创想 | 用户中心 AWS WAF & CloudFront加速实践

领创集团Advance Group 2022-01-13
5276

目录

1 业务背

2 解决思路

CloudFront CDN 架构

3.1 CDN优势
3.2 用户请求站点基本逻辑
3.3 可用性的提升
4 AWS WAF
4.1 AWS WAF 基本工作原理
5 安全加速实践拓扑
6 接入 CDN 后的检验结果
6.1 分配最近的 CDN 节点
6.2 访问速度的提升

 

业务背景

公司内部用户中心系统承接所有内部系统的用户登录,鉴权工作,每日用户在前端和接口调用量随着业务增长和内部系统增加,访问量稳步上升,对用户中心系统的访问接入速度,稳定性,可用性要求越来越高。且系统直接暴露在公网上,面临各种用户名,密码的暴力破解等安全性问题。

解决思路

对于现有问题的收集,主要从以下两方面进行优化:

  • 速度:通过接入 CDN 提升系统整体访问速度,利用CDN边缘节点加速位于全球各地的用户以及系统接入速度。
  • 安全:通过接入 WAF 提升系统整体安全性,利用AWS WAF插拔模块的特性,将AWS WAF以模块的形式插在CloudFront 上。

这样既解决目前位于全球各地用户的整体访问速度,又能利用WAF的功能实现基本的安全防护。

CloudFront CDN 架构

3.1 CDN优势

  • 提高安全性
    使用 CloudFront 实现外围保护、流量加密和访问控制。为了保护应用程序,将 AWS WAF的托管规则和托管的第三方防火墙规则选项集成到 CloudFront 节点中以实现其安全性。
  • 减少延迟

    通过aws 全球PoP节点通过完全冗余的边缘节点进行连接,可为终端用户提供超低延迟的性能和高可用性。在提供静态内容缓存或动态分发内容时,CloudFront 会自动映射网络状况并智能地路由用户的流量至最优的边缘CDN节点。

  • 利用AWS 全球网络基础设施移动动态 Web 内容以加快分发速度

3.2 用户请求站点基本逻辑

  • 入 CDN 之前的请求访问链路图,每个用户在请求服务端时,都需要分别和服务端建立 TCP 连接。

  • 入 CDN 之后的请求访问链路图,当第一个用户请求过一次后,CDN节点已经和源站服务端建立了 TCP 连接,此时第二个用户在进行请求时,用户只需和 CDN 节点建立 TCP 连接,而 CDN 节点可以利用之前已经建立的 TCP 连接和源站服务端进行通信,相应的减少了之后访问该 CDN 节点的用户的整体请求时间。

3.3 可用性的提升

当站点未接入 CDN 时,用户的访问路径是直接通过公网访问到源站服务器,因公网的不可确定因素比较多,难免会出现网络抖动导致请求缓慢或失败;当站点接入 CDN 后,用户通过 DNS 解析到距离自己最近的 CDN 节点,通过和 CDN 建立连接后,如果 CDN 节点已经有需要的缓存结果,则从 CDN 节点直接返回给用户;如果 CDN 节点没有缓存结果或结果已过期,则 CDN 节点会将请求回源到源站进行请求。

经过 CDN 的请求主要分为两类:

  • 静态内容主要指 html/js/css 等前端静态页面所需文件。
  • 动态内容主要指后端 API 接口响应的内容。

AWS Cloudfront 产品同时支持静态内容和动态内容的加速和缓存。

当用户请求到 CDN 节点时,如果缓存内容已经过期,此时请求会进行回源,如果源站响应错误,返回5xx报错,CDN 节点会捕获5xx报错,给用户返回之前缓存的内容,以对用户降低不可用性。


AWS WAF
  • 提高网络流量可见性

    Amazon WAF 通过捕获每个被检查的 Web 请求的完整标头数据来提供全面的日志记录,以便用于安全自动化、分析或审计目的。

  • 用托管规则节省维护成本
    可以快速选择已有托管规则开始并保护 Web 应用程序或 API 免受常见威胁的攻击,并且利用流量日志捕获被的日志进行自定义规则实现。
  • 易于部署和维护
    WAF 以可插拔模块的形式,可被轻松应用于Application LoadBlancer 或者CloudFront 当中
4.1 AWS WAF 基本工作原理

ps:以上工作原理图示来源于aws官网

安全加速实践拓扑

如图所示,大概分为以下几步:
  • CloudFront 回源指向源站系统接入CDN之前的NLB。

  • WAF 配置以托管规则加载,并以插拔模块的形式接入CloudFront。

  • EC2 中运行Nginx 对源站所有静态内容配置Expires 头,其他非静态内容配置Cache-Crontrol头,并由CDN节点返回给用户终端节点。

  • 当用户请求目标系统时,CDN边缘节点会和用户终端建联,WAF会对请求进行安全扫描并决定是否放行。


接入 CDN 后的检验结果
6.1 分配最近的 CDN 节点
从 CloudFront 的工作原理来看,其解析的边缘节点是随着用户的接入地点而动态发生变化的。AWS 会根据用户所在地,为用户自动匹配一条“最优”的路径进入 AWS 骨干网,从而实现访问目标网站的加速。本质上是一种路由优化,可以通过 dig 命令来观察这一点。
以下是在海外(HK)服务器环境下,查看接入 CloudFront 网站的 DNS 解析记录,可以看到解析到的第一个 IP 是54.230.x.x,位于香港。因为网络出口在香港,所以就近分配到香港节点。
在 AWS 新加坡区服务器上执行 dig 命令,可以看到解析到的第一个 IP 地址是 13.227.x.x,通过查询,可以看到解析的地址为新加坡,也符合预期
6.2 访问速度的提升
根据上面实验的结果,可以看到,CloudFront 为用户提供的就近的访问地址,我们也通过实验初步统计了接入 CloudFront 对网站访问速度的影响。
经过 CloudFront 加速后,用户中心 的访问速度在不同场景下都有明显的提升,如上图所示。
在家庭环境下(未开启 VPN),用户中心系统 访问是最慢的,其响应时间是最长的,平均达到 4.68 秒之久,经过加速后,降低到 1.72,有了明显的提升。从绝对数字来看,访问用户中心系统依然比较慢。分析原因可能是因为当时网络质量较差导致的。
其他环境下,请求速度也有较大程度的提交的。其中,咖啡馆响应时间由 1.68秒减少到 0.97秒, 联通 4G 热点场景下,响应时间由 0.70 秒降低到 0.48秒,办公室内,请求响应时间由 0.64 秒降低到 0.30 秒。
整体来看,CloudFront 对用户中心的访问有较为明显的提升,达到预期的效果。

实验方案描述

使用 curl 命令并输出每个阶段耗费的时间,命令如下:

curl-o dev/null -s -w '%{time_namelookup}, %{time_connect}, %{time_appconnect}, %{time_redirect},%{time_pretransfer},%{time_starttransfer},%{time_total}' ‘https://example.com’(网址链接)

每次循环执行 100 次,取平均值。

字段说明

time_namelookup:DNS 域名解析耗时

time_connect:从开始到 TCP 连接建立耗时
time_appconnect:从开始到 SSL/SSH等 连接/握手耗时
time_redirect:从开始到所有重定向步骤耗时
time_pretransfer:从开始到文件传输即将开始所用的时间
time_starttransfer:从请求开始到第一个字节将要传输的时间

time_total:这次请求花费的全部时间

实验说明:由于网络环境是动态变化的,本测试结果仅为当日网络实际表现,不代表其他时间、地点可以有同样的结果。

关于领创集团
(Advance Intelligence Group)
领创集团成立于2016年,致力于通过科技创新的本地化应用,改造和重塑金融和零售行业,以多元化的业务布局打造一个服务于消费者、企业和商户的生态圈。集团旗下包含企业业务和消费者业务两大板块,企业业务包含ADVANCE.AI和Ginee,分别为银行、金融、金融科技、零售和电商行业客户提供基于AI技术的数字身份验证、风险管理产品和全渠道电商服务解决方案;消费者业务Atome Financial包括亚洲最大的先享后付平台Atome和数字信贷服务。2021年9月,领创集团宣布完成超4亿美元D轮融资,融资完成后领创集团估值已超20亿美元,成为新加坡最大的独立科技创业公司之一。
往期回顾
BREAK AWAY





技术创想 | Python 事件循环及协程原理

技术创想 | Atome 实用主义性能优化盘点-缓存篇


   一个空格引发的DuplicatekeyException


   

文章转载自领创集团Advance Group,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论