业务流量高峰处理架构.

业务流量高峰处理架构设计v1.5

第一章 业务高峰流量处理概述

业务高峰面临的挑战

高峰流量场景分类:

  • 日常高并发
  • 突发流量
  • 正常高峰流量
  • 攻击流量
  • 异常高峰流量

什么是高峰流量场景?

  • 收银员就是我们的服务,同一时间,排队人数过多,需要处理的任务过多,收银员就忙不过来了,对于系统而言,指的是短时间内终端的高并发访问,导致系统的高负载压力。

思考如何提高收银服务的处理能力?

  • 其一是提高收银员的处理速度,他们处理的越快,单位时间内就能服务更多的顾客;
  • 其二是增加人手,一名收银员处理不过来,我们就雇十名收银员,十名不够我们就雇佣一百名(如果不计成本);
  • 其三是减少访问人数,也即分流过滤,将一些人提前过滤掉,或做活动预热(比如双十一预热),在高峰之前先满足一部分人的需求。

高峰流量可能带来的问题:

  • 服务能力下降,访问延迟,用户体验差
  • 整体系统性能下降
  • 服务宕机,系统雪崩,导致服务不可用
  • 异常流量攻击,安全受威胁

如何应对高峰流量处理场景?

业务流量高峰处理规划

高峰流量场景应对思路:

  • 服务分级:对企业业务进行分级规划,不同业务设置不同的可用性、可靠性规划;
  • 业务隔离:核心业务和普通业务隔离部署,高峰场景业务和其他业务隔离;
  • 分层设计系统架构:接入层-应用层-中间件层-数据层
  • 容量规划:高峰场景业务按流量高峰做容量规划(横向和纵向容量);
  • 服务降级:保证核心业务可用,非核心业务弱可用或不可用;
  • 异步处理:通过消息队列异步处理,削峰填谷,降低瞬时服务压力;
  • 分时分段策略:从业务侧规划,分时段提供服务,降低瞬时峰值;
  • 异常流量:采用DDoS防护等流量清洗产品进行狙击;

应对流量高峰的分层架构设计:

用户通过浏览器作为访问入口,结合智能DNS调度解析,就近接入网络,通过负载均衡接入访问应用服务器,应用服务器和数据库之间经过缓存,消息中间件等进行连接,后端提供数据存储服务功能。

应对流量高峰的策略除了业务侧进行服务分级,限流,熔断等机制外,技术手段比如容量规划,容灾考虑等按照分层的策略进行落地。

高峰流量处理产品清单:

  • 用户接入层:CDN缓存、DNS解析地域分流
  • 应用接入层:CLB负载均衡
  • Web及服务层:AS弹性伸缩、业务解耦
  • 缓存层:Redis
  • 异步处理:CMQ、Ckafka消息队列
  • 数据层:COS、云数据库
  • 异常流量安全:大禹

第二章 用户及应用接入高峰处理

用户及应用高并发接入面临的问题

压力分为:目标服务器+接入链路 两个层级

  • 目标服务器:
    • 对TPS / QPS / 最大并发连接数 / 吞吐量的挑战
    • 服务器节点单点故障
  • 接入链路:
    • 链路规划:局部最优解≠全局最优解,用户之间争抢优势链路资源
    • 重复请求:不同用户请求的内容大量重复,多余的传输成本
    • 跨运营商网络接入

用户及应用接入高并发应对思路

目标服务器优化:

  • 集群+负载均衡
  • 内容静态化,通过其他服务器或缓存提供,多级缓存减少服务器/数据库访问量
  • 业务拆分,妥协服务质量/数据强一致性

接入链路优化:

  • 综合考虑距离、流量负载、网络质量,实现全局级别的链路选择优化
  • 读写分离,动静分离
    • 静态/只读内容由缓存服务器提供
    • 多使用静态页面,减少对数据库的访问

基于腾讯云产品的用户及接入设计

CDN-GLSB全局调度系统: 节点测速用户
普通用户
域名解析系统
服务器状态检测系统
用户测速系统
页面配置系统
调度决策模块 用户在请求资源的过程中,可能受到网络、地域、带宽等影响,无法保证请求一定是按照最优访问路径进行传递,腾讯云 CDN 通过对全网链路进行实时监控,结合自研的 GSLB 调度体系和智能路由技术,从以下几个方面优化用户访问体验:

  • 最优接入:通过腾讯云 GSLB 调度体系,用户请求会调度至最近最优的 CDN 节点,保证用户能够快速的获取所需资源。加速域名接入后,按照实际访问情况动态调度节点服务于用户业务。
  • 最优回源:当请求调度至的节点未缓存所需资源时,该节点需要回源站获取资源。腾讯云CDN 根据全网实时状态监控以及智能路由技术,选择最优的回源链路,保证快速获取资源;
  • 动态加速:用户发起动态请求,如登录时,此类请求无法通过节点进行加速,需要直接透明传输至源站。腾讯云 CDN 也为此类请求提供最优的网络链路,有效避开质量较差、较拥堵链路,速度提升可达20%

CDN缓存处理架构 为了能够让您发布的内容更快的触达用户,腾讯云 CDN 在全国各省份部署了1100+个加速节点,涵盖了移动、联通、电信等主流运营商,以及铁通、长宽等多家中小型运营商。总节点带宽80T+,储备带宽120T+,完美解决地域、网络、源站性能等多因素引起的用户访问延迟较高、不稳定等问题。 腾讯云 CDN 提供了200+个境外节点,覆盖全球50+个国家和地区,支持您的业务无缝出海。 加速场景

  • 静态加速
  • 动态加速
  • 海外加速
  • 安全加速

