畅捷通的 Serverless 探索实践之路

本文涉及的产品
简介: 畅捷通非 Serverless 架构向 Serverless 架构转型,提高了5个核心运行稳定性,同时管理简化运维工作,真正的提升系统资源利用率。

作者|计缘 阿里云云原生架构师


畅捷通介绍

畅捷通是中国领先的小微企业财税及业务云服务提供商,成立于2010年。畅捷通在2021年中国小微企业云财税市场份额排名第一,在产品前瞻性及行业全覆盖方面领跑市场,位居中国小微企业云财税厂商矩阵领军象限前列。作为专注小微企业云服务、软件提供商,畅捷通于2017年在业内创新提出“智公司”的概念,于2018年进一步丰富提出了“智能商业范式六步法”,旨在帮助小微企业明确、精准的走向智能化。畅捷通针对小微企业财务及管理转型问题,通过技术赋能,帮助小微企业实现人员在线、业务在线、客户在线、管理在线,改变传统的经营业态,推动数智化升级转型。


市场数据来源于艾瑞咨询发布的《2022年中国小微企业云财税行业研究报告》


在数字经济快速发展的战略机遇下,小微企业积极谋求业务转型,利用数智化手段增收、降本、提效的需求将进一步增强。畅捷通以数智财税,数智商业为核心,以生态服务为延展,提供小微企业云服务,推出了一系列SaaS产品,包括好会计(智能云财税)、好生意(营销型云进销存)、T+Cloud(全场景数智商业云应用)、好业财(创新企业数智经营平台)、易代账(数智财税平台)等,畅捷通云平台累计注册用户数超过800万。


业务及技术背景

畅捷通有5个核心SaaS产品,均以数智财税、数智商业为核心,以数据服务与生态服务为延展,提供小微企业云服务。

  • 好会计:票财税一体化的智能云财税系统,帮助财务人员通过 PC 端、手机端、微信端随时随地管理现金银行、发票、往来、报税、经营分析等。
  • 好生意:营销型云进销存系统,以帮助企业管店拓客为核心,实现智能获客找生意,智能决策做生意,智能高效管生意。
  • T+Cloud:数智商业云服务,帮助创新型企业通过数智化手段快速获取广泛的商业资源(客源、货源、资金及专业服务),对经营管理要素(人/财/货/客/数)实现有效的精细化、数字化、智能化管理。
  • 易代账:面向代账会计和代账公司设计的云应用,集管理、记账、报税于一体的智能财税系统。
  • 好业财:面向小型商贸、工贸一体、零售企业的云服务产品,以数智化经营管理为核心,帮助企业实现业财税票一体化,全渠道全场景移动管理,实现线上线下数据协同,全面提升企业竞争力。


大家知道SaaS软件基本都是面向To B的业务,虽然在请求量和流量方面远不如To C业务的系统,但是对于稳定性和安全性的要求远远高于面向To C的业务,并且因为涉及的业务领域更深,产品的功能会异常复杂,且模块和模块之间都有着紧密的联系,像多租户管理、租户数据隔离、网络隔离、系统扩展性(aPaaS能力)、BI(数据展示分析)等都是畅捷通要解决的难题。


所以这5个核心系统基本是生在云上,长在云上的,在畅捷通发展的这13年里,IT技术架构也在不断的做改进优化,目的就是能更好的解决上述的那些难点问题。

  • 部署架构演进路线:
  • 主部署架构:传统ECS部署架构 -> K8s部署架构
  • 探索型部署架构:Serverless部署架构
  • 技术架构演进路线:Java单体服务 -> 基于HSF的分布式架构 -> 基于Java SpringCloud的微服务架构 -> Serverless 函数架构


从部署架构的演进来看,畅捷通很早就看到了K8s能给产品和产研团队带来的价值,在CTO的果断决策下,重投入进行容器化改造,将之前的ECS部署架构改为K8s部署架构,并且选择了阿里云ACK,到目前,有十几个ACK集群在稳定支撑畅捷通的核心业务。


技术架构的演进其实是和部署架构的演进相辅相成的,Java单体服务和HSF存在于ECS部署架构,在做容器化转型的阶段,同时对服务进行了微服务的转型,并且也引入了消息中间件(RocketMQ,RabbitMQ)来辅助微服务的转型。


