作者 | 刘艳杰

责编 | 伍杏玲

出品 | CSDN云计算(CSDNcloud)

在企业里,做活动是一种十分常见的需求,有面向C端用户开展的活动,也有面向公司内部员工的活动。随着互联网技术的不断发展和疫情等方面的原因,线上开展的活动也越来越多,常见的形式有:内容征集、评论弹幕、点赞投票、竞猜答题、抽奖红包、组队分享、PK排行榜等,无论是单项活动还是多种玩法,其中不乏有会产生大量并发请求的活动。

活动期间,用户在短时间内密集参与,像瓜分红包、秒杀等活动,将引发用户集中点击,产生高并发请求,对系统产生一定的压力。如果活动期间负载过高或系统崩溃,将会导致用户无法参与活动,引起用户吐槽和投诉。

然而,活动类系统很多时候仅是“一次性”的,所以大家在这类系统的开发上投入的人力物力将相对较少,甚至有些活动是研发人员利用空隙时间开发的。所以往往我们发现,如果不是进行细致的开发设计和上线前的压测,一些大活动的系统在上线后出现问题的概率是非常高的。

一个能支撑大流量的活动系统是活动能够成功的关键,接下来我们一起看下大流量的活动系统应该如何设计架构。

大流量活动系统的架构长啥样?

大流量活动系统需要应对大量并发调用,在系统设计上就要求具备水平扩容的能力来满足业务需求。通常会采用如下的分层的系统架构设计,因为活动系统功能通常比较简单,模块较少,所以系统架构不会很复杂。

通常在系统从0~1阶段,为了让系统快速上线,通常是不考虑分层的,但是在面对大流量活动系统时就不得不进行分层设计,分层架构可让系统更容易进行横向扩展,提升系统吞吐量,这也是大流量系统的核心需求。同时,分层架构也增加了系统的复杂度和工作量。

以上架构分为LB、业务接入层、业务逻辑层、数据存储层等多个层次。

LB

用户流量入口,对外屏蔽内部服务架构细节,对内提供反向代理流量转发,提升整个系统的吞吐量。LB的核心作用是通过流量分发提升整个系统的吞吐量。

业务接入层

这层用来实现一些通用的业务逻辑处理,如数据编解码、用户身份校验、访问频率控制、限流降级、数据缓存、微服务入口等功能。这层通常在业务逻辑层内部通过中间件的形式实现。开发需要实现该层的业务逻辑,还需要和底层资源进行交互。

该层实现的业务功能是很多系统所需要的,多个业务逻辑层服务共用该层服务。值得注意的是,该层通常是无状态的,可以通过水平扩展增加系统吞吐能力。

业务逻辑层

业务逻辑实现的核心层,业务逻辑相关代码基本都集中在这一层。该层需要开发人员花费大量的时间进行设计实现,开发时间的多少将直接影响业务逻辑是否能够进行充分的进行设计和实现。业务性能问题,系统Bug常常光顾这一层。

开发者需要实现该层的业务逻辑,还需要和底层资源进行交互。该层通常是无状态的,可以通过水平扩展增加系统吞吐能力。

数据存储层

业务数据存储层,几乎所有的业务数据最终都需要持久化到数据库中,这层通常是系统瓶颈所在。

所有的活动类业务都需要数据库层,正常合理的使用数据库对系统性能将会产生非常大的影响。

数据存储层是有状态的,较难通过水平扩展增加系统的吞吐能力。通常是通过纵向提升数据库实例配置规格来提升数据库性能,但是纵向配置是有物理上限的,不能无限提升的。这就需要开发人员在这一层进行充分的设计,提升这一层的服务能力。

如上的系统架构是最常见最基础的分层系统架构,但在面临大流量活动系统时,即使经验丰富的开发人员,也不敢打保票说一定抗的住的。

实现大流量系统面临的挑战有哪些?

系统各层需要考虑的问题有:

当我们把架构中每一层需要考虑事项展开之后,系统的开发工作量就不会想前面看着少了,原本看着简单的系统就不再简单,需要考虑和解决的问题非常多。