静态加速:

  • 网站加速:CDN结合智能DNS调度系统,针对门户网站、电商、UGC 社区等业务场景,提供了强大的静态内容(如网页样式、图片、小文件)加速分发处理能力,显著提升了网页用户的体验。
  • 下载加速:CDN针对游戏安装包获取、手机 ROM 升级、应用程序包下载等业务场景,提供稳定、优质的下载加速。海量弹性带宽储备,具备突发性超大流量承载能力,让业务用户获得极速的下载体验。
  • 音视频加速:针对在线音视频播放业务场景,依托腾讯多年在线视频运营经验,支撑高峰期海量并发,有效保证服务的高可用性和媒体传输速度,提供稳定、流畅、丰富的观看体验。

动态加速: 您可以使用 CVM 承载服务端的计算逻辑,利用 DSA 强大的全球动态加速能力,将来自世界各地的用户请求极速传递源站。结合对象存储 COS 存放海量商品图片、视频文件,通过 CDN 进行静态、流媒体加速,有效缩短内容加载时间,提升用户体验。 海外加速: 海外加速提供静态、下载、音视频等多种加速业务及整体解决方案。腾讯自研 GSLB 全球调度系统,将用户请求精准调度至最优海外加速节点;腾讯云海外加速网络采用边缘节点、区域中心两级架构,通过节点间智能路由与专项路径优化,进一步提升加速效果。 安全加速: 用户请求到达安全加速网络,各安全节点均加载自定义精准访问控制策略,仅允许匹配规则请求访问。分布式高防清洗节点进行 DDoS 攻击清洗,WAF 集群进行网站安全防护检测,阻断恶意请求到达客户源站。 云解析:

  • 新一代高性能DNS服务端程序,为您提供稳定的解析服务,解析速度超出主流解析的上百倍。
  • 宙斯盾防护系统全覆盖;多种专利防护算法;拥有200G的DNS攻击防护能力,是大数据时代最可靠的网站安全专家。

HttpDNS:

  • 接入节点覆盖国内Top17运营商、东南亚及北美,解析精准,访问迅速;
  • 精确识别来源请求,访问导向最准确节点;
  • 一个IP三地集群容灾,秒级自动故障切换,服务提供99%以上的SLA;
  • 绕开运营商Local DNS,无劫持,防止DNS被污染拦截;

多地域流量分流:

  • 将业务流量解析到全局各个地域的负载均衡,保障异地多活和容灾,同时也减轻了单一地域服务器的负载压力;

多地域流量分流:

  • 可以在不同地域部署负载均衡实例, 并分别绑定对应地域的云服务器。
  • 使用云解析将域名解析到各个地域的负载均衡 VIP 下。
  • 业务流量会通过域名解析和负载均衡转发到多个地域的多个云服务器上,以此实现全局负载均衡。
  • 当某个地域不可用时,暂停对应地域负载均衡 VIP 的解析即可保障业务不受影响。

负载均衡 负载均衡通过调度算法将访问请求分配给不同的后端服务器:

  • 加权轮询算法
  • 加权最小连接数算法
  • 源地址散列调度算法

负载均衡服务是否优秀,主要是由以下维度的性能测试指标来评判的:

  • TPS(每秒新建连接数):负载均衡实例每秒新建 TCP 连接的能力。
  • 最大并发连接数:并发连接数指的是客户端向服务器发起请求并建立了 TCP 连接的总数。亦即每秒钟服务器链接的总 TCP 数量。
  • QPS(query per second):也可以叫 RPS,每秒请求。请求数指客户端在建立完连接后,向 HTTP 服务发出 GET/POST/HEAD 数据包。
  • 吞吐量:负载均衡实例可支持的总的流量带宽。

CLB性能评价指标:

  • TPS、最大并发连接数
  • QPS、吞吐量

CLB在解决高峰流量方面的性能:

  • 负载均衡单集群提供超过1.2亿的最大连接数,轻松应对亿级 Web 业务访问量。
  • 负载均衡单集群可处理峰值40Gb/s的流量,每秒处理包量(PPS)可达600万。
  • 对每个租户的流量进行严格隔离,提供主动 DDoS 防护能力。当遭遇 DDoS 攻击时,腾讯云负载均衡能为您免费提供2Gb - 10Gb DDoS 攻击峰值流量的防御能力。
  • 如果对峰值流量有更高的要求,可以考虑BGP 高防包,最高可为您提供300Gb攻击峰值流量的防御能力。

通过负载均衡,将业务流量分发到多台云服务器上:

  • 业务的客户端访问负载均衡。
  • 多台云服务器构成一个高性能、高可用的服务池,负载均衡将业务流量转发到这批云服务器上。
  • 当某台或某几台云服务器不可用时,负载均衡可自动屏蔽故障的 CVM 实例,将请求分发给正常运行的 CVM 实例,保障应用系统正常工作。
  • 会话保持功能可将同一客户端的请求转发到同一台后端云服务器,提高访问效率。

高峰流量分担和消除单点:

  • 流量分发,将高访问量的业务通过负载均衡分发到多台云服务器上;
  • 当其中一部分云服务器不可用时,负载均衡可自动屏蔽故障的 CVM 实例,保障应用系统正常工作;

