Serverless如何赋能餐饮行业数字化?乐凯撒思变之道

导语 | 在数字化浪潮席卷全球的今天,每一个行业都在经历着前所未有的变革。餐饮行业作为人们日常生活中不可或缺的一部分,更是面临着巨大的转型压力。如何完成数字化转型,打破传统经营模式的限制,成为摆在众多餐饮商家面前的一道难题。餐饮行业如何在当下数字化时代找寻自己的出路?今天,我们特邀了乐凯撒 CTO 黄道泳老师,他将为我们深入解读以乐凯撒为代表的餐饮行业的数字化转型之道。

作者简介

黄道泳,腾讯云 TVP,乐凯撒 CTO。目前主要负责乐凯撒的整体信息化、数据化和智能化的建设。拥有14年的企业信息化和数据化建设经验。在乐凯撒面向新餐饮的服务转型中,积累了丰富的实践经验,并对 Serverless 技术在实际生产中应用有独到的见解。曾担任 IBM Webshpere 中国区官方论坛的版主和专家,对于系统架构,性能调优略有心得。

一、从餐饮行业的五大特征看数字化转型的必要性

近年来,随着数字技术的持续发展、迭代和应用推广,餐饮行业的堂食已经从人力点餐快速演变为扫码点餐,外卖送餐不仅仅是在线点餐即时配送,更是与短视频、线上直播有效结合,以短视频营销、线上直播营销的形式,在数字化变革中为消费者带来最直观的体验。

首先,在餐饮行业中,消费呈现出脉冲型特征,存在着明显的高峰期。这种波峰波谷的差异很大,主要集中在午餐和晚餐这两个用餐高峰时段。在这些时间段内,餐厅通常会迎来大量的顾客。

其次,餐饮业务具有交易敏感型特征,订单交易系统需要快速实时响应。顾客在现场点餐时,期望能够得到及时的消费响应,因此餐饮企业需要具备良好的灾备能力和快速响应机制。由于没有太多时间来进行服务器扩容等操作,餐饮行业在面对突发情况时需要迅速作出应对。

第三,餐饮业务是一项 24 小时不间断的服务业务,基本上不接受停服更新。餐饮企业需要保持持续的运营,确保顾客能够随时享受到美食。因此,在进行系统升级或更新时,餐饮企业需要采取一些特殊的措施,以确保业务的连续性。

第四,与金融、电信、科技等行业相比,餐饮业对于信息技术的投入相对较低。餐饮行业普遍面临资金有限的问题,无法像其他行业那样进行大规模的 IT 投资。这也意味着餐饮企业在信息化建设方面可能面临一些挑战,需要在有限的资源下进行合理的规划和选择。

最后,餐饮行业的信息化链条相对较长,涉及多个系统的对接和整合。餐饮企业通常需要应对大量异构系统的集成,使得各个环节能够无缝衔接。此外,餐饮行业还会面临大量临时性、一次性的紧急需求,例如各种节日促销活动。这些临时需求对系统的灵活性和快速响应能力提出了更高的要求。

综上所述,餐饮行业应根据以上五大特征,了解并应对这些特征对于餐饮企业的信息化、数字化建设和业务发展至关重要。

二、云函数的独特优势助力餐饮行业实现数字化

众所周知,云函数是一种无服务器(Serverless)概念的技术,在餐饮行业进行数字化转型中具有多项优势。首先,它实现了自动化弹性执行,根据使用量进行收费,并根据调用曲线自动扩缩容,以应对高峰期的服务压力。这种按需付费的模式不仅经济实惠,还能在闲时减少费用,提高系统稳定性和灾备能力。

其次,使用云函数可以摆脱繁琐的部署和配置过程,无需自己安装软件和配置服务器脚本。特别适用于临时的、低频的应用部署,可极大地节省服务器资源。而且在不使用时,无需额外销毁处理,进一步简化了管理流程。

云函数采用按需付费和毫秒级计费模式,永远不会在空闲时间产生费用。这对于脉冲式的访问业务具有明显的优势,并且可以针对低峰期和晚上的用量极低的情况进行优化,有效降低成本。