在大环境的驱使下,降本增效基本已经成为了每家企业的核心KPI,畅捷通也不例外,但畅捷通似乎更能居安思危,因为早在2020年,就因为改进效率的问题,开始调研Serverless技术,这也是畅捷通现在部署架构和技术架构在持续向Serverless演进埋下的最早的伏笔。


为什么选择Serverless

Serverless 技术概念出现于2012年,兴起于 2014 年(AWS Lambda),国内云厂商在 2017 年开始有相关的产品推出,经过多年的发展,Serverless 技术在落地场景、产品体验、稳定性等方面逐步趋于成熟。Serverless 其实是 Server + less 的组合,并不是真的没有服务器,而是帮助使用者屏蔽底层繁琐的服务器维护,让企业更加专注于业务。业界普遍认为 Serverless = FaaS(即 Function as a Service) + BaaS(即 Backend as a Service),支持自动弹性伸缩和按量付费。其实 Serverless 技术刚兴起的时候特指 FaaS,也就是函数计算的产品形态,经过这么多年的演进,已经扩展到 Serverless 技术理念和 Serverless 应用架构,云厂商也围绕 Serverless 推出了非常多相关的产品和服务,涵盖计算、存储、数据库和大数据等,帮助企业用户构建 Serverless 应用。

更新.png

Serverless 技术理念是指 Zero Server Ops + No Compute Cost When Idle,核心思想是让企业聚焦业务,降低 Ops。因此按照 Serverless 的理念,运维工作会被极大简化,研发人员一定程度上可以操控资源的使用,进而提升业务迭代效率。所以这个理念非常契合畅捷通研发、运维团队的发展思路。


Serverless技术调研

畅捷通是一家积极拥抱云的企业,对一切新的技术领域都有着求知欲,畅捷通总架构师郑芸女士多次组织核心研发运维同学和我们深入了解Serverless技术领域,从底层架构实现、适用的业务场景、对现有业务的改造成本等几个方面来综合分析,最终确定使用函数计算FC作为试点,开始Serverless的探索之路。


函数计算业务场景

image.png

针对SaaS系统,函数计算最适合的场景应该是HTTP、Web应用场景,大数据ETL场景和周期性任务场景,而畅捷通之后落地的项目基本都属于这三类场景。


非Serverless架构如何向非Serverless架构转型

选定好场景后,就需要解决如何转型的问题,这里的转型有个维度的概念:

  • 现存非Serverless架构业务向Serverless架构转型:会涉及到较大成本的改造问题
  • 新业务直接采用Serverless架构:遵循Serverless架构最佳实践范式即可

畅捷通这两部分都有涉及到,根据函数计算的概念,我们也总结了转型最佳实践,包括编程语言的选择、运行环境的选择、DevOps改造流程、代码改造流程等,一起和畅捷通逐一进行验证。

image.png


Serverless实践试金石 - SQL脚本执行任务

畅捷通的Serverless实践是渐进迭代的路线,在技术调研后,第一个试点项目是运维中的SQL脚本执行任务,因为面向To B客户的SaaS系统,出于稳定性的考虑,发版的节奏一般都不会特别的频繁,但每次发版的工作量是非常大的,尤其在发布大版本时,其中有一项重中之重的任务就是批量跑SQL脚本,要么更新元数据,要么更新表结构。主要在T+Cloud这个系统中试点,这个试点项目改造起来相对比较简单,风险也比较可控,属于客户小试牛刀。


原有方式的痛点

批量跑SQL脚本任务是需要计算资源的,但这些计算资源的使用率极低,所以不可能长期储备着计算资源,但如果要从支撑业务的资源中分配的话,那可能又会对业务产生影响。另外每次跑批时需要在计算量也不算小,所以每次就得靠运维人员手动加减服务器,费时费力,有时候因为资源不能及时准备好,从而影响发版进度,有时候忘记释放资源,又会产生额外的费用。所以核心的痛点就是提高效率、提升运维幸福度


Serverless架构

image.png