流量入口LB层

  1. 安全防护:防止各类安全攻击,破坏系统、盗取数据

  2. 接入质量:需要考虑使用各类网络各个地域的用户的接入质量,否则很可能有部分用户因接入质量无法参与活动

  3. LB配置维护:需要靠性能可靠性,负载均衡策略,RS更新维护与健康检查、日志监控告警等多个方面的问题

  4. 拨测监控:监控系统是否正常提供服务

  5. 网络带宽:网络带宽是否足够,带宽问题通常比较隐蔽不易发现

业务核心层

  1. 基础资源:涉及计算、网络、存储等资源的创建配置管理,涉及安全扫描、安全防护、监控告警、系统优化等多访问的问题

  2. 业务部署:涉及服务的发布变更、频控限流、容错容灾、性能优化、日志采集等诸多方面的问题

  3. 业务开发:业务逻辑设计实现,容错、容灾能力实现

数据存储层

  1. 数据安全:防止密码泄露数据被盗等问题

  2. 业务设计:数据库分库分表设计,数据库索引设计

  3. 性能优化:提升系统吞吐能力

高性能高可用

  1. 高性能:系统各层的处理能力及性能瓶颈,如何排除链路中的性能瓶颈及优化,排除链路中的性能瓶颈可能需要进行大量的工作才能发现

  2. 高可用:全链路的容错、容灾设计,如何降低避免诸如网络抖动、可用区故障等故障对系统造成的影响

除了图中列举的,业务上还需考虑如下问题:

  1. 如何对用户身份进行校验保证用户身份的真实性?

  2. 如何防刷、防止羊毛党薅羊毛?

  3. 如何对业务数据进行统计?

  4. 如何快速搭建开发、生产等多套环境?

  5. 如何快速处理线上问题?

  6. 如何进行活动运营?实现一套运营管理后台系统?

  7. 如何进行活动开关控制?定时轮询 or 活动推送?

当所有这些问题汇集到一起时,对开发人员产生了不小的挑战。为了使活动万无一失,我们都需充分考虑。研发团队具备:

  1. 系统架构:需要进行整体性的技术架构设计规划

  2. 系统运维:能够对全链路业务资源进行运维管控

  3. 业务设计:实现业务逻辑,进行容错、容灾设计

  4. 性能优化:充分考虑系统可能存在性能瓶颈,并针对性的进行设计优化

  5. 容量设计:对系统容量进行评估,如何应对超出预估的大流量调用

  6. 监控告警:主动发现系统当中的各类问题,提早排除隐患

  7. 服务部署:相关业务资源的申请及部署,业务服务的部署

如此一来,开发团队的精力可能会被分散到系统的各个方面,这将导致开发团队没有足够的精力聚焦于业务逻辑,也没有足够的精力解决系统面临的最核心问题:如何应对大量高并发的服务调用。

高性能高可用的架构设计原则和方案目前有很多,但要实现一个高性能高可用的系统却并非易事,其背后有非常多的具体细致的工作要做:如系统容错容灾容量等问题。

基于Serverless模式的腾讯云·云开发(以下简称为“云开发”),可帮助开发者解决上述问题和挑战。

Serverless 云开发:解题之法?

业务系统概括起来需要实现两个能力:

  1. 业务逻辑:实现业务业务逻辑,包括前端、后端业务逻辑。部分业务逻辑为通用需求。

  2. 访问链路:搭建高性能大容量的访问链路,连通用户侧和业务逻辑层。这是通用需求。

腾讯云·云开发对通用的访问链路以及部分通用的逻辑抽象出来进行统一的实现,帮助开发者解决通用问题。云开发提供安全、高可靠、高并发、高性能的通用后端能力基础,为开发者提供高性能高并发大容量的访问链路,让开发者无需关心链路搭建涉及的一系列问题,让业务方基于Serverless架构实现业务逻辑,为开发者屏蔽底层基础架构,提供高效的弹性扩缩容能力,解决业务容量问题。云开发帮助业务解决通用性问题,让开发者有更多精力专注于解决业务本身,降本增效。

传统模式和云开发模式的对比如图所示:

在云开发模式下,用户仅需关注前后端的核心业务逻辑设计实现,无需关心底层基础设施和访问链路。

云开发服务架构

3.1 业务资源的弹性伸缩能力

开发者基于腾讯云·云开发提供的业务资源实现其业务逻辑,依托于云开发平台底层资源的弹性扩缩容能力,用户业务具备了弹性伸缩的能力,高效快速,避免了传统模式下扩容所产生了资源和人力成本。业务服务按需使用资源,按量计费,节省项目成本。