负载均衡结合 弹性伸缩,可为您按需创建和释放 CVM 实例:

  • 您可以设定弹性伸缩策略来管理 CVM 实例数量,完成对实例的环境部署,并保证业务平稳顺利运行。
  • 在需求高峰时,自动增加 CVM 实例数量,以保证性能不受影响;当需求较低时,则会减少 CVM 实例数量以降低成本。
  • 电商行业的的“双11”、“6.18”等大促活动,Web 访问量可能瞬间陡增10倍,且只持续短暂的数小时。使用负载均衡及弹性伸缩能最大限度的节省 IT 成本。

横向扩展分担高峰流量:

  • 横向扩展,根据业务发展的需要,按需扩展应用系统的服务能力,适用于各种 Web Server和 App Server。

在公网应用型负载均最佳实践:

  • 开启 gzip 功能对网页进行压缩,可以有效降低网络传输的数据量,提升客户端浏览器的访问速度。
  • 将SSL证书部署到负载均衡上,验证的过程在CLB上完成,提高用户的访问效率;
  • 短连接场景,CLB适合选择加权轮询算法,提高用户访问效率;
  • 长连接场景,CLB适合选择加权最小连接数,提高用户访问效率;
  • 根据应用特征(比如购物车功能),合理选择会话保持功能,提高用户访问效率;

第三章 web及服务层高峰处理

web及服务层流量高峰面临的问题

资源瓶颈

  • 服务器本身存在的带宽/处理能力上限
  • 雪崩式故障
  • 计划外的突发流量高峰

资源分配

  • 峰谷差异大,闲时资源浪费
  • 资源倾斜,关键资源用在非关键业务上

web及服务层流量高峰的应对思路

服务层:

  • 集群+负载均衡+自动扩(缩)容
  • 最小可用原则:核心功能可用,快速接入,快速完成
  • 消息队列排队,缓冲请求流量

业务层:过滤无效请求

  • 抢红包、商城秒杀等活动,多数流量属于无效请求,在业务层过滤掉,不传到服务器
  • 添加验证码等业务层手段,削平瞬时高峰

基于腾讯云产品的web及服务设计

弹性伸缩AS:

  • 弹性伸缩 AS(Auto Scaling)可以根据您的业务需求和策略,自动调整 CVM 计算资源,确保您拥有适量的 CVM 实例来处理您的应用程序负载。
  • 核心概念回顾:
    • 伸缩组
    • 启动配置
    • 伸缩策略
    • 冷却时间

Web应用的高峰流量处理:

  • 客户端的请求通过负载均衡到达应用服务器,当访问量快速变化时,弹性伸缩服务可根据请求量弹性扩缩应用服务器的数量。
  • 适用于:电商网站、视频网站、在线教育等。

高性能计算集群流量处理:

  • 根据计算量大小实时调整集群服务器数量。
  • 适用于:分布式大数据的计算节点、数据检索服务器等后端计算集群。

请求类服务器高峰流量处理:

  • 由于此类业务具有明显的时效性,可以考虑弹性伸缩服务快速完成请求服务器的创建和缩容。
  • 适用于:发送请求或收集数据的服务器集群。

AS特征及最佳实践:

  • AS可低成本应对业务高峰的浪涌,同时自带健康检查特性,自动替换不健康CVM。
  • 如果伸缩组集群需要:从CLB接受请求,集群机器需要外访,外访希望用固定IP,建议为伸缩组出口设置固定IP;
  • 大部分网站的高峰时间不超过 8 个小时,剩下的 16 个小时的时间,建议把闲置的服务器作缩容处理,即固定服务器+伸缩服务器相结合的方式;
  • 建议为自动扩容的机器设置开机后服务自动启动,实现全程无人工介入;

业务分层解耦对高峰流量处理带来的好处:

  • 业务系统与数据库的分离,单独部署,避免双方资源争抢,同时可以提高可用性;
  • 业务系统可以继续拆分成微服务结构,部署更灵活;
  • 分层解耦的业务系统,在业务洪峰来临时,相比紧耦合的业务架构而言,具备更强的灵活性和扩展性;
  • 解耦后,业务系统聚合度更高,独立开发、测试、部署,更利于通过优化代码结构,提高访问效率。

支持解耦的腾讯云服务

  • 负载均衡
  • 消息队列
  • API网关
  • 无服务器云函数
  • 弹性缓存
  • 分布式服务框架TSF
  • 容器

第四章 数据缓存架构设计

数据缓存架构概述

数据缓存架构: 处理逻辑
应用服务器
缓存cache
应用服务器
master
CLB负载均衡 缓存雪崩: redis集群大面积故障,大量请求转向到mysql数据库,mysql的调用量暴增,超过阈值甚至直接宕机,由于大量应用服务依赖mysql和redis的服务,很快演变成各服务器集群的雪崩,最后网站彻底崩溃;

数据缓存架构应对高峰流量

缓存雪崩的预防:

  • 缓存高可用
  • 缓存降级
  • Redis备份和还原
  • 缓存预热
  • 提前演练

缓存高可用:

  • 缓存层设计成高可用,防止缓存大面积故障。即使个别节点、个别机器、甚至是机房宕掉,依然可以提供服务,例如 Redis Sentinel 和 Redis Cluster 都实现了高可用。

缓存降级:

  • 可以利用ehcache等本地缓存(暂时支持),但主要还是对源服务访问进行限流、资源隔离(熔断)、降级等。当访问量剧增、服务出现问题仍然需要保证服务还是可用的。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级,这里会涉及到运维的配合。

