首页> 中国专利> 一种基于faas函数服务的拍卖竞价系统及方法

一种基于faas函数服务的拍卖竞价系统及方法

摘要

本发明涉及一种基于faas函数服务的拍卖竞价系统及方法,包括公告/标的上传模块、标的展示模块、竞买人拍卖竞价模块、拍卖师功能模块及faas函数服务模块;在需要保障重点拍卖会或重点二级域名网站场景下,将所有模块抽象成一组函数服务,还包括函数镜像生成及函数部署模板生成功能;在对应场景下,实现函数服务部署、函数服务调用及函数服务删除的功能。通过faas函数服务架构,为需要重点保障的拍卖会及二级域名网站提供单独的函数服务,与其他后台服务隔离。使用本发明的函数服务架构,只需单独开发新增加的函数功能,部署新开发的函数镜像服务即可,避免了微服务架构需要在模块中增加函数,升级时需要暂停服务,重新部署的问题。

著录项

  • 公开/公告号CN114663202A

    专利类型发明专利

  • 公开/公告日2022-06-24

    原文格式PDF

  • 申请/专利号CN202210541560.2

  • 发明设计人 陈伟;李丽华;

    申请日2022-05-19

  • 分类号G06Q30/08;G06Q30/06;G06F8/30;G06F9/50;

  • 代理机构济南金迪知识产权代理有限公司;

  • 代理人杨树云

  • 地址 250000 山东省济南市历下区高新区新泺大街1299号鑫盛大厦1号楼19层B区

  • 入库时间 2023-06-19 15:44:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-06-24

    公开

    发明专利申请公布

说明书

技术领域

本发明涉及一种基于faas函数服务的拍卖竞价系统及方法,为拍卖公司、产权交易所网络资产交易平台资产拍卖竞价交易提供服务,属于网络资产交易技术领域。

背景技术

目前,主流的资产拍卖网站系统基本都是基于Spring cloud微服务架构开发,存在问题是:所有的竞拍服务请求都共享后台服务的计算资源,导致VIP客户、需重点关注的或社会影响较大的拍卖会与普通拍卖会共享同样后台服务、资源和运维保障。

基于目前微服务架构的拍卖竞价后台服务器因高并发报价访问等造成资源紧张时,会影响所有在线拍卖的拍卖会,重点场次拍卖会和普通拍卖会同时举行的话,用户体验一致,无法突出对重点拍卖会的体验保障。部分拍卖平台提供子域名竞拍网站服务,例如,某拍卖平台为某银行A开通bank.dpauc.com子域名,bank.dpauc.com作为银行A的竞价交易平台。银行A的客户登录子域名平台即可参与拍卖会。子域名系统与拍卖平台共享同一套后台微服务架构和数据库。因此,同样也存在服务器资源紧张时,子域名平台与拍卖平台其他用户体验一致,子域名平台有重点保障需求或要求时,无法突出对子域名系统的体验保障。

基于目前微服务架构的拍卖竞价系统,在解决子域名、重点拍卖会保障主要存在一些不足:1、要实现服务资源的隔离,要求服务系统能按需灵活部署、撤销,分配的资源能够按需配置,这是微服务架构无法解决的问题;2、目前的微服务架构无法解决同时举行的多场次拍卖会中的针对某一场次或某几场次拍卖会进行重点保障的功能,即无法实现系统(包括子域名)中具体某一场次拍卖会粒度的保障。3、使用微服务架构,在某一模块中新增后台服务功能时,必须暂停该模块的服务,进行打包升级,无法做到函数级别的服务增加和终止。

发明内容

针对现有技术的不足,本发明提出了一种基于faas函数服务的拍卖竞价系统;

本发明还提供了一种基于faas函数服务的拍卖竞价方法。

术语解释:

1、FaaS,Function as a Service,"功能即服务"(也译作“函数即服务”),是一种在无状态容器中运行的事件驱动型计算执行模型。FaaS 为开发人员提供了一种运行应用的抽象方式,可以在无需管理服务器的情况下响应事件,开发人员可以专注于编写代码和实现业务价值。

2、OpenFaaS,OpenFaaS是一款开源的faas框架,可以直接在Kubernetes上运行。