云函数

云函数平台架构

用户请求经云函数接入层 Invoker 进入到用户云函数运行时,触发用户逻辑逻辑,云函数是一种弹性的计算资源,能够自动跟随用户的并发量进行弹性伸缩,如下图所示:

每个并发的用户请求都会对应一个云函数实例,当用户请求上涨时,云函数实例自动进行扩容,当用户请求量下降时,云函数实例逐步进行缩容。弹性伸缩的过程是系统自动进行的,方便快速,为用户提供了强大的弹性伸缩能力,进而为用户业务的高并发提供了强有力的能力支持。

云开发目前为开发者提供单个云函数上限 1000 并发的能力支持,如果云函数的平均执行时间为 100ms,那么单个云函数可以达到 10000 QPS,可满足大部分用户场景的需求,50个云函数的总QPS将可以达到 50W QPS。

云数据库

腾讯云·云开发为用户原生提供数据库实例,用户不需要购买维护数据库实例,通过云开发SDK,开发者可以快速开始进行业务开发,节省时间。

云数据库在接入层和数据库底层也做了非常多的专项优化,同时也在部署方面进行了诸多方面的设计。

云开发数据库架构

云数据库接入层进行了分层设计并支持大规模的水平横向扩容,用户请求可在集群间进行灵活调度,应对可能出现的服务故障,提供更高的可用性和更短的恢复时间。用户请求经数据接入层服务进入到数据库引擎层,数据库接入层部署多个跨AZ的集群进行。数据库接入层帮助用户实现了数据库连接的维护与优化,用户无需关心数据库如何连接访问,维护数据库账密,提升了数据库的安全性。

腾讯云·云开发数据库为用户提供:

  1. 自动加索引:对用户慢查询请求进行分析,并针对性的进行自动索引优化,能够在用户无感知的情况下优化数据库性能,提升系统吞吐量,提升并发能力。

  2. 自动弹性Cgroups按需提供计算资源:根据用户数据库负载按需调整数据库运行所需要的计算资源。

  3. 自动进行在线热迁移:当主机负载过较高时,自动在线热迁移用户实例到负载低的主机,此过程用户几乎是无感知的。热迁移同时也能够支持全局的数据库主机间的负载均衡。

云开发通过以上措施,在降低用户数据库成本的同时,为用户提供数据库弹性能力,借助这些能力,开发者较少的关注数据库。

云开发数据库还为开发者提供实时数据库推送能力,用户基于此实现实时推送类业务,降低搭建推动服务的成本。

如前文所述,数据库层是有状态的,较难进行横向扩缩容,云开发为用户提供一定的纵向扩缩容能力与优化,提升数据库性能。用户自身也需要对数据进行一定的设计优化。

3.2 访问链路的弹性伸缩能力及可靠性设计

云开发平台为用户搭建了直达业务逻辑的高性能大容量的访问链路。用户不需要搭建和维护访问链上的一系列资源服务,降低了资源和人力成本。

云开发平台的性能和可用性将直接影响到用户业务的性能可用性。云开发作为一个公有云服务,在给开发者提供各类能力支持同时,更重要的是能为客户业务提高性能高可靠的服务,为此,云开发服务对系统的可用性容量等方面进行大量的设计优化。

容错:云开发服务通过链路优化、异常重试、多级缓存、缓存续期、失败降级、故障剔除等多方面的优化,提升系统系统的容错能力。

容量:云开发通过容器化的服务部署方式,实现访问链路的弹性伸缩能力,具备了容器化所带来的优势,当用户流量上涨时,访问链路可随着用户流量自动的进行弹性扩缩容,避免了因访问链路瓶颈导致等用户业务受限的问题。

容灾:基于容器化的部署方式,数据流接入层服务进行了多集群的服务部署,每个集群都进行了跨可用区部署,具备跨可用区的容灾能力。当单机、单可用区出现故障时,能够快速的通过集群切换进行容灾。同时,数据流服务依赖的其他服务,都具备多集群的跨AZ的容灾能力。