基于Serverless按需所取,按量计费的特点,将执行SQL脚本的任务放在了函数计算中,做到了在发版要执行SQL脚本的时候,按需通过运维管理平台请求函数计算,通过自动拉起所需计算资源来处理SQL脚本,脚本执行完后自动释放,相当于有一个随用随取的资源池供客户使用。改造为Serverless架构后,主要带来了以下优势:

  • 彻底解决了按需所取的计算资源问题,运维人员不需要再花额外时间考虑准备资源的问题。
  • 得益于函数计算的弹性速度和并发扩展能力,Serverless架构下,在保证SQL脚本之间顺序性的前提下,并行执行SQL脚本的能力大幅提升,有效缩短了发版持续时间。
  • 函数计算异步请求有后处理机制,即当函数执行成功或者执行失败后,可以设置目标服务及时做后处理,在这个场景下,可以有效自动化处理执行失败的SQL脚本任务,比如执行失败后发送消息,或者执行失败后重试执行,或者再拉起另一个函数做补偿逻辑等等。极大的提升了SQL脚本批量执行的稳定性。


Serverless实践全面开花

在SQL脚本执行任务这个试点项目中,Serverless架构切实的给客户带来的价值,所以畅捷通逐渐寻找其他适合函数计算的场景。


运维工具集

在实践Serverless架构时,大多数客户都有一个惯性思维,那就是先找边缘非核心业务试点,达到预期效果后,开始从运维侧入手展开,畅捷通也不例外。所以第二个开始实践Serverless架构的项目其实是SQL脚本任务这个点的延展,就是将整个运维管理平台中合适的场景都替换为函数计算。因为运维管理平台相比业务系统,对资源的需求也是较为低频的,其中的一些任务执行可能一天就几次,甚至一个月几次,所以本质上都是将各种运维任务脚本放在函数计算中运行。除了享受到了函数计算资源按需所取,大并发执行,后处理容错机制等红利外,还有一点优势就是在快速修复脚本异常的场景下,函数计算有先天优势。

  • 函数计算提供了WebIDE,对于需要快速修复脚本异常的情况下,可以快速打开控制台,在WebIDE中修改脚本,一键部署发布即可。在应急场景下非常有效。
  • 函数计算提供了灰度版本的能力,所以在需要快速修复问题的场景下,也可以快速创建一个新版本,然后在运行态快速切换版本,保留下来历史版本,用于后续分析。

image.png


开放平台

我们通常评判SaaS产品的能力好坏时,对业务领域的理解深度固然重要,但也有另一个非常重点的衡量标准就是它是否具备aPaaS可扩展能力或者API开放平台,因为它关系到这个SaaS产品未来能走多远,比如订阅付费和定制化交付收入的占比,上下游生态的建设等。畅捷通的SaaS产品就有很强的扩展能力和API开放平台。


畅捷通的API开放平台有一个使用很广泛的场景就是他们的用户去对接三方的系统,或者其他的SaaS系统,比如接美团的消息,接饿了么的消息等,在这个场景下又有很明显的To C特征,即消息量的波动很大,高峰期消息TPS可以达到万级别,但低峰期的消息TPS可能只有几十。所以在这个场景下,有这么几个痛点问题:

  • 对接的系统无法统一标准,需要支持多种协议,比如对接三方SaaS系统大多数是HTTP协议,对接一些用户的自研系统可能希望走MQ协议,或者Kafka协议。为了适配多种接收协议,后端就需要实现多套代码。维护成本高。
  • 消息流波动极大,波峰波谷相差几万TPS,导致储备资源时只能按照峰值储备,资源利用率极低,成本浪费严重。


这些痛点又完美命中了函数计算的核心特点,结合前两个场景中函数计算的良好表现,所以畅捷通第三个试点项目就是API开放平台,将接受三方消息,处理消息的架构换为函数计算架构。

image.png

从架构图上可以看出,处理消息或者请求的函数逻辑是一致的,只是接收协议不同,所以使用函数计算可以方便维护三个逻辑一样的函数,但是分别具有不同的触发器,这样只需要维护一套代码即可实现多种接收协议的场景。


说到函数计算的触发器,就不得不说Serverless架构的另一个优势,就是生态集成:

image.png

函数计算上游对接了近百种触发器,所以如果采用了函数计算架构,那相当于已经具备了和阿里云近百种产品的集成与被集成能力,极大的提升了效率和降低了集成成本。


