unquote(sendbymail翻译)

圈圈笔记 63

随着互联网人口红利逐渐减弱,基于流量的增长已经放缓,互联网行业迫切需要找到一片足以承载自身持续增长的新蓝海,产业互联网正是这一宏大背景下的新趋势。我们看到互联网浪潮正在席卷传统行业,云计算、大数据、人工智能开始大规模融入到金融、制造、物流、零售、文娱、教育、医疗等行业的生产环节中,这种融合称为产业互联网。而在产业互联网中,有一块不可小觑的领域是SaaS领域,它是ToB赛道的中坚力量,比如CRM、HRM、费控系统、财务系统、协同办公等等。

SaaS系统面临的挑战

在消费互联网时代,大家是搜索想要的东西,各个厂商在云计算、大数据、人工智能等技术基座之上建立流量最大化的服务与生态,基于海量内容分发与流量共享为逻辑构建系统。而到了产业互联网时代,供给关系发生了变化,大家是定制想要的东西,需要从供给与需求两侧出发进行双向建设,这个时候系统的灵活性和扩展性面临着前所未有的挑战,尤其是ToB的SaaS领域。

特别对于当下的经济环境,SaaS厂商要明白,不能再通过烧钱的方式,只关注在自己的用户数量上,而更多的要思考如何帮助客户降低成本、增加效率,所以需要将更多的精力放在自己产品的定制化能力上。

如何应对挑战

SaaS领域中的佼佼者Salesforce,将CRM的概念扩展到Marketing、Sales、Service,而这三块领域中只有Sales有专门的SaaS产品,其他两个领域都是各个ISV在不同行业的行业解决方案,靠的是什么?毋庸置疑,是Salesforce强大的aPaaS平台。ISV、内部实施、客户均可以在各自维度通过aPaaS平台构建自己行业、自己领域的SaaS系统,建立完整的生态。所以在我看来,现在的Salesforce已经由一家SaaS公司升华为一家aPaaS平台公司了。这种演进的过程也印证了消费互联网和产业互联网的转换逻辑以及后者的核心诉求。

然而不是所有SaaS公司都有财力和时间去孵化和打磨自己的aPaaS平台,但市场的变化、用户的诉求是实实在在存在的。若要生存,就要求变。这个变的核心就是能够让自己目前的SaaS系统变得灵活起来,相对建设困难的aPaaS平台,我们其实可以选择轻量且有效的Serverless方案来提升现有系统的灵活性和可扩展性,从而实现用户不同的定制需求。

Serverless工作流

在上一篇文章《资源成本双优化!看Serverless颠覆编程教育的创新实践》中,已经对Serverless的概念做过阐述了,并且也介绍了Serverless函数计算(FC)的概念和实践。这篇文章中介绍一下构建系统灵活性的核心要素服务编排——Serverless工作流。

Serverless 工作流是一个用来协调多个分布式任务执行的全托管云服务。在 Serverless工作流中,可以用顺序、分支、并行等方式来编排分布式任务,Serverless工作流会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行您定义的重试逻辑,以确保工作流顺利完成。Serverless工作流通过提供日志记录和审计来监视工作流的执行,可以轻松地诊断和调试应用。

下面这张图描述了Serverless工作流如何协调分布式任务,这些任务可以是函数、已集成云服务API、运行在虚拟机或容器上的程序。

看完Serverless工作流的介绍,大家可能已经多少有点思路了吧。系统灵活性和可扩展性的核心是服务可编排,无论是以前的BPM还是现在的aPaaS。所以基于Serverless工作流重构SaaS系统灵活性方案的核心思路,是将系统内用户最希望定制的功能进行梳理、拆分、抽离,再配合函数计算(FC)提供无状态的能力,通过Serverless工作流进行这些功能点的编排,从而实现不同的业务流程。

通过函数计算FC和Serverless工作流搭建灵活的订餐模块

订餐场景相信大家都不会陌生,在家叫外卖或者在餐馆点餐,都涉及到这个场景。当下也有很多提供点餐系统的SaaS服务厂商,有很多不错的SaaS点餐系统。随着消费互联网向产业互联网转换,这些SaaS点餐系统面临的定制化的需求也越来越多,其中有一个需求是不同的商家在支付时会显示不同的支付方式,比如从A商家点餐后付款时显示支付宝、微信支付、银联支付,从B商家点餐后付款时显示支付宝、京东支付。突然美团又冒出来了美团支付,此时B商家接了美团支付,那么从B商家点餐后付款时显示支付宝、京东支付、美团支付。诸如此类的定制化需求越来越多,这些SaaS产品如果没有PaaS平台,那么就会疲于不断的通过硬代码增加条件判断来实现不同商家的需求,这显然不是一个可持续发展的模式。