Redis备份和快速预热

  • Redis数据备份和恢复
  • 快速缓存预热

提前演练

  • 建议还是在项目上线前,演练缓存层宕掉后,应用以及后端的负载情况以及可能出现的问题,对高可用提前预演,提前发现问题。

基于腾讯云产品的缓存设计

腾讯云Redis服务

  • 腾讯云Redis服务本身自带高可用、高可靠、高弹性特征,支持集群部署、数据备份还原、预热等功能。

自带高峰流量处理能力:

  • 云数据库 Redis 提供0.25GB - 4TB的容量规格选择,提供标准版和集群版两个版本;
  • 控制台一键式扩容,扩容过程中无需停止服务,用户无需做任何处理;
  • 标准版性能高达10万+ QPS,集群版支持千万级 QPS,超高的性能可以满足用户绝大部分场景需求,非常适用于游戏、移动、广告、电商等开发场景。
  • 云数据库 Redis 采用双机热备架构,主机故障后,访问秒级切换到备机,切换不影响线上业务,整个过程用户无需做任何处理。节省了开发主从系统带来的人力和时间成本。 腾讯云Redis数据库最大支持4TB的存储容量,千万级的并发请求,可满足业务在缓存、存储、计算等不同场景中的需求。

高并发-游戏场景:

  • 可将非角色数据,例如积分排行榜,存储在 Redis 中进行快速访问,Redis 原生自带的 SortedSet 数据类型能帮助您对玩家数据排序。

高并发-互联网APP场景:

  • 互联网、App 应用产品中,可以将用户的基础资料缓存至 Redis 中,提高读性能。同时也可以将静态的图片,资源缓存到 Redis 中,提高应用加载速度。

高并发-电商展示场景:

  • 电商展示中,可以将商品展示、购物推荐等数据存储在 Redis 中进行快速访问,同时在大型促销秒杀活动中,Redis 达千万级的 QPS 能轻松应对高并发访问。

第五章 异步消息队列架构设计

异步消息架构概述

消息队列:

  • 保存消息的一个容器,本质是个队列;
  • 应用场景:
    • 异步处理
    • 应用解耦
    • 流量削峰
    • 日志处理
    • 消息通讯

消息中间件通信过程: 串行处理: 并行处理: 场景说明:用户注册后,需要发注册邮件和注册短信:

  • 串行处理:将注册信息持久化后,发送注册邮件,再发送注册短信。三个业务全部完成后,返回给客户端;
  • 并行处理:将注册信息持久化后,发送注册邮件的同时,发送注册短信。三个业务全部完成后,返回给客户端,与串行的差别是,并行的方式可以提高处理的时间。

假设三个业务节点每个使用100毫秒钟,不考虑其他开销,则串行方式的时间是300ms,并行方式可能是200毫秒。则串行的方式1秒内可处理3次请求,并行方式1秒内可处理5次请求,综上所述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢?

异步消息架构应对高峰流量

高峰流量异步通信过程: 异步处理: 用户的响应时间相当于是注册信息写入数据库的时间和将消息插入消息队列,也就是105毫秒。注册邮件,发送短信消息写入队列后,直接返回。如此消息队列异步处理后,1秒内可处理9次请求。大大提高了系统的性能。 流量削峰处理过程: 流量削峰: 秒杀活动,一般会因为流量过大,应用系统配置承载不了这股瞬间流量,导致系统直接挂掉,即传说中的“宕机”现象。为解决这个问题,我们会将那股巨大的流量拒在系统的上层,即将其转移至 MQ 而不直接涌入我们的接口,此时MQ起到了缓冲作用。 异步通知应对高峰流量: 传统的做法是client端多次重复轮询,client端发起异步调用请求,后端为重逻辑,无法实时反馈结果,使用CMQ添加订阅,可配置在后端重逻辑完成时,将通知投递给client端用户。

基于腾讯云产品的异步消息架构

腾讯云消息中间件服务:

  • CMQ消息队列
    • 一种分布式消息队列服务,它能够提供可靠的基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)之间的收发消息,存储在可靠有效的 CMQ 队列中,防止消息丢失。
  • Ckafka消息队列
    • 分布式、高吞吐量、高可扩展性的消息系统,100%兼容开源 Kafka API。

基于CMQ消息队列对系统解耦应对高峰流量: CMQ 提供异步的通信协议,消息的发送者将消息发送到消息队列后可以立即返回,不用等待接收者的响应。消息会被保存在队列中,直到被接收者取出。 以电商的IT架构作为例子,在传统紧耦合订单场景里,客户在电商网站下订单(如买一台手机),订单系统接收到请求后,立即调用库存系统接口,库存减一;但这种模式存在巨大风险:

  • 订单系统与库存系统强耦合,假如库存系统无法访问(升级、业务变更、故障等),则订单减库存将失败,从而导致订单失败;
  • 传统的解决方案是服务间通过订单系统与库存系建立 socket 连接,但是如果库存系统的ip/端口变更、增加库存系统的接收者,都需要订单系统进行修改;
  • 短时间内大量的请求,对库存系统的 SQL,频繁查询库存,修改库存,库存系统负载极大;
  • 用户的感受:订单失败,重试,依然失败,导致顾客流失。