所以畅捷通将API开放平台转型为Serverless架构,也是收获满满:

  • 通过函数计算触发器解决了多种接收协议下维护多套代码的问题。
  • 极大的提升了资源利用率,有效优化了资源成本。在这个场景下,处理消息的函数使用Go语言,使用0.1c和0.05c规格的函数实例,并且采用单实例多并发。在有几万消息的峰值情况下,只需要十几个函数实例就可以稳定支撑,相比原有的K8s架构,成本从几千元每月节省到了几百元每月。


智能补货业务

随着试点Serverless架构的项目越来越多,同时也获得了巨大的收益,畅捷通开始逐渐将Serverless架构实践的眼光看向了核心业务。也许这就是命运的安排,正好畅捷通有一块新业务开始规划设计,函数计算被考虑了进去,这就是智能补货业务。该业务是根据企业的业务数据,按商品的库存、采购、销售或材料消耗规律,帮助采购员创立补货模型,从而快捷地帮助采购员计算、生成补货参考结果的智能化助手。


该业务由于业务数据量大,采用了离线+实时数据同步计算,需要参与补货计算的档案、业务数据同步到数据仓库中,并对数据根据业务需求定义进行预加工处理,整体有以下这些性质:

  • 具有突发流量特性,由于计算的数据量比较大,用户可以选择近半年甚至一年的业务数据进行计算分析,是个密集型计算,所以对计算资源的要求较高,如果传统部署架构顶着业务流量峰值储备的话,势必又有成本浪费的问题。
  • 智能补货业务它不是一个新的产品,而是已有产品中的一个新的业务模块,受限于微服务的拆分粒度,这部分逻辑会和已有的业务逻辑耦合度很高,所以如果运算补货算法逻辑时消耗大量资源,有可能存在抢占资源问题,影响到已有业务的稳定性。
  • 智能补货,除了主打智能以外,也支持用户自定义补货规则,所以在一定程度上每个用户的补货规则就像一个一个业务流程,那整个系统需要具备调度和编排这种业务流程的能力。


所以总结下来,智能补货业务有三个特点:

  • 有流量潮汐特性,希望计算资源有较强的扩展能力。
  • 希望计算资源独立,不抢占支持现有业务的资源。
  • 希望有一套架构支撑规则的灵活调度和编排。


这里又出现了函数计算的一个核心特点,那就是具备Serverless工作流的编排能力,我们先看架构图:

image.png

可以看到,补货算法逻辑层全部放在了函数计算中,和部署在ACK中的上下游业务互通,通过函数计算快速弹性能力解决流量潮汐下资源利用和成本问题,同时将这部分耗资源的逻辑剥离出来,也解决了资源抢占的问题。


对于补货规则灵活制定这部分,结合了Serverless工作流,每一个规则就是一个流程,流程中的每一个函数就是规则中的一个个算子,Serverless工作流不止支持对函数计算的编排,也支持其他数学逻辑运算和其他阿里云的核心产品,比如ECS、SAE、ACK、OSS等,同时在版本管理和发布管理方面也是比较成熟。所以通过这一套架构增强业务功能的可扩展性。


虽然该业务对时延不敏感,但我们也尽最大可能对Java函数的冷启动问题进行了优化,比如使用镜像加速能力,JDK使用阿里云优化过的Dragonwell,开启预留实例+闲置计费等,从而达到该业务对时延的要求。另外对于Snapshot这些更深一层的技术优化我们也已经开始了调研和排期,尽最大努力彻底解决Java函数的冷启动问题。


更多业务场景

到目前为止,除了上文中提到的四个场景外,畅捷通还有其他使用Serverless架构实践的场景,都取得了预期的受益,比如RPA业务,零售数据全租户离线下载,离线数据处理等。覆盖了运维领域,核心业务领域,大数据领域,相信未来还会有更多的场景会转型为Serverless架构。


给同行者的建议