3、openfaas+k8s,使用了openfaas和 k8s ,k8s就是Kubernetes的简写称呼,Kubernetes k和s中间是8个字母,简称k8s。

4、函数的openfass yaml文件,YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。此处 openfass yaml文件 ,是指使用YAML 的语法openfass配置文件。k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象的操作编辑到YAML格式文件中,把这种文件叫做资源清单文件,通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署。

5、faas-cli,faas-cli是OpenFaaS官方的命令行界面工具。

6、Kubernetes,简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用。

7、faas-netes,faas-netes 为 Kubernetes 提供OpenFaaS支持;开源项目地址为:https://github.com/openfaas/faas-netes。

8、拍卖标的(简称标的),是在拍卖过程中,被依法拍卖的物品或者财产权利。

本发明的技术方案如下:

一种基于faas函数服务的拍卖竞价系统,包括公告/标的上传模块、标的展示模块、竞买人拍卖竞价模块、拍卖师功能模块及faas函数服务模块;

公告/标的上传模块用于:上传、录入拍卖会公告及标的信息,录入标的业务信息;

标的展示模块用于:对信息进行展示,供用户查询、查看;具体是指:在未开拍前,展示标的信息及距离开拍的时间;拍卖中,展示拍卖的状态信息;拍卖结束后,对拍卖结束的标的展示标的的状态;

竞买人拍卖竞价模块用于:提供竞买人参与标的拍卖,实时获取当前拍卖状态信息、出价;

拍卖师功能模块用于:提供拍卖师主持拍卖会功能;

faas函数服务模块用于:在需要隔离保障重点拍卖会或重点二级域名网站场景下,将所述公告/标的上传模块、标的展示模块、竞买人拍卖竞价模块、拍卖师功能模块的功能服务抽象成一组函数服务,faas函数服务模块还包括函数镜像生成及函数部署模板生成功能;每个函数服务都通过openfaas+k8s,最终以docker容器的形式发布并启动运行,通过不同的函数服务访问地址为前端网页、APP终端提供对应的功能服务;以及,在需要隔离保障重点拍卖会的场景下,对拍卖和竞价过程涉及的业务进行函数服务部署、函数服务调用及函数服务删除的功能;在需要隔离重点二级域名网站场景下,对整个重点二级域名网站进行函数服务部署、函数服务调用及函数服务删除的功能。

根据本发明优选的,faas函数服务模块包括nginx模块、openfass API gateway模块、faas-netes模块、kubernetes集群、消息分发模块、消息队列、redis内存数据库、Rejson模块、推送模块及nfs文件存储模块;

nginx模块用于:接收、返回来自PC端、移动客户端的客户端访问请求,将对后台的服务请求转发至openfass API gateway模块;

openfass API gateway模块用于:当要部署或者调用函数服务的时候,openfassAPI gateway模块将请求转发给faas-netes模块,faas-netes模块完成调用kubernetes集群中部署的函数服务镜像,实现业务功能调用;

消息队列用于存储消息,由消息分发模块发送至订阅者,实现并发场景下的同步信息处理,同步并发处理拍卖竞价过程中的报价信息、拍卖师拍卖会主持开拍、暂停、恢复、终止、公示信息;

redis内存数据库用于缓存标的,或对二级域名是否重点保障的信息、及在拍卖过程中的报价信息;

Rejson模块直接从redis内存数据库中存储、更新和获取JSON值;

推送模块用于客户端的websocket信息推送,保证参与同一场次拍卖会的所有用户能及时收到出价及拍卖师信息;

nfs文件存储模块用于存储服务函数部署的yaml文件。

一种基于faas函数服务的拍卖竞价方法,运行于所述基于faas函数服务的拍卖竞价系统,包括:

将所述公告/标的上传模块、标的展示模块、竞买人拍卖竞价模块、拍卖师功能模块的功能服务抽象成一组函数服务,faas函数服务模块还包括函数镜像生成及函数部署模板生成功能;

对于没有特殊要求重点保障的服务,统一访问默认的函数服务;对于需要重点保障的拍卖场次即需要隔离重点拍卖会的服务,对拍卖和竞价过程涉及的业务进行函数服务部署、函数服务调用及函数服务删除的功能;对于需要重点保障的二级域名整站服务即需要隔离重点二级域名网站的服务,对整个重点二级域名网站进行函数服务部署、函数服务调用及函数服务删除的功能。