其中几个系统分别工作,解除强耦合性:

  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。此时客户可以认为手机已经买到了。CMQ 提供异步的通信协议,消息的发送者将消息发送到消息队列后可以立即返回,不用等待接收者的响应。消息会被保存在队列中,直到被接收者取出。
  • 库存系统:从 CMQ 获取下单信息,库存系统根据下单信息进行库存操作。
  • 这样,哪怕用户在下单时库存系统宕机,也不影响正常下单(库存系统修复后再从CMQ中取出订单进行操作)。订单系统写入腾讯云CMQ消息队列后,就无需再关心其他后续操作了。实现订单系统与库存系统的应用解耦。

基于CMQ消息队列,削峰填谷应对高峰流量: 引入腾讯云消息中间件 CMQ,将非即时处理的业务逻辑进行异步化。比如服务接收请求、处理请求和返回请求三个不同的业务逻辑。 案例: 某电商网站新手机发布在即,拥有预约码的用户可优先购买手机。预约方式为:注册账户即可获得预约码,预计预约用户超过1000万。 像双11秒杀、手机预约抢购等对 IO 时延敏感业务环境下,当外部请求超过系统处理能力时,如果系统没有做相应保护,可能由于历史累计的超时请求负荷过多而导致系统处理的每个请求都因超时而无效,系统对外呈现的服务能力为0,且这种情况下服务不能自动恢复。 引入 CMQ 后,当预约活动开始时,海量并发访问汹涌袭来:

  • 所有客户的预约申请,页面均立即返回成功。客户便可关闭网页进行其他活动。预约码稍后推送到客户的邮箱/手机;
  • 超过千万级别的注册、预约申请,先暂存在腾讯云 CMQ 消息队列集群;
  • 后端服务进行处理,按照数据库实际的select、insert、update能力处理注册、预约申请;
  • 处理成功后返回结果给用户。预约结束后,用户大约在5-30min内,都收到了预约码。

CMQ的高峰处理性能:

  • 单 CMQ 实例 QPS 达到5000,单集群 QPS 超过10万;
  • 引入改良后的 Raft 一致性算法,保证数据强一致性;
  • CMQ 支持按照时间回溯消息;
  • 可靠性达99.999999%;
  • 多纬度的安全防护和防 DDoS 攻击服务;

在除夕当天,用户红包的发、拆、入账等动作,转化为了十亿级别的海量请求。若使用传统的事务方式,会放大并发压力使系统崩溃。 CMQ消息队列保证了红包消息的可靠存储、传递,实时写三份保证数据不丢。资金入账失败时可多次重试,避免失败回滚和频繁轮询数据库等传统方式的弊端。 CMQ 在微信红包系统的分布式事务问题上得到了体现,微信架构组在红包系统引入了 CMQ,避免分布式事务增加对系统的开销。CMQ 红包队列,保证了红包消息的可靠传递和存储。当资金入账失败时,账户系统将不断从 CMQ 重新拉取重试此更新操作,保证入账消息永远不丢,避免入账失败回滚和频繁轮询数据库等弊端发生 客户的促销系统,消费者入账的时候是异步的。入账信息先写到 MQ 里,消费者过来拉取,且消费者确认已成功消费后,回调接口将 MQ 里的信息删除。 各大系统包括运维、告警、运营系统的日志流水,先聚合到 CMQ 中,后端的大数据分析集群按处理能力,不断到CMQ中拉取并分析。CMQ 理论上支持的消息堆积数量无上限,使用无后顾之忧。 CMQ 后端集群对用户来说是透明无感知的,CMQ 控制服务器可根据集群的负载情况实时对队列进行调度搬迁。如果某个队列服务的请求量超过当前集群的服务阈值,controller server 可以将队列路由分布到多个集群上来提高并发量,理论上可以达到无限的消息堆积以及超高的 QPS,轻松应对业务需求。 Ckafka工作架构: 生产者 Producer 可能是网页活动产生的消息、服务日志等信息。生产者通过 push 模式将消息发布到 Cloud Kafka 的 Broker 集群。 集群通过 Zookeeper 管理集群配置,进行 leader 选举,故障容错等。 消费者 Consumer 被划分为若干个 Consumer Group。消费者通过 pull 模式从 Broker 中消费消息。 Ckafka应对高并发大数据处理场景: 消息队列 CKafka 结合流计算 SCS , 用于实时/离线数据处理及异常检测,满足不同场景需要:

  • 对实时数据进行分析和展示,并做异常检测,快速定位系统问题。
  • 消费历史数据进行落盘存储和离线分析,对数据进行二次加工,生成趋势报表等。

在一些大数据相关的业务场景中,需要对大量并发数据进行处理和汇总,此时对集群的处理性能和扩展性都有很高的要求。消息队列 CKafka 在实现上的数据分发机制,磁盘存储空间的分配、消息格式的处理、服务器选择以及数据压缩等方面,也决定其适合处理海量的实时消息,并能汇总分布式应用的数据,方便系统运维。 在具体的大数据场景中,消息队列 CKafka 能够很好地支持离线数据、流式数据的处理,并能够方便地进行数据聚合、分析等操作。 Ckafka强大的日志聚合能力: 消息队列 CKafka 结合大数据套件 EMR,构建完整的日志分析系统。首先通过部署在客户端的agent 进行日志采集,并将数据聚合到消息队列 CKafka,之后通过后端的大数据套件如 Spark 等进行数据的多次计算消费,并且对原始日志进行清理,落盘存储或进行图形化展示。 消息队列 CKafka 的低延迟处理特性,易于支持多个数据源和分布式的数据处理(消费)。相比于中心化的日志聚合系统,消息队列 CKafka 可以在提供同样性能的条件下,实现更强的持久化保证以及更低的端到端延迟。 消息队列 CKafka 的特性决定它非常适合作为”日志收集中心“;多台主机/应用可以将操作日志”批量”“异步”地发送到消息队列 CKafka 集群,而无需保存在本地或者 DB 中;消息队列 CKafka可以批量提交消息/压缩消息,对于生产者而言,几乎感觉不到性能的开支。此时消费者可以使Hadoop 等其他系统化的存储和分析系统对拉取日志进行统计分析。 Ckafka强大的处理性能:

  • 常规性能:百万级QPS
  • 高吞吐能力
  • 99.95%的高可用性

