订单峰值激增 230%,Serverless 如何为世纪联华降本超 40%?|双11 云原生实践
作者 | 朱鹏
导读:2020 年 双11,世纪联华基于阿里云函数计算 (FC) 弹性扩容,应用于大促会场 SSR、线上商品秒杀、优惠券定点发放、行业导购、数据中台计算等多个场景,业务峰值 QPS 较去年提升 230%,研发效率交付提效超过 30%,弹性资源成本减少 40% 以上。当 双11 走过 11 个年头,传统企业正在凭借云原生技术悄然逆势崛起,参与到这场全球购物狂欢节中。
联华华商旗下的世纪联华超市近期迎来了一年一度的 “双11” 大促活动。
时光回到 2014 年的 双12,支付宝联合杭州多家线下品牌和商场门店,推出五折优惠促销活动。在这一次消费狂欢中,滨江区世纪联华店所有的柜员 POS 机前排起了长队,队伍移动速度异常缓慢,商场工作人员表示,服务器出现异常导致支付出了问题。
6 年后的今天,视线再次回到世纪联华超市 双11 大促现场,人潮涌动,却井然有序。参与大促的人数是 6 年前的几倍,但现场支付却稳定又顺滑,这种天壤之别的转变,源于世纪联华对云原生技术的大胆尝试,世纪联华大促现场:
技术架构演进之路
我们有幸采访到世纪联华的技术人员,了解到世纪联华在技术架构演进一路走来的不容易。
2014 年及以前:物理单机架构的灾难
过去所有 POS 机及会员卡支付机器全部部署在各个门店,这套架构持续了近十年之久。
这套架构的最大好处是不受网络影响,在当年网络基础建设还不完善的情况下,商家可以尽最大可能地保障单个门店的交易稳定性不受外界影响。这套架构的最大问题是:当门店机器出现故障时,专业的技术管理员很难第一时间赶到现场及时修复,系统维护工作变得十分困难。
2014 年世纪联华的 双12 活动中,因为业务遭遇爆炸性流量,多个门店支付时好时坏,短时间也无法维护,导致用户体验差,这让世纪联华的技术人决心改进这套使用了十多年的老系统。
2014~2018 年:中央机房部署架构的演进
在 2014 年经历了 双12 大促活动的问题后,联华技术人决心改进各项系统,于是将交易系统和会员系统陆续迁移到自建的中央物理机房,商品系统也改迁为中央下发机器,在浙江省各个门店的 POS 机,通过互联网连接至中央机房。
**
相比 2014 年以前的架构,新架构主要解决了三个问题:
问题修复可集中维护处理
商品调整价格下发全走网络
数据可以集中查询统计
然而新架构遗留的最大的问题是:
管理人员需要掌握所有机器细节
运维过程中可能出现宕机、断网等事件,调查相对困难,应急处理方案薄弱
2018 年~2019 年年中:全面上云
随着国内公共云建设的进一步发展,世纪联华也开始全面使用阿里云产品,将本地业务包括 MySQL 等全部迁移到了阿里云 ECS 上。
全面上云很好地应对了宕机、计算节点断网等事件的发生,这也坚定了世纪联华使用阿里云的决心。
然而业务急剧的扩展,数据库的查询写入越来越多,全面上云的架构在 2019 年中促销活动中,某台 16 核 32G 的 MySQL 数据库所在的 ECS ,因为会员查询业务实现未做好弹性扩容准备,定时业务陡增导致请求延迟巨大,严重影响了用户体验。
世纪联华开始探索新的业务架构方式,琢磨如何使用简洁的架构实现出更高可用的业务系统。
2019 年年中至 2019 年 双11:Serverless 的探索和尝试
随着线上业务不断发展,世纪联华的业务量不断扩大。在经历了 2019 年中数据库事件后,世纪联华经过尝试探索后,发现阿里云的表格存储服务比较适合自己的弹性业务:陡升陡降的业务不需要提前做预算来准备购买多少台存储服务器。这让联华的技术人很兴奋,因为很难算准突发的定时抢购业务量,这就导致很难预估准备多少机器来应付相应的业务量。表格存储的出现让联华技术人了解到一个词:Serverless!
在探索 Serverless 的道路上,联华的技术人偶然接触到了阿里云的函数计算,在紧张的测试验证后,技术人员发现函数计算的优异表现很契合联华的业务高度弹性的会员查询系统。
从 2019 年 7 月开始,联华技术人在不到 3 个月的时间里,将原有的会员数据全部副本镜像迁移到表格存储,并将所有渠道商的 API 全面迁移到阿里云 API 网关做分发,会员查询业务的计算业务也全面迁移到阿里云函数计算。
2019 年的 双11,函数计算作为计算模块,表格存储作为存储模块,顺利地帮助世纪联华渡过大促,扛住高峰流量的同时确保了应对业务的弹性。而未使用 Serverless 的业务因为预估不足,出现了一些异常。
Serverless 给世纪联华带来新的曙光:
无需人工干预,瞬时弹性扩容很好地解决了流量的爆发带来的服务全面不可用;
运维管理简单,一键部署更新函数,不需要了解网络分发架构,部署流程变得更简单,无需特聘运维人员,普通研发即可操作;
不再需要提前做费用预算,用多少资源是多少钱,极大解决了技术和财务的沟通烦恼;
因为定时秒杀场景请求波峰波谷明显,不需要预留大量机器,从而节省了大量费用。
遗留的问题:
- 部分请求因为冷启动延时高导致用户体感不好,这也是当时 Serverless 开发人员普遍遇到的问题。
双11 中 Serverless 的表现让联华技术人很振奋。在顺利渡过大促活动后,世纪联华很快宣布:将在所有业务中全面使用函数计算及表格存储!
2020 年的 双11:函数计算 2.0 及全面拥抱 Serverless
2019 年下半年,阿里云函数计算宣布推出 2.0,支持预留模式,全面解决冷启动延迟大的问题;推出单实例多请求问题,较少实例支持重 IO 高并发类型请求调用;支持自定义运行时,支持一键迁移传统 Web 架构服务器。2.0 的出现让函数计算在业务和规模上实现了巨大升级。
在经历了过去的线下场景考验后,世纪联华将各渠道商的业务及旗下的“联华鲸选 APP”,以及线上交易、定时抢优惠券、秒杀业务也全部从 ECS 迁移到了函数计算 2.0,在开启预留模式调整好单实例多并发的模式后,顺利地扛过了是平时数十倍的洪峰流量请求。
比较上述的“时间-流量图”及“时间-延迟”两图可以看到,急剧上升的突发流量对用户造成的延迟变化影响非常小,从实际用户反馈来看确实也证实了用户体验非常顺滑。
所有的数据和业务上云,减轻的不只是研发人员的心理压力,还有工作量。联华华商技术负责人楼杰表示,“阿里云函数计算省了我们技术人员好多工作,我们不用管理服务器这些基础设施,只要编写代码上传,系统就会准备好计算资源,还提供日志查询、性能监控、报警等功能。这要是放在以前,超市搞 双11 大促,我们技术团队都睡不着觉,只靠扩展机器支撑大体量的流量和业务,谁心里都没谱。现在扩容的问题交给阿里云,水位远远高于我们储备能力的极限。”
**
站在风口上超车:传统企业何以更需关注 Serverless?
2020 年是国内 Serverless 的技术元年,为了降低技术研发成本、提升运维效率,越来越多的企业开始选择使用 Serverless 作为基础研发底座,大力发展业务。
在近期 CNCF Serverless 研究报告中,阿里云函数计算以 46% 的占比占据国内榜首。报告同时显示,大量的国内开发人员正在将传统架构往 Serverless 上做迁移。Serverless 的出现给传统企业数字化转型带了更多机遇。
在今年的疫情当中,线上教育已经成为广大学生群体不可或缺的基础设施,阿里云函数计算也为企业提供了强大的计算力,助力企业实现视频转码成为国内在线教育 TOP 级企业。
除了新浪微博、芒果 TV、石墨文档等互联网企业,在过去的一年里,越来越多的传统企业正在以意想不到的速度接触、尝试、大规模使用函数计算。
传统企业何以更关注 Serverless 呢?现如今,大量尖端技术人才更偏向在互联网公司就业,但传统企业又面对着大量技术升级和重构技术架构的刚需,人才缺口和技术升级之间产生了对云原生技术的需求。Serverless 的出现抹平了研发人员在预算、运维经验上的不足。在帮助企业对抗业务洪峰的情况下,研发人员能轻易掌控处理,不仅极大地降低了研发技术门槛,而且大规模提升了研发效率。对于开发者而言,线上预警、流量观测等工具一应俱全,关键是免去了运维负担,切实为广大开发者提供了普惠技术红利。对传统企业而言,Serverless 缩短了互联网公司与传统企业之间技术竞争力的距离。
由于业务场景、用户习惯迅速变化,许多行业数字化业务出现急速增长,加快数字化业务发展成为传统企业的必然选择。云原生是企业数字化最短路径,越来越多的传统企业正在拥抱云原生,借助更加快速、灵活的开发和交付模式,满足市场快速变化的需求,进而加速业务创新。世纪联华借助 Serverless 保证了一次次大促的成功,正是这一趋势的最好证明。
订单峰值激增 230%,Serverless 如何为世纪联华降本超 40%?|双11 云原生实践的更多相关文章
- 世纪联华的 Serverless 之路
作者 | 朱鹏(旻苍) 来源 | Serverless 公众号 一.世纪联华超市简介 1. 公司简介 杭州联华华商集团有限公司成立于 2002 年 7 月,主要业务涵盖购物中心.大卖场.超市.便利店等 ...
- 开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门
点击下载<Knative 云原生应用开发指南> 自 2018 年 Knative 项目开源后,就得到了广大开发者的密切关注.Knative 在 Kubernetes 之上提供了一套完整的应 ...
- protobuf / Consul / 边缘计算 / MEC / CDN / Serverless / GraphQL / 微服务 / 网关 / 云原生 / Serverless (真能造概念啊!!!)
技术概念层出不穷,学吧!记录下自己多这些概念的理解 protobuf: 数据结构而已,类比XML, JSON consul 解决的只是微服务里的服务注册与发现,健康检查等. 边缘计算:可以理解为是指利 ...
- 持续优化云原生体验,阿里云在Serverless容器与多云上的探索
近日,阿里云宣布推出Serverless Kubernetes服务此举意在降低容器技术的使用门槛.简化容器平台运维.并同时发布阿里云服务对Open Service Broker API标准支持,通过一 ...
- 视频课程 | 云原生下的Serverless浅谈
京东云开发者社区在3月底于北京举行了以"Cloud Native时代的应用之路与开源创新"为主题的技术沙龙,现场多位技术大咖与开发者们面对面就Cloud Native进行了深入交流 ...
- ServerLess之云函数实践-天气API
关注我的个人博客,发掘更多的内容 ServerLess之云函数实践-天气API 前言 云计算是大势所趋 Serverless 架构即"⽆服务器"架构,它是一种全新的架构方式,是云计 ...
- 峰值利用率80%+,视频云离线转码自研上云TKE实践
作者 刘兆瑞,腾讯云高级研发工程师,负责腾讯明眸极速高清,画质重生等产品.专注于codec优化,画质增强等技术. 背景和问题 随着流量资费的降低和带宽的增加,视频成为人们获取信息越来越重要的方式,随之 ...
- 飞猪基于 Serverless 的云+端实践与思考
作者 | 王恒飞(承荫) 本文整理自飞猪旅行前端技术专家--王恒飞(承荫)在[阿里云 Serverless Developer Meetup 上海站]上的分享.点击查看直播回放:https://dev ...
- 下订单更新订单表然后减少库存表中的数据,出现库存超卖,使用数据库和redis坚决库存超卖的问题
上面的代码更新库存的数据,存在多线程的问题,第一种方法使用synchronized关键字修饰的语句块代码,但是性能较低,并且还是存在问题的 在分布式的场景下,当前库存系统部署在多个tomcat上,即使 ...
随机推荐
- servlet中servletContext的五大作用(二)
1. 获取web的上下文路径 2. 获取全局的参数 3. 作为域对象使用 4. 请求转发 5. 读取web项目的资源文件 package day10.about_serv ...
- BeanUtils实现对象拷贝(三)
package beanutil; import java.lang.reflect.InvocationTargetException; import java.util.Date; import ...
- Go错误处理正确姿势
1. panic 在什么情况下使用panic? 在程序启动的时候,如果有强依赖的服务出现故障时panic退出 在程序启动的时候,如果发现有配置明显不符合要求,可以panic退出(预防编程) 其他情况下 ...
- 大天使之剑H5游戏超详细图文架设教程
引言 想体验传奇游戏霸服的快乐吗?想体验满级VIP的尊贵吗?想体验一刀99999的爽快吗?各种极品装备装备.翅膀.宠物通通给你,就在大天使之剑! 本文讲解大天使之剑H5游戏的架设教程,想研究H5游戏如 ...
- 手撕LRU缓存
面试官:来了,老弟,LRU缓存实现一下? 我:直接LinkedHashMap就好了. 面试官:不要用现有的实现,自己实现一个. 我:..... 面试官:回去等消息吧.... 大家好,我是程序员学长,今 ...
- Qt5之正则表达式
字符 描述 \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 '\\' 匹配 ...
- struts2的初步认识
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. 一. Str ...
- javascript(1)简介
点击查看代码 ### javascript 1.JavaScript简介 javascript是一种轻量级的脚本语言,可以部署在多种环境,最常见的部署环境就是浏览器, 脚本语言: 它不具备开发操作系统 ...
- GO安装golang.org/x/net扩展库
在学习golang过程中,有部分示例代码使用到了非标准库golang.org/x/net/html相关的库函数,但是标准代码库中没有该库,因此需要自己安装: 我这里使用git下载源码进行的安装. 为了 ...
- Python使用openpyxl模块操作Excel表格
''' Excel文件三个对象 workbook: 工作簿,一个excel文件包含多个sheet. sheet:工作表,一个workbook有多个,表名识别,如"sheet1",& ...