根据本发明优选的,函数镜像生成,包括:基于OpenFaaS框架编写服务函数,使用faas-cli工具编译打包生成docker镜像,将docker镜像推送到docker镜像仓库中;

函数部署模板生成,包括:将编写的服务函数部署的yaml文件提取成为yaml文件模板,将yaml文件中随场景不同的参数配置抽取出来,yaml文件模板中使用占位符形式,将yaml文件模板存入NFS服务器,按函数文件名生成文件目录,目录中存入yaml文件模板。

根据本发明优选的,函数服务部署,包括:

创建需要隔离重点拍卖会及创建需要隔离重点二级域名网站时,对于对应的服务函数,从NFS服务器中读取yaml文件模板,传入参数,替换yaml文件模板中需要替代的部分,形成部署yaml文件,一个yaml文件中能配置多个服务函数,yaml文件保存到NFS服务器;

运行faas-cli deploy指令,根据faas-cli deploy指令中指定的yaml文件,从docker镜像仓库中下载函数镜像到kubernetes集群,生成docker容器;deploy指令启动docker容器。

根据本发明优选的,OpenFaaS为每个服务函数生成基于函数名称的唯一URL地址;函数服务调用,包括:前端应用调用统一的后台的函数服务地址,函数服务请求中写有标的ID及所在二级域名网站系统ID;函数服务请求被到转发openfass API gateway模块,openfass API gateway模块将函数服务请求转发至faas-netes模块,faas-netes模块根据标的ID及二级域名网站系统ID,从redis内存数据库中读取出该标的,或对二级域名站点ID的请求,是否重点保障,如是,则读取出对应的函数服务名称,调用对应的函数服务。

进一步优选的,redis内存数据库中存储是否需要隔离重点的拍卖会、需要隔离重点的二级域名网站的信息,在创建拍卖会、创建二级站点时,以json格式存入redis内存数据库中,redis内存数据库中存储的是否需要隔离重点的拍卖会、需要隔离重点的二级域名网站的信息,在拍卖会结束、二级域名网站站点撤销时清除。

进一步优选的,在faas-netes中设置缓存,当拍卖会或二级域名网站站点第一次调用后台服务函数,读取redis内存数据库中的结果后,将结果放置到缓存中; faas-netes中的缓存信息,在拍卖会结束、二级域名网站站点撤销时清除。

根据本发明优选的,函数服务删除,包括:

Kubernetes集群启动Cronjob定时任务,定时运行资源释放脚本;

资源释放脚本程序扫描redis内存数据库中的拍卖会数据,如果是需要隔离重点的拍卖会,并且已结束,则调用faas-cli remove命令,删除对应的函数服务,需要隔离重点的拍卖会拍卖过程结束后,调用默认的函数服务;

资源释放脚本程序扫描redis内存数据库中的需要隔离重点的二级域名网站,如果需要隔离重点的二级域名网站站点被删除停用,则调用faas-cli remove命令,删除对应的函数服务。

进一步优选的,上述三种服务,包括没有特殊要求重点保障的服务、需要隔离重点拍卖会的服务及需要隔离重点二级域名网站的服务,通过不同的函数调用地址进行区分、调用,同一功能函数服务代码、镜像版本完全相同,仅函数命名不同;在函数的openfassyaml文件设置所有函数镜像均拉取最新版本的镜像。

进一步优选的,函数服务的数据均从redis内存数据库进行存取,具体是指:对未开始或已结束的标的信息,从关系型数据库中查询、读取数据;对正在拍卖的标的,从redis内存中读取竞价记录列表信息,拍卖结束后,由数据同步服务将数据从redis内存中同步到redis内存数据库中,同步完成后该部分数据从redis内存中释放,删除函数服务容器。

进一步优选的,使用消息队列对竞价信息处理请求进行缓存,串行处理。

本发明的有益效果在于:

1、通过faas函数服务架构,为需要重点保障的拍卖会及二级域名网站提供单独的函数服务,与其他后台服务隔离,可精确到重点保障单个拍卖会级别。

2、通过本发明的faas函数服务架构,利用Kubernetes集群的镜像管理及服务自动伸缩功能及为镜像单独设置CPU、内存资源等保障服务体验。