第六章 数据层高峰流量处理

数据层高峰流量概述

大数据时代,业务数据量爆发

  • 业务并发量大
  • 数据层作为应用底层核心,对延迟、响应时间、性能、用户体验是关键的一环

传统数据库OLAP+OLTP+分库分表方案

  • 性能瓶颈
  • 历史数据存储成本高昂
  • 分库分表方案,数据倾斜
  • 扩容对业务影响大
  • OLAP与OLTP拆分导致存储成本上升
  • 业务改造成本高,数据同步易出错

面对互联网类业务百万级以上的用户量,单机数据库由于硬件和软件的限制,数据库在数据存储容量、访问容量、容灾等方面都会随着业务的增长而到达瓶颈。 即使将物理硬件升级到几十颗 CPU,容量做到几十 TB,然而 DDL、DML 的性能都会出现大幅下滑;况且,随着业务快速增长,一台高端设备可能很快就会因性能不足而需要更换。 电商、金融、O2O、社交应用、零售、SaaS 服务提供商,普遍存在用户基数大(百万级或以上)、营销活动频繁、核心交易系统数据库响应日益变慢的问题,制约业务发展。 在工业监控和远程控制、智慧城市的延展、智能家居、车联网等物联网场景下,传感监控设备多、采样率高、数据规模大。通常存储一年的数据就可以达到 PB 级甚至 EB,而传统基于x86服务器架构和开源数据库的方案根本无法存储和使用如此大的数据量。 政务机构、大型企业、银行等行业为了支持大规模数据存储和高并发数据库访问,对小型机和高端存储依赖极强。而互联网企业通过低成本x86服务器和开源软件即可做到的商业数据库相同甚至更高的能力。

数据层高峰流量处理设计思路

  • 分库分表
  • 主备同步+读写分离
  • 动态静态数据分离
    • 采用静态存储、缓存等介质提供服务
  • 数据库分布式架构
    • 自动化sharding,减少对业务的影响;
    • 大小客户、高低频数据分级存储;
    • 在线线性扩容,跟随业务的增长平滑扩容集群;

当处理大数据量“读请求”的压力大、要求高时,可以通过读写分离功能将读的压力分布到各个从节点上。 读写分离基本的原理是让主节点 (master) 处理事务性增、改、删操作(INSERT、UPDATE、DELETE),让从节点 (slave) 处理查询操作(SELECT)。

基于腾讯云产品的数据层架构

COS:腾讯云提供的一种存储海量文件的分布式存储服务,访问频度的高低,COS 提供三种对象的存储级别:标准存储、低频存储、归档存储,具有如下特征:

  • 高数据持久性
  • 完全对称的系统架构
  • 无限的可扩展性
  • 无单点故障
  • 简单、可依赖

COS基本存储架构: COS 通过控制台、API、SDK 和工具等多样化方式简单、快速地接入,实现了海量数据存储和管理。通过 COS 可以进行多格式文件的上传、下载和管理。腾讯云提供了直观的 Web 管理界面,同时遍布全国范围的 CDN 节点可以对文件下载进行加速。 标准存储

  • 适用场景:热点视频、社交图片、移动应用、游戏程序、动态网站。
  • 标准存储为用户提供了高可靠性,高可用性、高性能的对象存储服务。
  • 标准存储拥有低访问时延和较高的吞吐量,因而适用于有大量热点文件,需要频繁访问数据的业务场景。

低频存储

  • 适用场景:网盘数据、大数据分析、政企业务数据、低频档案、监控数据。
  • 低频存储为用户提供了高可靠性,较低存储成本和较低访问时延的对象存储服务。
  • 低频存储在降低存储价格的基础上,保持首字节访问时间在毫秒级,保证了用户在取回数据的场景下无需等待,高速读取,不过数据获取会产生费用,适用于较低访问频率的业务场景。

归档存储

  • 适用场景:档案数据、医疗影像、科学资料、影视素材。
  • 归档存储为用户提供了高可靠性,极低存储成本和长期保存的对象存储服务。
  • 归档存储提供了最低的存储单价,但读取数据的时候需要较长的解冻时间,因而适合需要长期保存的归档数据。