云函数支持高可用部署,它可以自动选择每个地域中的可用区来运行。如果某个可用区发生灾害或电力故障等导致瘫痪,云函数会自动切换到其他可用区的基础设施上运行,从而减少了单可用区运行的故障风险。这使得异地灾备的问题基本上不再需要考虑。同时,云函数还支持快速发布新版本和版本回退,实现了无感知的发版和版本回退。

最后,云函数的天然微服务模式使得每个函数都专注于某个特定的任务,通过相互协作可以构建复杂的应用程序。这种模块化的架构使开发者能够更灵活地管理和调整不同功能模块的资源消耗,实现快速迭代和部署。

在我看来,云函数是一种经济、实惠、稳定且灵活的技术,它能够根据实际需求自动弹性执行,节省资源,按需付费,并具备高可用性和灾备能力。

同时,它天然支持微服务模式,使开发者能够更灵活地构建和管理应用程序,实现快速迭代和部署。

三、乐凯撒餐饮高并发场景下的最佳实践

当前,国内的餐饮行业已经从增量市场转变为存量市场,在市场总额有限的情况下,在互联网、大数据等新一代信息技术迅猛发展的时代背景下,数字化成为帮助餐饮企业增加收入、降低成本、提升效率的重要工具。

毋庸置疑,餐饮收银 POS 系统作为餐饮门店最核心的业务系统,其中涉及大量实时交易的模块,例如订单、支付、打印、会员、优惠券等。我们乐凯撒用腾讯云函数最早做的是小程序的点单服务,后来逐渐扩大,到门店的云打印、会员标签的计算等等,总的来说包括独立应用、分布式计算和定时任务这三类业务。

在餐饮行业中,数字化系统的建构“效率”最为关键,这也正是乐凯撒选择携手腾讯云,借力腾讯云函数 SCF、消息队列 CMQ、TDSQL 等现有的成熟云产品的原因所在:不重复造轮子,通过好的工具有效实现降本增效,不断深化乐凯撒的数字化布局。

当前,我们基本上与腾讯云深度绑定,用的产品包括云函数 SCF、消息队列 CMQ、TDSQL、MySQL、COS 存储等。

其实,我们乐凯撒在正式使用云函数来支撑餐饮 POS 系统前,主要采用传统的 Java 体系的 J2EE 架构,通过部署不同的独立模块的系统来支撑门店的以上业务。

(图1,餐饮POS系统架构图)

其中我们乐凯撒的部分业务已经采用了云函数模式进行运行,而主要的 POS 业务和会员业务等仍然是通过各自独立的服务器集群进行部署。

然而,在去年 2 月份,我们乐凯撒遭遇了一次突发活动,这导致访问量急剧增加。在晚上 9 点多的时候,由于一个免费优惠券在社媒上传播,不到一个小时的时间内就有 18 万份优惠券被领取。这直接导致系统崩溃,并在接下来的几天里引发门店爆单、系统响应变慢等问题。

(图2,系统后台访问数据图)

如上图所示,我们乐凯撒遭遇了一次访问量剧增,整体访问量增加了 20 倍。这导致我们的 POS 收银系统无法承受,最终不得不停止服务。

在进行系统复盘后,我们提出了两个解决方案:

● 方案一:增加服务器资源,加强服务器灾备能力,并实现快速自动化部署脚本以便对服务器集群进行扩容。然而,这个方案需要额外的服务器预算,并且大部分时间服务器资源处于闲置状态,同时也增加了运维的复杂性。

● 方案二:采用云函数来实现和部署这类脉冲型业务,无需额外采购服务器,也无需进行大规模的扩容和相应的运维工作。然而,这需要对现有业务进行重构和调整,以适应云函数架构。

经过综合考虑,我们最终确定了方案二,将优惠券服务、订单服务和菜单服务从现有系统中分离出来,采用云函数进行单独运行和部署。这样能够更好地适应脉冲型业务的需求。

调整后的架构图如下:

(图3,调整后的系统架构图)

通过将订单服务和优惠券服务转换为云函数架构,我们显著提升了系统的整体稳定性。几乎没有发生系统崩溃或响应过慢等问题,并且我们几乎没有增加服务器预算的成本。

然而,在 2024 年 2 月份,我们乐凯撒遇到了两次类似的业务激增情况。一次是在 2 月 21 日,访问量接近 20 万次;另一次是在 2 月 23 日,访问量接近 40 万次。然而,我们的系统在这些情况下都能平稳运行下去。有趣的是,我甚至是通过门店爆单的情况才了解到访问量的剧增。

与此类似,我们的支付服务和打印服务一直采用云函数模式运行,并且从 2018 年上线至今几乎没有遇到过压力过载的故障。其中,我们的打印服务是访问量最高的服务,平时每分钟处理接近 4000 次请求,采用了 WebSocket 通信协议。

总而言之,通过将关键服务转换为云函数架构,我们不仅提高了系统的稳定性,还能应对突发的业务激增情况。支付服务和打印服务作为长期采用云函数模式运行的示范,也展示了它们在处理高访问量时的出色表现。

(图4,系统访问趋势图)

在这个案例中,我们乐凯撒采用了云函数的自动扩缩容、按需付费、高可用和微服务化的模式,以解决业务需求。在进行云函数改造的过程中,我们总结了一些问题:

● 相对于其他语言,云函数对 Java 的支持较弱。由于我们的大型或复杂业务系统主要使用 Java 实现,早期上线的支付服务和打印服务采用了 Node.js,因此上线相对顺利,稳定性和体验都比较好。但要使 Java 应用在云函数上更好地使用,需要付出更多努力。

● 纯 Java 语言的功能相对有限,为了高效开发,通常需要依赖开源框架,尤其是 Spring。

● Java 启动慢,内存占用大,与其他语言相比,在 Serverless 云函数下会占用更多资源。对于复杂业务系统,每个接口部署一个云函数会增加部署和管理成本。

● Java 应用涉及数据库请求时,通常会使用数据库连接池进行管理。然而,在云函数中,连接池不能设置得太大,最好在 3-5 个之间,否则会导致数据库连接数过高。由于云函数是为每个请求开启一个类似 Java 进程的服务,当并发量较大时,云函数会创建大量的 Java 进程,进而导致数据库连接数过高。

● 迁移现有业务代码至云函数时,需要尽量减少修改,实现无缝迁移,并支持本地调试和模拟云端环境,但目前还没有较好的解决方案。

为了解决上述问题,我们乐凯撒自研了一套兼容云函数和 SpringBoot 这两种模式都能正常运行的框架。该框架支持在本地调试和测试环境下直接使用 Spring Boot 或 Tomcat 启动,而在正式环境中则直接采用云函数运行。此外,该框架还支持一个云函数部署多个访问接口的服务,使云函数能够按模块划分微服务。