那么我们来看看通过函数计算FC和Serverless工作流如何优雅的解决这个问题。先来看看这个点餐流程:

通过Serverless工作流创建流程

首先我需要将上面用户侧的流程转变为程序侧的流程,此时就需要使用Serverless工作流来担任此任务了。

打开Serverless控制台,创建订餐流程,这里Serverless工作流使用流程定义语言FDL创建工作流,如何使用FDL创建工作流请参阅文档。流程图如下图所示:

FDL代码为:

version:v1beta1type:flowtimeoutSeconds:3600steps:-type:taskname:generateInfotimeoutSeconds:300resourceArn:acs:mns:::/topics/generateInfo-fnf-demo-jiyuan/messagespattern:waitForCallbackinputMappings:-target:taskTokensource:$context.task.token-target:productssource:$input.products-target:suppliersource:$input.supplier-target:addresssource:$input.address-target:orderNumsource:$input.orderNum-target:typesource:$context.step.nameoutputMappings:-target:paymentcombinationsource:$local.paymentcombination-target:orderNumsource:$local.orderNumserviceParams:MessageBody:$Priority:1catch:-errors:-FnF.TaskTimeoutgoto:orderCanceled-type:taskname:paymenttimeoutSeconds:300resourceArn:acs:mns:::/topics/payment-fnf-demo-jiyuan/messagespattern:waitForCallbackinputMappings:-target:taskTokensource:$context.task.token-target:orderNumsource:$local.orderNum-target:paymentcombinationsource:$local.paymentcombination-target:typesource:$context.step.nameoutputMappings:-target:paymentMethodsource:$local.paymentMethod-target:orderNumsource:$local.orderNum-target:pricesource:$local.price-target:taskTokensource:$input.taskTokenserviceParams:MessageBody:$Priority:1catch:-errors:-FnF.TaskTimeoutgoto:orderCanceled-type:choicename:paymentCombinationinputMappings:-target:orderNumsource:$local.orderNum-target:paymentMethodsource:$local.paymentMethod-target:pricesource:$local.price-target:taskTokensource:$local.taskTokenchoices:-condition:$.paymentMethod=="zhifubao"steps:-type:taskname:zhifubaoresourceArn:acs:fc:cn-hangzhou:your_account_id:services/FNFDemo-jiyuan/functions/zhifubao-fnf-demoinputMappings:-target:pricesource:$input.price-target:orderNumsource:$input.orderNum-target:paymentMethodsource:$input.paymentMethod-target:taskTokensource:$input.taskToken-condition:$.paymentMethod=="weixin"steps:-type:taskname:weixinresourceArn:acs:fc:cn-hangzhou:your_account_id:services/FNFDemo-jiyuan.LATEST/functions/weixin-fnf-demoinputMappings:-target:pricesource:$input.price-target:orderNumsource:$input.orderNum-target:paymentMethodsource:$input.paymentMethod-target:taskTokensource:$input.taskToken-condition:$.paymentMethod=="unionpay"steps:-type:taskname:unionpayresourceArn:acs:fc:cn-hangzhou:your_account_id:services/FNFDemo-jiyuan.LATEST/functions/union-fnf-demoinputMappings:-target:pricesource:$input.price-target:orderNumsource:$input.orderNum-target:paymentMethodsource:$input.paymentMethod-target:taskTokensource:$input.taskTokendefault:goto:orderCanceled-type:taskname:orderCompletedresourceArn:acs:fc:cn-hangzhou:your_account_id:services/FNFDemo-jiyuan.LATEST/functions/orderCompletedend:true-type:taskname:orderCanceledresourceArn:acs:fc:cn-hangzhou:your_account_id:services/FNFDemo-jiyuan.LATEST/functions/cancerOrder

在解析整个流程之前,我先要说明的一点是,我们不是完全通过Serverless函数计算和Serverless工作流来搭建订餐模块,只是用它来解决灵活性的问题,所以这个示例的主体应用是Java编写的,然后结合了Serverless函数计算和Serverless工作流。下面我们来详细解析这个流程。

启动流程

按常理,开始点餐时流程就应该启动了,所以在这个示例中,我的设计是当我们选择完商品和商家、填完地址后启动流程:

这里我们通过Serverless工作流提供的OpenAPI来启动流程。

Java启动流程

这个示例我使用Serverless工作流的Java SDK,首先在POM文件中添加依赖:

<dependency><groupId>com.aliyun

上一篇:

下一篇:

  推荐阅读

分享