高低频冷热分层存储: 将用户上传的数据上传至对象存储,根据用户内容高频数据使用标准存储,低频数据使用低频存储,业务爆发时,根据用户请求分别由COS里的不同存储类型提供服务,COS具有海量存储及高带宽流量特征,结合CDN,提前将数据预热推送到离用户最近的节点,从容应对高并发场景, 动静数据分离,应对高并发: 标准存储提供了静态资源的存储和分发能力,并利用无限容量、高频读写的特性,为静态资源提供可扩展和可靠的存储。 网站服务通常会在动态网页中,根据一定规则将经常变动和长期不变的资源区分开,静态资源就是指长期不变的非结构化数据资源。 标准存储提供了静态资源的存储和分发能力,减轻资源服务器的压力,并利用无限容量、高频读写的特性,为静态资源提供可扩展和可靠的存储。用户可以将网站中的静态内容(包括音视频、图片等文件)全部托管在标准存储中,并利用腾讯云 CDN 分发内容。结合腾讯云 CDN 全球加速节点的能力,可以将热点文件提前下发至边缘节点,降低访问延迟。 CDB(云数据库):

  • 云数据库 MySQL(TencentDB for MySQL)是腾讯云基于开源数据库 MySQL 专业打造的高性能分布式数据存储服务,让用户能够在云中更轻松地设置、操作和扩展关系数据库。
  • 特征:
    • 支持读写分离,只读实例扩展;
    • 单实例最大支持24万 QPS,6TB存储空间;
    • DDoS防护和数据库攻击防护;
    • 数据备份能力、数据加密;
    • 实时热备,自动容灾;

主从分离架构: 一台数据库主机分为单独的一台写主库(主要负责写操作),而把读的数据库压力分配给读的从库,而且读从库可以变为多台,这就是读写分离的典型场景; 数据同步一致性: 读写分离提高了资源的利用效率的同时也引出了一个问题,就是由于延时(网络传输,操作)而引起的数据库主从不一致的问题? 数据同步方法:

  • 全同步复制:
    • 主库在与所有从库同步完成后,将处理结果返回给客户端,延迟较大;
  • 异步复制:
    • 主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理;

半同步复制:

  • 应用发起数据更新(含 insert、update、delete 操作)请求,Master 在执行完更新操作后立即向 Slave 复制数据,Slave 接收到数据并写到 relay log 中(无需执行) 后才向 Master 返回成功信息,Master 必须在接受到 Slave 的成功信息后再向应用程序返回响应。
  • 仅在数据复制发生异常(Slave 节点不可用或者数据复制所用网络发生异常)的情况下,Master 会暂停(MySQL 默认10秒左右)对应用的响应,将复制方式降为异步复制。当数据复制恢复正常,将恢复为半同步复制。