3、本发明为需要重点保障的竞价服务生成打包发布脚本,通过脚本程序发布对应的faas服务,并通过前端服务调用命名约定机制实现服务调用。当服务不再需要时,通过脚本程序实现函数服务的撤销和资源释放。

4、本发明基于faas技术架构,相比微服务架构还拥有按需资源使用,节约成本,函数支持多语言开发、简化运维人员运维和管理服务器工作量等优点。

5、本发明系统同一函数、同一版本不同镜像实例的发布及服务调用方法。当系统增加新的需求,需要增加新的后台服务时,使用本发明的函数服务架构,只需单独开发新增加的函数功能,部署新开发的函数镜像服务即可,避免了微服务架构需要在模块中增加函数,升级时需要暂停服务,重新部署的问题。

附图说明

图1为基于faas函数服务的拍卖竞价系统的总体结构示意图;

图2为函数镜像生成及函数部署模板生成的流程示意图;

图3为函数服务部署的流程示意图;

图4为函数服务调用的流程示意图;

图5为基于faas函数服务的拍卖竞价方法的流程示意图。

具体实施方式

下面结合说明书附图和实施例对本发明作进一步限定,但不限于此。

实施例1

一种基于faas函数服务的拍卖竞价系统,包括公告/标的上传模块、标的展示模块、竞买人拍卖竞价模块、拍卖师功能模块及faas函数服务模块;

公告/标的上传模块用于:上传、录入拍卖会公告及标的信息,录入标的业务信息;作为标的展示、公示的信息来源。

标的信息的字段如表1所示:

表1

公告信息的字段如表2所示:

表2

标的展示模块用于:对信息进行展示,供用户查询、查看;具体是指:在未开拍前,展示标的信息及距离开拍的时间;拍卖中,展示拍卖的状态信息;例如,拍卖暂停,及实时报价记录信息;拍卖结束后,对拍卖结束的标的展示标的的状态;例如,成交、流拍,及报价记录。

竞买人拍卖竞价模块用于:提供竞买人参与标的拍卖,实时获取当前拍卖状态信息、出价;

拍卖师功能模块用于:提供拍卖师主持拍卖会功能;例如,查看拍卖会竞买人入场信息、发布公示信息、启动\暂停拍卖会功能、获取当前实时报价信息及调整加价幅度功能。

faas函数服务模块用于:根据业务需求,在需要隔离保障重点拍卖会或重点二级域名网站场景下,将公告/标的上传模块、标的展示模块、竞买人拍卖竞价模块、拍卖师功能模块的功能服务抽象成一组函数服务,faas函数服务模块还包括函数镜像生成及函数部署模板生成功能;

每个函数服务都通过openfaas+k8s,最终以docker容器的形式发布并启动运行,通过不同的函数服务访问地址为前端网页、APP终端提供对应的功能服务;以及,在需要隔离保障重点拍卖会的场景下,主要是保障拍卖竞价过程,实现对拍卖和竞价过程涉及的业务进行函数服务部署、函数服务调用及函数服务删除的功能;在需要隔离重点二级域名网站场景下,实现对整个重点二级域名网站进行函数服务部署、函数服务调用及函数服务删除的功能。因此,将上述模块所有功能都进行函数服务部署及隔离。基于faas (Functionas a service(函数即服务))技术架构,将拍卖会竞价核心功能逻辑抽象成函数及适合函数计算的数据结构,竞价平台后台架构使用函数服务替代目前的微服务架构。

其中,拍卖和竞价过程涉及的业务,例如,主要保障的业务内容为:拍卖会创建、拍卖师主持、竞买人出价、拍卖信息查询基本拍卖业务操作。

二级域名网站,例如,点拍网的域名是www.dpauc.com,点拍网为客户定制一个二级域名的网站,例如,jnns.dpauc.com,某农商行资产交易网,用户可以通过登录jnns.dpauc.com实现点拍网提供的拍卖功能。重点二级域名网站,即此二级域名的网站需要重点保障。

基于本发明函数服务架构,函数服务要求能覆盖支撑拍卖会创建、拍卖师主持、竞买人出价、拍卖信息查询等基本拍卖业务操作要求。

实施例2

根据实施例1所述的一种基于faas函数服务的拍卖竞价系统,其区别在于:

如图1所示,faas函数服务模块包括nginx模块、openfass API gateway模块、faas-netes模块、kubernetes集群、消息分发模块、消息队列、redis内存数据库、Rejson模块、推送模块及nfs文件存储模块;

nginx模块作为反向代理,用于:接收、返回来自PC端、移动客户端的客户端访问请求,将对后台的服务请求转发至openfass API gateway模块;

openfass API gateway模块作为faas的入口,openfass API gateway模块用于:当要部署或者调用函数服务的时候,openfass API gateway模块将请求转发给faas-netes模块,faas-netes模块完成调用kubernetes集群中部署的函数服务镜像,实现业务功能调用;

消息队列用于存储消息,由消息分发模块发送至订阅者,实现并发场景下的同步信息处理,同步并发处理拍卖竞价过程中的报价信息、拍卖师拍卖会主持开拍、暂停、恢复、终止、公示信息;通过消息队列将消息排序、串行处理也避免了同步数据处理使用分布式锁带来的处理效率低问题。

redis内存数据库用于缓存标的,或对二级域名是否重点保障的信息、及在拍卖过程中的报价信息;加快数据访问速度,避免频繁访问关系型数据库。

Rejson模块是Redis的模块,完全支持JSON标准,可直接从redis内存数据库中存储、更新和获取JSON值;

推送模块主要功能是用于客户端的websocket信息推送,保证参与同一场次拍卖会的所有用户能及时收到出价及拍卖师信息;

nfs文件存储模块的主要功能是用于存储服务函数部署的yaml文件。

实施例3

一种基于faas函数服务的拍卖竞价方法,运行于实施例1-3任一所述的基于faas函数服务的拍卖竞价系统,包括:

将公告/标的上传模块、标的展示模块、竞买人拍卖竞价模块、拍卖师功能模块的功能服务抽象成一组函数服务,faas函数服务模块还包括函数镜像生成及函数部署模板生成功能;

对于没有特殊要求重点保障的服务,统一访问默认的函数服务;对于需要重点保障的拍卖场次即需要隔离重点拍卖会的服务,主要保障拍卖竞价这一过程,因此,实现对拍卖和竞价过程涉及的业务进行函数服务部署、函数服务调用及函数服务删除的功能;对于需要重点保障的二级域名整站服务即需要隔离重点二级域名网站的服务,实现对整个重点二级域名网站进行函数服务部署、函数服务调用及函数服务删除的功能。

通过图5也展示了函数调度的原理,标的910001为保障拍卖会,竞买人出价调用auctionbid-910001函数服务;标的910002为非保障的普通拍卖会,竞买人出价调用auctionbid默认函数服务。

实施例4

根据实施例3所述的一种基于faas函数服务的拍卖竞价方法,其区别在于:

函数镜像生成及部署模板流程图如图2所示。函数镜像生成,包括:基于OpenFaaS框架编写服务函数,使用faas-cli工具编译打包生成docker镜像,将docker镜像推送到docker镜像仓库中;docker镜像仓库可以使用公共镜像仓库Docker hub,也可以使用私有镜像仓库。本发明通过openfaas将函数打包为容器镜像,部署到Kubernetes,Kubernetes进行容器的启动、撤销等管理。需要重点保障的子域名平台、每场重点拍卖会由专一的容器提供服务,容器与容器间彼此隔离。容器的服务器CPU,内存等资源可单独配置,从而保证服务质量。

拍卖会创建函数auctioncreate,创建一个要拍卖的标的信息。适配基于本发明函数服务架构的拍卖会逻辑抽象、数据结构及流程如下:

在标的的业务基本信息字段的基础上,为标的信息增加字段信息如表3所示:

表3

拍卖会标的创建函数功能为创建标的,每个标的只被创建一次,不存在并发同步问题,可以多实例镜像部署,因此yaml模板中自动伸缩部分com.openfaas.scale.min设置为1,com.openfaas.scale.max设置为20,com.openfaas.scale.factor 设置为10%,即最少1个镜像,最多20个,每次扩容的时候新增实例10%,2个。

标的创建函数,将标的数据以JOSN格式存入redis。使用“标的名称-标的ID”全局唯一的json key作为标的json数据的key,以创建一个需要重点保障的车辆标的拍卖为例,存入的josn数据格式为:

{

"tagt_id": 910001,

"tagt_name": "车辆一宗",

"tagt_start_value": 200000,

"tagt_inc_value": 1000,

"tagt_keep_value": 200000,

"tagt_deal_value": 0,

"tagt_bid_secs": 3600,

"tagt_secs_delay": 60,

"tagt_start": "2021-12-25 9:00:00",

"tagt_end": "",

"tagt_class": 3,

"tagt_satus": 0,

"ct_date": "2021-12-23 9:52:05",

"support_level": 1

}

标的创建函数使用json.get /json.set target-910001 可以读写该标的在redis中的属性数据。

拍卖会标的出价函数auctionbid,对正在拍卖的标的报价,函数处理用户的报价请求,反馈结果,根据出价情况将结果存入redis内存数据库供读取,并推送给拍卖师和其他竞买人。适配基于本发明函数服务架构的拍卖会标的出价处理函数流程图如图5所示。

标的1与标的2同时进行拍卖,每个标的参拍人数不等,每个标的都由拍卖师主持拍卖。标的1与标的2用户出价,提交到消息分发模块,消息分发模块将收到的请求消息存入消息队列。标的1用户2出价1100元,消息数据结构包含标的ID、用户ID、用户报价信息示例:{"tagt_id": 910001,"user_id": id2,"price": 1100}。

消息处理模块订阅报价信息,报价信息通过消息队列由消息处理模块串行处理,消息订阅模块调用报价函数对应的URL地址http://gatewayIP:port/function/auctionbid;调用请求附带用户报价信息,{"tagt_id": 910001,"user_id": id2,"price": 1100},参考图4,openfass gateway解析请求中的标的ID tagt_id字段为910001,拼接成redis rejosn 指令 "json.get target-910001"指令,获取到该标的的“重点保障”字段值为1,即需要重点保障。gateway拼接函数名”auctionbid-标的id”,获取应该访问的函数名称为“auctionbid-910001”,完成对该函数的调用,结果返回到消息处理模块后;

步骤1:更新redis中的标的出价记录数据,使用 “tagt_bid_recs-标的id”的格式作为标的redis json数据存取的key,value部分使用[{"user_id":id2,"price":1000,"rec_date":"2021-12-24 9:15:08"}, {"user_id": id2,"price": 1100,"rec_date":"2021-12-24 9:22:18"}] json数组形式存储,供显示标的出价记录信息使用。

步骤2:调用推送模块websocket推送功能,将用户出价推送给参与标的910001拍卖的用户及拍卖师,用户2的报价信息在参拍用户及拍卖师终端显示。

拍卖师主持标的910001拍卖,修改标的加价幅度函数auctionbidstep,将加价幅度从1000调整为1500,修改标的redis中对应的"tagt_inc_value"属性为1500,调用推送模块websocket推送功能,推送给参拍用户。

标的拍卖出价信息要公开,查询标的出价记录信息函数auctionbidrecs,从reids中获取tagt_satus属性,对tagt_satus值为1,2的,正在拍卖的标的,从redis中读取key为tagt_bid_recs-910001的记录数据;对tagt_satus值为0,标的未开始拍卖,没有出价记录数据,返回值为空。对tagt_satus值为3,4,拍卖已结束的标的,从关系型数据库中读取数据。

实施例5

根据实施例3所述的一种基于faas函数服务的拍卖竞价方法,其区别在于:

函数部署模板生成,包括:由于同一函数需要在不同场景下部署,因此,将编写的服务函数部署的yaml文件提取成为yaml文件模板,将yaml文件中随场景不同的参数配置抽取出来,yaml文件模板中使用占位符形式,将yaml文件模板存入NFS服务器,按函数文件名生成文件目录,目录中存入yaml文件模板。

函数部署流程图如图3所示。函数服务部署,包括:

创建需要隔离重点拍卖会及创建需要隔离重点二级域名网站时,选择是否需要重点保障,如果选择“是”,对于对应的服务函数,从NFS服务器中读取yaml文件模板,传入参数,替换yaml文件模板中需要替代的部分,例如,新函数名称,形成部署yaml文件,一个yaml文件中能配置多个服务函数,yaml文件中的每个服务函数本质上还是一个单独的函数镜像部署运行。yaml文件保存到NFS服务器;