Serverless 从根本上降低了用云的门槛和成本,Serverless 在业界的发展历程也已经超过 8 年,从落地效果看,阿里云函数计算是比较适合SaaS系统企业的。同时函数计算目前也在做 AIGC 场景,致力于帮用户以更低的门槛接入大模型服务。去年开始,阿里云在大力推广 Serverless 产品服务,升级到了战略地位,包括提出 All in Serverless,目前云消息队列 MQ 计划在云栖大会后推出 Serverless 版、数据库 RDS 已经推出了 Serverless 版本、大数据团队也在推进 Serverless 化,从用户视角,我认为这是非常利好的。通过全面的 Serverless 产品和服务,可以构建端到端的 Serverless 架构或者应用,这带来的改变是颠覆性的。与其观望,不如提前拥抱,期望畅捷通关于 Serverless 的实践经验能给更多企业带来一些启发。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
人工智能 NoSQL Serverless
基于函数计算3.0 Stable Diffusion Serverless API 的AI艺术字头像生成应用搭建与实践的报告
本文主要分享了自己基于函数计算3.0 Stable Diffusion Serverless API 的AI艺术字头像生成应用搭建与实践的报告
469 6
基于函数计算3.0 Stable Diffusion Serverless API 的AI艺术字头像生成应用搭建与实践的报告
|
7月前
|
存储 运维 Serverless
【函数计算实践】一个应用案例
本文起源于一个用户匹配的需求。用户的不同信息分布于两个系统,且客观上无法直接打通(不必纠结具体是什么场景,这是真实存在,且非技术上能解决的),所以就涉及到两个系统id匹配的问题。
218 0
|
7月前
|
编解码 人工智能 运维
课时9:典型案例2:函数计算在音视频场景实践(三)
典型案例2:函数计算在音视频场景实践
496 0
|
4月前
|
运维 中间件 Java
淘宝权益玩法平台的Serverless化实践
淘宝权益玩法平台的Serverless化实践
226 0
|
4月前
|
SQL 弹性计算 运维
畅捷通的 Serverless 探索实践之路
畅捷通的 Serverless 探索实践之路
|
6月前
|
人工智能 运维 Serverless
基于函数计算模板部署AI应用实践
在本实验场景中,将向大家介绍如何基于阿里云函数计算FC服务部署Stable Diffusion实现文字到图片的生成;以及部署ImageAI 目标检测应用,对现有图片内容进行检测。
|
7月前
|
弹性计算 监控 Cloud Native
课时5:云原生体系下 Serverless 弹性探索与实践(五)
云原生体系下 Serverless 弹性探索与实践
938 0
|
7月前
|
弹性计算 Kubernetes Serverless
课时1:Serverless容器入门和实践案例
课时1:Serverless容器入门和实践案例
641 0
|
7月前
|
弹性计算 Serverless 网络安全
Serverless应用引擎弹性伸缩实践
本场景将介绍如何使用SAE的定时弹性能力应对周期性流量洪峰。
356 0
Serverless应用引擎弹性伸缩实践
|
7月前
|
JavaScript Java Serverless
【函数计算实践】阿里云函数计算初探
阿里云的函数计算——FC ,是一个事件驱动的全托管 Serverless 计算服务,开发者无需管理服务器等基础设施,只需编写代码并上传。函数计算FC 会为您准备好计算资源,并以弹性、可靠的方式运行您的代码。
371 0

热门文章

最新文章

  • 1
    Serverless 应用引擎产品使用之在函数计算中,数据库访问失败如何解决
    5
  • 2
    Serverless 应用引擎产品使用之在阿里云函数计算中发现没有NAC(Native Application Component)选项,且无法自己上传MOD(模块)如何解决
    6
  • 3
    Serverless 应用引擎操作报错合集之在阿里函数计算中,sd部署启动报错CAExited 报错信息“operation not permitted”如何解决
    5
  • 4
    Serverless 应用引擎操作报错合集之在阿里函数计算中,SD Controlnet Depth 运行过程中出现错误“urllib3 v2.0 only supports OpenSSL 1.1.1+”如何解决
    7
  • 5
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,laravel zip包使用示例的start.sh脚本启动时出现错误代码如何解决
    7
  • 6
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,服务器调用FC函数时出现 "[Errno -3] Temporary failure in name resolution)" 错误如何解决
    5
  • 7
    Serverless 应用引擎操作报错合集之在Serverless 应用引擎中,部署过程中遇到错误代码如何解决
    9
  • 8
    Serverless 应用引擎操作报错合集之在 Serverless 应用引擎中,遇到“没法通过 head 传递灰度标识”如何解决
    7
  • 9
    Serverless 应用引擎操作报错合集之在阿里函数计算中,函数执行超时,报错Function time out after如何解决
    12
  • 10
    Serverless 应用引擎操作报错合集之在阿里函数计算中,云函数怎么一直报错Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'php server.php '.如何解决
    8
  • 相关产品

  • 函数计算