我们已经将该框架开源,并在 GitHub 上发布了一个简单的订单服务 demo 样例,感兴趣的朋友可以自行前往查看:(《基于腾讯云函数部署的springboot》 :https://github.com/lacesarLabs/tencentyun-scf-springboot)

其实,如果要广泛应用云函数,我们必须面对一个必须解决的问题,即大规模应用 Java 语言的云函数化。由于许多商业软件和复杂应用都是使用 Java 实现的,我们需要一个能够与 Spring Cloud 等微服务生态系统媲美的云函数框架,以及云函数调用的框架或平台,以更好地替换和升级现有的 Java 应用。这个框架应该支持基于云函数的函数注册、函数管理、函数调度和函数发现等配套功能。

在这个案例中,我们乐凯撒通过这个框架成功地将相关服务快速迁移到云函数上。最初,我们将云函数视为灾备和临时扩容服务,但在测试运行后,发现其稳定性和性能表现出色,于是将其作为正式环境的服务,而虚拟机中的服务则成为备份。

其实,整个解决方案的成本只占了方案一所需的正常服务器资源费用的不到 10%。在这个方案中,我们完美应用了云函数的几个重要特性:自动扩缩容、按需付费、天然的微服务模式以及高可用和无服务器概念。

结语

总而言之,餐饮行业中各企业进行数字化转型已经是大势所趋。企业适应数字化趋势,积极推动数字化转型,通过建设数字化、智能化平台,可以有效助力企业提高效率、降低成本、优化运营,并提供更好的产品和服务,在竞争激烈的市场中脱颖而出,实现可持续的增长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/726985.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ快速入门:如何保证消息不丢失|保证消息可靠性(九)

0. 引言 在金融、电商等对数据完整性要求极高的行业,消息的丢失可能会导致数据不一致,严重影响业务逻辑和数据统计,也影响客户体验,所以在很多业务场景下,我们都要求数据不能丢失。而rocketmq中,如何对消息…

集合进阶(泛型、泛型通配符、数据结构(二叉树、平衡二叉树、红黑树

一、泛型类、泛型方法、泛型接口 1、泛型概述 泛型&#xff1a;是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。泛型的格式&#xff1a;<数据类型>注意&#xff1a;泛型只能支持引用数据类型。 泛型的好处 1、统一数据类型。 …

建筑主体沉降观测规范详解

随着城市化进程的加速&#xff0c;高层建筑和大型建筑项目日益增多&#xff0c;建筑主体的沉降观测工作显得尤为重要。沉降观测是确保建筑安全稳定的关键环节&#xff0c;对于预防建筑安全事故、保障人民生命财产安全具有重要意义。本文将详细解析建筑主体沉降观测的规范和要求…

【机器学习】线性回归:从基础到实践的深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 线性回归&#xff1a;从基础到实践的深度解析引言一、线性回归基础1.1 定义与目…

Word和Excel如何快速对齐姓名

日常工作经常遇到整理参会人员名单时&#xff0c;有2字姓名、3字姓名&#xff0c;为保证文档美观&#xff0c;你是否还在一个一个空格在敲空格&#xff1f; 今天刘小生分享如何在Word和Excel中快速对齐姓名&#xff0c;快来练起来吧&#xff01; 1. Word姓名对齐 【第一步】…

看见未来社区:视频孪生技术打造智慧社区

智慧社区的建设需要创新的技术支撑。智汇云舟创新升级数字孪生为视频孪生技术&#xff0c;通过将真实世界的视频监控与数字模型实时融合&#xff0c;实现了对物理空间的实时实景动态模拟。 针对智慧社区管理业务&#xff0c;以智汇云舟视频孪生平台为支撑&#xff0c;综合承载…

一起笨笨的学C——014grep特别版

目录 前言 正文 原文&#xff1a; 要求总结&#xff1a; 一点一点来&#xff1a; grep学习&#xff1a; glob理解&#xff1a; dirent 目录函数&#xff1a; 加载日志文件&#xff1a; strstr与strcmp&#xff1a; 非首次尝试&#xff1a; 非二次 &#xff1a; 老师…

易兆微电子_嵌入式软件工程师笔试题

易先电子 嵌入式软件工程师笔试题(十七) 1.关键字 extern是什么含义, 请举例说明。 修饰符extern用在变量或者函数的声明前&#xff0c;用来说明 “ 此变量 / 函数是在别处定义的&#xff0c;要在此处引用 ”。 //main.c #include <stdio.h>int main() {extern int num…

英国牛津大学基因组学方向博士后职位

英国牛津大学基因组学方向博士后职位 牛津大学&#xff08;University of Oxford&#xff09;&#xff0c;简称“牛津”&#xff08;Oxford&#xff09;&#xff0c;位于英国牛津&#xff0c;是一所公立研究型大学&#xff0c;采用传统学院制。是罗素大学集团成员&#xff0c;被…

商超智能守护:AI监控技术在零售安全中的应用

结合思通数科大模型的图像处理、图像识别、目标检测和知识图谱技术&#xff0c;以下是详细的商超合规监测应用场景描述&#xff1a; 1. 员工仪容仪表监测&#xff1a; 利用图像识别技术&#xff0c;系统可以自动检测员工是否按照规范整理妆容、穿着工作服&#xff0c;以及是否…

管理咨询公司的五个招聘秘密

在管理咨询中&#xff0c;人是业务&#xff1b;客户支付数百万美元&#xff0c;要求管理顾问确认问题&#xff0c;并推荐解决方案。由于收入和合规性受到威胁&#xff0c;招聘错误的成本可能非常昂贵&#xff0c;一些公司更倾向于谨慎而不是效率。然而&#xff0c;在当今竞争激…

Nexus安卓木马分析报告

概述 2023年3月21日晚上&#xff0c;链安与中睿天下联合研发的监控系统检测到一种新型安卓木马。在经过睿士沙箱系统捕获样本之后&#xff0c;发现该安卓木马极有可能是原安卓网银盗号木马SOVA的变种。与此同时&#xff0c;意大利安全公司Cleafy发布了一篇题为《Nexus&#xf…

API接口对接的步骤流程?有哪些注意事项?

API接口对接自动化的实现方法&#xff1f;如何调试API接口发信&#xff1f; 在现代软件开发中&#xff0c;API接口对接已成为各个系统和应用之间进行通信和数据交换的关键技术。AokSend将详细介绍API接口对接的步骤流程&#xff0c;帮助开发者更好地理解和实现这一过程。 API…

VScode基本使用

VScode下载安装&#xff1a; Visual Studio Code - Code Editing. Redefined MinGW的下载安装&#xff1a; MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net x86是64位处理器架构&#xff0c;i686是32为处理器架构。 POSIX和Win32是两种不同的操…

Spring Cloud Gateway网关下的文档聚合(knife4j)

文章目录 引言I 服务发现自动聚合(discover)1.1 配置1.2 服务发现的路由聚合策略-数据来源1.3 编写动态路由实现类II 其他2.1 网关动态加载swagger路由和配置2.2 无法处理 lb://URI,返回503错误。2.3 SpringBoot3 解决NoResourceFoundException: No static resource favicon.i…

数据结构与算法-差分数组及应用

差分数组 差分数组&#xff1a; 其实差分数组是创建一个一个辅助数组&#xff0c;用来表示给定数组的变化&#xff0c;一般用来对数组进行区间修改的操作。 频繁操作数组区间的问题 假设我们要对一个数组进行区间操作。数组为 a {10,10, 20,20,50,… 100}。数组数据比较多。 对…

羊大师:培养儿童配得感,从自我认知开始

在儿童的成长过程中&#xff0c;配得感的培养是至关重要的。配得感&#xff0c;即孩子认为自己值得拥有美好事物和得到他人关爱的一种心理状态&#xff0c;是孩子自信心和自尊心的基石。而自我认知&#xff0c;则是培养配得感的第一步。 我们要引导孩子正确地认识自己。每个孩子…

vant组件 顶部下拉刷新和页面底部下拉获取数据

1.html部分&#xff08;顶部tab切换无&#xff0c;只有主体list部分&#xff09; <div class"yd" ><!-- yd端 --><van-pull-refresh v-model"refreshing" refresh"onRefresh"><van-listv-model"ydloading":finis…

【SpringCloud】Eureka的简单使用

本文使用的是jdk17&#xff0c;mysql8。 以下用两个服务做演示&#xff1a; 订单服务&#xff1a;提供订单ID&#xff0c;获取订单详细信息。 商品服务&#xff1a;提供商品ID&#xff0c;获取商品详细信息。 对于上篇http://t.csdnimg.cn/vcWpo 订单服务调用商品服务的时候&a…

Markdown 生成 Epub (Typora + pandoc)

文章目录 一、安装 pandoc二、Typora pandoc 导出 Pandoc 文件三、看看效果 一、安装 pandoc macOS 上使用 brew 安装 brew install pandoc其他系统可见&#xff1a;https://pandoc.org/installing.html 安装成功后查看版本 pandoc --version$ pandoc --version pandoc 2.1…