运行faas-cli deploy指令,根据faas-cli deploy指令中指定的yaml文件,从docker镜像仓库中下载函数镜像到kubernetes集群,生成docker容器;deploy指令启动docker容器。docker容器启动后通过OpenFaaS提供的函数服务地址进行服务调用。

函数部署完成,容器启动后,OpenFaaS为每个服务函数生成基于函数名称的唯一URL地址;对某一功能函数,由于发布了功能一致但命名不一致的函数服务,具体的函数服务调用,包括:前端应用调用统一的后台的函数服务地址,函数服务请求中写有标的ID及所在二级域名网站系统ID;由于函数服务地址有统一的/function/路径,因此,函数服务请求被到转发openfass API gateway模块,openfass API gateway模块将函数服务请求转发至faas-netes模块,faas-netes模块根据标的ID及二级域名网站系统ID,从redis内存数据库中读取出该标的,或对二级域名站点ID的请求,是否重点保障,如是,则读取出对应的函数服务名称,调用对应的函数服务。其中,拍卖系统,例如,点拍网,为不同用户建设有二级域名网站,例如,jnns.dpauc.com ,dmns.dpauc.com等,对于标的统一编号,对应标的ID,对于这些二级域名的网站,同样也需要一个编号,即二级域名ID。 准确一点说,是点拍网下属的二级域名对应的竞价系统的ID。

以竞买人出价为例,如图4所示,函数服务调度方法原理如下:

竞买人出价功能,系统统一调用http://gatewayIP:port/function/auctionbid地址,openfass API gateway模块收到请求后,从对标的或站点的URL请求中,解析出标的ID,站点ID参数;根据参数从redis内存数据库中查询是否应该是重点保障,如果是,则根据函数命名规则 函数名-标的ID,生成最终应该实际调用的函数名称,标的ID为910001的拍卖会,查询redis内存数据库应该重点保障,竞买人出价的函数默认为auctionbid,则实际调用的函数为auctionbid-910001,获得实际的函数名称后,faas-netes模块最终调用名称为auctionbid-910001对应的函数镜像服务。

本发明使用faas-netes模块作为openfaas在Kubernetes上的实现,通过faas-netes模块中的proxy根据函数名称调用具体服务的实现,实现上述函数调用逻辑,具体流程示意如图4所示。

redis内存数据库中存储是否需要隔离重点的拍卖会、需要隔离重点的二级域名网站的信息,在创建拍卖会、创建二级站点时,以json格式存入redis内存数据库中,redis内存数据库中存储的是否需要隔离重点的拍卖会、需要隔离重点的二级域名网站的信息,在拍卖会结束、二级域名网站站点撤销时清除。

为防止函数调用每次都要查询redis,在faas-netes中设置缓存,当拍卖会或二级域名网站站点第一次调用后台服务函数,读取redis内存数据库中的结果后,将结果放置到缓存中;与redis中存储的相关信息一样,faas-netes中的缓存信息,在拍卖会结束、二级域名网站站点撤销时清除。

生成处理拍卖会用户出价函数服务auctionbid的镜像及该函数部署,包括如下步骤:

步骤1:创建一个空目录,在空目录下使用 faas-cli new auctionbid --langpython命令进行初始化,初始化完成后生成auctionbid文件夹中包含一个handler.py文件,在handle函数中实现拍卖会用户报价逻辑处理功能。

步骤2:生成用户出价函数服务auctionbid的模板,步骤1生成函数服务yaml文件,

其中函数定义部分主要格式如下:

functions:

auctionbid:

lang: python

handler: ./auctionbid

image: dkkd2021/auctionbid:latest