腾讯云数据库 MySQL 半同步复制采用一主一从的架构。 强同步复制:

  • 应用发起数据更新(含 insert、update、delete 操作)请求,Master 在执行完更新操作后立即向 Slave 复制数据,Slave 接收到数据

  • CDB支持的同步方法:

    • 云数据库 MySQL 支持三种数据复制方式:
    • 异步复制:
    • 腾讯云数据库 MySQL 异步复制采用一主一从的架构
    • 半同步复制
    • 腾讯云数据库 MySQL 半同步复制采用一主一从的架构
    • 强同步复制
    • 腾讯云数据库 MySQL 强同步复制采用一主两从的架构

    CDB应用实践:

    • 使用云数据库 MySQL 提高业务负载能力:
    • 对于读并发较大或读延迟较为敏感的业务,建议您不要选择过小的内存规格,以保障数据库的性能;
    • 业务对写入时延或数据库性能较为敏感,建议您选择异步复制方式;
    • 云数据库 MySQL 的数据库版本、内存/硬盘规格均支持在线的动态热升级。升级过程不会中断您的业务,您无需担心业务规模增长带来的数据库瓶颈;
    • 在常见的互联网业务中,数据库读写比例通常为4:1至10:1之间。在这类业务场景下,数据库的读负载远高于写负载,在遇到性能瓶颈时一个常见的解决方案就是增加读负载。
    • 灾备和两地三中心方案(请参考高可用章节内容)

    第七章 异常高峰流量处理方案

    DDoS攻击概述

    什么是DDoS攻击?

    • DDoS攻击又称为是分布式拒绝服务攻击,通过分布在各地的大量终端,同时向目标发送恶意报包,以阻塞被打击目标的出口带宽,或耗尽被打击目标的CPU资源,最终使被打击目标服务瘫痪。

    DDoS攻击原因分析:

    • 门槛很低:攻击工具可以在网上下载/购买;
    • 成本低廉:数百元可获得100G的攻击流量;
    • 利益驱使:已形成组织化分工明确黑色产业链;

    DDoS攻击趋势特征:

    • 大流量攻击呈现“Fast Flooding”态势;
    • 组合型SYN Flood攻击流量非常大;
    • 脉冲攻击、多IP攻击成常态;
    • IoT终端成为TCP会话攻击及应用层攻击的新傀儡;
    • 真实源攻击拟人化;
    • 攻击日趋平台化和服务化;

    DDoS攻击应对思路

    DDoS攻击防护思路:

    • 资源隔离:
    • 通过一套强大的DDoS防护系统,对数据源进行清洗和过滤,然后将正常流量发送给服务端;
    • 大数据智能分析:
    • 异常流量数据包往往不具备正常用户的一些行为和特征,可以引入智能分析系统,针对海量数据进行分析,对合法用户进行模型化,实现对DDoS流量的精准清洗;
    • 资源对抗:
    • 资源对抗通俗的讲就是“死扛”,通过大带宽资源和大量服务器资源堆砌应对DDoS流量;

    DDoS攻击防护具体做法:

    • 硬件防护:
    • 在带宽出口处增加防DDoS攻击硬件,但往往需要专业的安全人员运维,且缺乏弹性;
    • 借助于运营商:
    • 借助于运营商的防护手段,但存在单线防护延迟问题,防护覆盖面窄,服务和技术储备差;
    • 完整的云清洗方案:
    • 承洗容 攻击&业务流量 业务流量

    基于大禹的DDoS防护方案

    腾讯云DDoS防护(大禹)

    • 腾讯云大禹是业界领先的 DDoS 防护产品,为各行业提供针对性的防护解决方案,帮助用户抵御 DDoS 攻击,保障业务连续性,满足监管机构的合规性要求。

    高防IP牵引攻击流量,保护后端业务: 配置高防IP作为业务IP对外发布,隐藏客户真实源站IP。
    将流量引流至腾讯高防机房,清洗后正常流量转发到客户源站。 云外客户通过高防IP牵引攻击流量,保护后端业务,原理说明:

    • 客户在腾讯云高防IP上配置业务转发规则;
    • 客户将高防IP作为业务IP对外发布,隐藏客户真实源站IP;
    • 所有流量都先经过腾讯高防IP,再转发到客户真实源站,攻击流量在高防机房被清洗。

    高防IP基于公网IP回源,在其他云或IDC机房的业务,都可以接入腾讯云高防IP的防护。 大禹防护技术原理:

    • 双重清洗:
    • 第一次采用通用策略,清洗常见攻击流量;
    • 第二次采用定制策略,清洗变异攻击;
    • 一对多支持:
    • 一个高防IP支持60条转发规则;
    • 每条规则可配置20个源站IP。
    • 支持云与非云客户:
    • 配备转发集群,流量清洗后转发至内部或外部机房。

    大禹安全防护实践:

    • BGP高防包与web应用防火墙结合:
    • BGP 高防包一键提供上百Gbps DDoS 防护能力,轻松应对 DDoS 攻击,保障业务稳定运行;
    • Web 应用防火墙实时防护,有效拦截 Web 攻击行为,保障用户业务的数据和信息安全。
    • BGP高防包的异地防护:
    • 打破地域防护能力的限制,可具有最大300Gpbs的 BGP 高防包 DDoS 防护能力。
    • 业务流量使用腾讯云的内网专线进行转发,可靠性高、延迟小。
    • 充分享用腾讯云 BGP 网络的优势,所有公网 IP 均为 BGP IP,延迟低。
    • BGP高防IP与源站结合:
    • 正常情况下,业务的域名解析到正常的对外业务 IP,业务流量直接访问源站,DNS 监控实时监控源站业务是否可以正常访问。
    • 当 DNS 监控检测到正常对外业务 IP 无法访问时,依据智能切换设置规则,迅速将业务域名解析到高防 IP 上。高防 IP 对攻击流量进行清洗,将正常业务流量转发到源站备用 IP。
    • 业务系统压力测试:
    • 调整防护策略:建议关闭 DDoS 防护策略,如存在某些客观原因不能关闭 DDoS 防护策略,请将 DDoS 防护的清洗阈值调整到压测最大值以上。
    • 控制压测流量及请求数:建议将压测流量值小于1Gbps,否则将有可能触发攻击防护。建议将压测的 HTTP 请求数限制在20,000QPS以内,否则将有可能触发攻击防护。
    • 提前评估压测可能带来的影响:全面评估压测可能产生的影响及范围,制定合理的风险规避措施。
    • 线上业务平滑切换至大禹防护方案:
    • 业务上:选取备份业务、非重要业务、非关键业务先进行迁移。选择业务较少的时段进行迁移。
    • 源站IP暴露的应对方法:使用BGP高防IP后,依然存在绕过高防直接攻击源站Ip,建议更换源站IP; 更换源站 IP 之前,请务必确认已消除所有可能暴露源站 IP 的因素。如果不想更换:不使用与旧源站相同或相近网段的IP,避免被攻击者进行猜测和扫描;提前准备备份链路和备份IP;设置访问来源范围,避免攻击者的恶意扫描;

    大禹应用场景:

    • 游戏:恶意攻击导致用户大批掉线、访问缓慢 UDP 小包攻击、ACK Flood 攻击、游戏外挂等攻击最终导致用户流失
    • 网站:网站服务器的真实 IP泄露、流量攻击或应用层攻击,导致网站访问缓慢甚至直接瘫痪
    • 金融:在银行、保险、证券、互联网金融,恶意竞争使用DDos攻击导致网站无法打开或 APP 无法登录,严重影响投资者信心

    总结如下:

    • 第一章介绍了业务高峰流量处理的概述,包括业务高峰面临的挑战和业务高峰流量处理的规划思路。
    • 第二章介绍了用户及应用接入高峰处理,包括用户及应用高并发接入面临的问题,以及基于腾讯云产品的用户及应用接入设计。
    • 第三章介绍了web及服务层高峰处理,包括web及服务层流量高峰面临的问题,以及基于腾讯云产品的web及服务层设计。
    • 第四章介绍了数据缓存架构设计,包括数据缓存架构概述、数据缓存架构应对高峰流量、基于腾讯云产品的数据缓存设计。
    • 第五章介绍了异步消息队列架构设计,包括异步消息架构概述、异步消息架构应对高峰流量、基于腾讯云产品的异步消息架构。
    • 第六章介绍了数据层高峰流量处理,包括数据层高峰流量概述、数据层高峰流量处理设计思路、基于腾讯云产品的数据层架构。
    • 第七章介绍了异常高峰流量处理方案,包括DDoS攻击概述、DDoS攻击应对思路、基于大禹的DDoS防护方案。