在腾讯云·云开发模式下,云开发搭建好从客户端到业务逻辑的访问链路,开发者无需关注用户端到业务逻辑之间的链路搭建以及涉及的一系列问题。同时,云开发为用户提供当前流行的Serverless架构能力,开发者基于轻量云函数、云托管来实现业务逻辑,无需关心基础设施,具备Serverless所带来的极简运维、按量计费、弹性伸缩等方面的优势。帮助开发者真正的做到了仅需关注业务逻辑层的实现,解放了开发者的生产力,让开发者有更多的时间专注于业务设计。

除了上述的降本增效、微信原生之外,云开发还提供了CMS内容管理、开源工具插件和低代码开发平台等能力和服务支持,帮助用户更快更好地进行开发。

抗住 5亿访问,腾讯云·云开发为你保驾护航

当一种新的技术形态出现在人们面前,有人选择先观望,再决定是否尝试接纳,而有人则大胆尝试。Serverless和腾讯云·云开发虽诞生仅两年,不妨碍云开发受到一大批开发者的追捧。目前,云开发注册账户数超过65万,服务超过100万开发者,云开发日均调用量近10亿次,2021春节期间,日服务调用量超过了16亿次。

云开发在腾讯游戏、微信支付、微信读书、猫眼电影、深圳机场等多样化活动上有较好的应用,帮助业务快速实现需求,平稳支持大流量洪峰。

如去年《创造营2020》决赛成团之夜,云开发保障业务稳定运行,实现了100%安全无死角的同时,还在投票“秒杀”场景下高性能地 hold 住全场,为节目的顺利进行保驾护航。

上线两周、访问次数即破5亿的四川省官方健康码“四川天府健康通”小程序就是基于云开发底座完成开发的。前端采用WeApps云开发低码的可视化、组件化、低码化等能力,后端采用了云函数、云数据库、云托管等云原生能力,充分发挥了云端低码可视化开发的优势及便利。在十余天内就高质量地完成了定制化开发工作。同时与传统开发模式相比,交付效率提升一倍,人力成本却能缩减一半。

今年春节,微信红包封面再次引爆社交网络,限时开放的个人红包封面制作活动更是直接拉低门槛,让更多人能够便捷享受到定制红包封面带来的乐趣,这活动便是搭载在云开发上,在整个活动期间平台抗住了上亿流量洪峰,资源成本仅花费几千元,有效地提高研发效率,极大降低人力成本。

总结

一个简单的系统需充分的设计才能迎接大流量活动的挑战,各种类型的系统都有一些通用的基础性的工作,腾讯云·云开发将这类通用的工作从系统中抽象出来,以服务的方式提供给用户,让开发者无需关心这些基础工作。

大流量的活动系统往往需要线上扩容的需求,云开发通过提供Serverless架构承载用户业务,让业务无需关系底层基础设施的同时,具备自动化的弹性扩缩容能力,帮助系统抗住大流量访问。

如此一来,云开发可帮助开发者从基础性工作中解放出来,有更多时间做业务设计、数据库设计、压力测试等工作,让系统更好地迎接大流量活动调用。

更多阅读推荐

  • 无法恢复,欧洲云服务巨头数据中心起火

  • CPU 空闲时在干嘛?

  • 低代码,让人人都可以是开发者

  • 三探云原生全景图,这次聊聊运行时层

  • 一眼看尽5G江湖,Gartner发布5G网络基础设施魔力象限报告

  • 冯诺依曼架构的 IO 鸿沟,谁能来填补?