将此文件的functions部分中的函数名称“auctionbid”,替换成“{site#siteid-}auctionbid{-#tagtid}”,其中的#siteid标识为该函数服务为重点保障的二级域名站点ID,即该站点服务会调用site{#siteid}为起始标识的相关函数;其中的#tagtid标识为该函数服务为重点保障的拍卖会标的ID。将此yaml模板存入nfs,按函数文件名生成文件目录auctionbid,存入该目录中。

步骤3:使用faas-cli工具build指令编译auctionbid函数,打包生成docker镜像,将镜像推送到docker 镜像仓库中。

步骤4:标的910001创建或修改时,选择“重点保障”,从nfs auctionbid目录获取yaml模板,替换其中的“{site#siteid-}”为空,替换{-#tagtid}其中的“tagtid”为910001,新的函数服务名称为auctionbid-910001。

步骤5:运行faas-cli deploy指令,根据指令中指定的步骤4生成的yaml文件,从docker镜像仓库中下载步骤3生成的函数镜像到kubernetes集群,生成docker容器。deploy指令会启动函数容器,启动函数服务。

实施例6

根据实施例5所述的一种基于faas函数服务的拍卖竞价方法,其区别在于:

生成重点保障的二级域名网站函数服务的镜像及该函数部署,包括如下步骤:

在实施例5中的函数编译、生成镜像镜像的基础上,标的竞价等相关函数服务镜像已在docker镜像仓库中存在。

二级域名网站,bank.dpauc.com,其站点id为1001,创建或修改时,选择“重点保障”,从nfs 获取auctionbid等函数yaml模板,替换其中的“{site#siteid-}”为1001,替换{-#tagtid}为空,竞价函数新的函数服务名称为site1001-auctionbid,生成新的yaml部署文件。运行faas-cli deploy指令,指令中指定新生成的yaml文件,完成部署。

实施例7

根据实施例3所述的一种基于faas函数服务的拍卖竞价方法,其区别在于:

函数服务删除,包括:

Kubernetes集群启动Cronjob定时任务,定时(每10分钟)运行资源释放脚本;

资源释放脚本程序扫描redis内存数据库中的拍卖会数据,如果是需要隔离重点的拍卖会,并且已结束,则调用faas-cli remove命令,删除对应的函数服务,需要隔离重点的拍卖会拍卖过程结束后,数据查询等操作会调用默认的函数服务;

资源释放脚本程序扫描redis内存数据库中的需要隔离重点的二级域名网站,如果需要隔离重点的二级域名网站站点被删除停用,则调用faas-cli remove命令,删除对应的函数服务。二级域名网站已被停用后,前端页面将无法访问,不存在调用函数服务查询数据等问题。

上述三种服务,包括没有特殊要求重点保障的服务、需要隔离重点拍卖会的服务及需要隔离重点二级域名网站的服务,通过不同的函数调用地址进行区分、调用,同一功能函数服务代码、镜像版本完全相同,仅函数命名不同;因此,在函数的openfass yaml文件设置所有函数镜像均拉取最新版本的镜像。

函数服务考虑效率,只进行高效计算服务,存取数据库、数据库同步,推送信息等耗时操作由专门的服务进行。为提高函数响应速度,函数服务的数据均从redis内存数据库进行存取,具体是指:对未开始或已结束的标的信息,从关系型数据库中查询、读取数据;对正在拍卖的标的,从redis内存中读取竞价记录列表信息,用于展示公开围观页面等场景;拍卖结束后,由数据同步服务将数据从redis内存中同步到redis内存数据库中,同步完成后该部分数据从redis内存中释放,删除函数服务容器。

其中,竞价记录列表是指拍卖会中竞买人报价成功的记录,具体信息如表4所示:

表4

由于函数本身是无状态、无序的,函数本身也无法存储、校验标的竞价信息请求的先后顺序,因此,本系统架构使用消息队列对竞价信息处理请求进行缓存,串行处理。函数无须为处理并发竞争而引入效率比较低的同步锁机制。由于拍卖会出价等信息由函数服务单独串行处理,因此,函数服务部署yaml文件中需设置com.openfaas.scale.factor为0,关闭自动伸缩,防止openfaas生成其他函数服务镜像副本,避免由此带来的竞价信息处理同步问题。

函数不存储业务的信息状态,本系统通过全局redis内存数据库存储标的竞价过程中的信息,本发明将拍卖涉及的对象信息使用JOSN存储,使用redis的rejson模块进行JOSN数据的存取。使用JSON存取拍卖数据信息方便数据库、后台、及redis间数据的存取,关系型数据库中的数据通过ORM映射为java对象,java对象可序列化\反序列化为json数据,简化了数据库、后台、及redis间数据格式转换;使用redis rejson可以直接在redis中操作json数据,简化了对存储在redis中的拍卖数据的处理,加快了系统响应。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号