一招上手!这样设计扛住亿级流量活动系统相关推荐

  1. 设计抗住千万级流量的架构思路(转)

    设计抗住千万级流量的架构思路(转) 随着互联网的发展,各项软件的客户量日益增多,当客户量达到一定峰值时,当数以万计的流量来临时,程序的顺利运行以及即时响应则显得尤为重要,就像双11那天的淘宝一样.那么 ...

  2. 实战系列-亿级流量秒杀系统JVM调优

    导语   关于亿级流量的秒杀系统的调优,其实并不仅仅包括对于JVM的调优,还有包括网络调优.IO调优.负载均衡调优,缓存调优,中间件调优等等一些东西内容的调优计划,一个亿级流量的秒杀系统仅仅是通过JV ...

  3. 【商品架构day3】京东商品系统的演进之路 - 如何抗住亿级流量

    本文来自京东尤凤凯老师的分享.商品,黄金交易流程最基础.最核心的环节,无商品不电商.商品数据无处不在,商家(采销.供应商)发布管理.供应商下采购单.仓储配送.促销.搜索.商详页展现.购物支付.财务结算 ...

  4. 大型电商平台如何抗住亿级流量之布隆过滤器

    目录 前言 正文 什么是布隆过滤器 布隆过滤器有什么用 1.若干次 Hash 来确定其位置 2.布隆过滤器在电商商品中的实践 3.如何减少布隆过滤器的误判? 开发中,如何使用布隆过滤器? 1.布隆过滤 ...

  5. 揭秘亿级流量下系统的高性能、高并发和稳定性保障

    1.性能.并发.稳定性三者关系 高性能:高吞吐量.低延时 公式:吞吐量(并发)=单位时间/平均延时 N-th% Latency:TP99, TP999 稳定性:低延时的稳定性标准为TP99/TP999 ...

  6. 阿里P8面试官:如何设计一个扛住千万级并发的架构(超级详细)

    如何降低RT的值 继续看上面这个图,一个请求只有等到tomcat容器中的应用执行完成才能返回,而请求在执行过程中会做什么事情呢? 查询数据库 访问磁盘数据 进行内存运算 调用远程服务 这些操作每一个步 ...

  7. 亿级流量架构实战之秒杀设计

    前面已经写了很多亿级流量的文章, 中间讲了各种处理思路, 这儿将这些思路与业务综合起来, 情形一就是秒杀, 提到秒杀, 很多人都会觉得这是一件技术要求很高的事情, 因为这涉及到超大访问量(可能瞬间千万 ...

  8. 亿级流量系统架构之如何设计承载百亿流量的高性能架构【石杉的架构笔记】...

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 本文来源:石杉的架构笔记(ID:shishan100) 一.往期回顾 上篇文章<大型系统架构 ...

  9. mysql 亿级高并发_亿级流量系统架构之如何设计每秒十万查询的高并发架构.md

    亿级流量系统架构之如何设计每秒十万查询的高并发架构 一.前情回顾 上篇文章(亿级流量系统架构之如何设计承载百亿流量的高性能架构)聊了一下系统架构中,百亿流量级别高并发写入场景下,如何承载这种高并发写入 ...

最新文章

  1. 学会感恩会使你回报的更多!
  2. 疫情之下“搜索+信息流”向上,百度移动生态的未来值得期待吗?
  3. u-boot2013.01.01 for s5pv210: u-boot启动流程
  4. c语言接口作用是什么,C语言接口与实现之异常处理try-except
  5. Swift - UITableView状态切换效果
  6. Python Tricks —— 使用 pywinrm 远程控制 Windows 主机
  7. 将字符串转换为全角或半角
  8. 12-17 学习记录
  9. sandboxie游戏不能运行在虚拟环境中如何解决_火爆全球的游戏专业,你还不来莫道克大学亲身感受一下?...
  10. 31、Arrays数组排序(续)——自定义排序
  11. win10 联想键盘快捷键关闭_如何关闭联想台式机电脑USB键盘的FN功能
  12. matlab多行注释方法
  13. python支付系统开发_python实现银联支付和支付宝支付接入
  14. 【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库
  15. 计算机符号大写怎么退出,如何输入数字,字母 和 回车换行符,大写字母锁定输入模式怎么退出...
  16. 尚硅谷 尚医通学习笔记
  17. 360极速浏览器Onetab插件存储位置
  18. win7防火墙入站规则
  19. 997. 找到小镇的法官_小镇...
  20. 【滤波跟踪】Singer-Kalman模型下的机动目标跟踪算法含Matlab源码

热门文章

  1. 两个子集pom互相调用_声明式服务调用组件Feign
  2. python的界面文字翻译_一个把网站全英文转成中文的方法,让你轻松看懂python官网...
  3. mysql php 乱码问题_解决php与mysql中文乱码问题
  4. python查看数据大小_科多大数据带你看Python可以列为最值得学习的编程语言
  5. 知名教授:希望论文一作发Nature后去当公务员的那名学生能看到我的这篇文章...
  6. 重磅!2020年国家科技奖受理项目出炉,含钟南山院士团队项目!
  7. 任正非:感谢美国,帮我把华为给全世界都宣传了
  8. 昨夜洪峰抵达主城,重庆人是这么过的......
  9. 天下为公:TCP堵塞控制
  10. k-shingles和MinHash优秀文章保存