一种PaaS与Erlang App应用引擎架构执行流程的制作方法
【专利摘要】本发明适用于办公软件领域,提供了一种PaaS与Erlang?App应用引擎架构执行流程,该流程包括:客户端采用Javascript中Ajax方式发起长拉请求到服务端,参数经过服务端语义解析模块连接到Erlang并发模型;Erlang并发模型引入Erlang?OTP框架,获取被分配资源ID,将获取的资源ID注册到系统公共组件模块中去;等待系统消息传递模型发送返回结果,当接收到的返回结果为正常响应消息时,会通过语义解析模块将结果返回到前端客户端。本发明具有整合HTTP与SOCKET方式的优点。
【专利说明】—种PaaS与Er Iang App应用引擎架构执行流程
【技术领域】
[0001]本发明属于办公软件领域,尤其涉及一种PaaS与Erlang App应用引擎架构执行流程。
【背景技术】
[0002]目前市场上针对PaaS下APP应用架构主要采用HTTP和Socket2种方式进行通讯,分别处理长短连接,但是没有一套方案是整合了 2者的优点并融入到APP实际应用中去,具体缺陷如下:
[0003]HTTP 方式:
[0004]( I)基于B/S开发的程序,大部分采用浏览器和服务端的结构,浏览器方面如果不采用插件方式,不能实现实时消息通讯和交互,简单来说无法实现服务器推送数据到浏览器。
[0005](2)采用HTML方式开发的程序实现消息实时通讯,只能采用Ajax轮询访问服务端的方式,这样方式在即时性上是根据请求服务器的时间粒度来保障,对服务器IO和压力造成极大负担,资源消耗严重。
[0006](3)由于应用的复杂性和现有市面上大部分浏览器的解析标准,大量短请求会造成浏览器JavaScript解析器崩溃,占用大量客户端资源。
[0007]( 4 )由于大量前端短连接导致事件处理管理困难。
[0008](5)应用服务器只能采用HTTP web服务器或者WebService,无法实现高并发IO处理,无法高效对线程进行管理,对于快速开发实现难度大。
[0009](6)技术限制导致开发应用局限度高,无法实现类似MMORPG (多人在线游戏)这样的复杂场景。
[0010]SOCKET 方式:
[0011](I)客户端必须安装插件,例如:Flash/Flex、Java Swing、Unity3D等,对于用户首次UE (用户体验)来讲体验差。
[0012](2)跨平台能力差,在一些PAD端、移动端、虚拟终端中的浏览器无法识别支持SOCKET连接的插件。
[0013](3)单台服务器负载IO压力大,例如:标准DELL R410 (双核4G内存)支持的最大连接量在4000上下幅度,其中不包括任何业务数据在里面。
[0014](4)实现复杂分布式线程管理难度高,开发周期长,人员技能专业性需求高,在整合行业内尚无较好整合APP的框架。
[0015](5)采用C++、Java开发的服务器主要面向业务,无法面向并发编程。采用Erlang、GoLang开发的服务器主要面向并发处理,支持逻辑运算能力较差,目前没有一套方案可以高效的整合2者。
[0016]在实现现有技术的技术方案中,发现现有技术存在如下技术问题:
[0017]目前行业内没有一套高效的方案来整合HTTP与SOCKET方式下APP存在的上述问题,对于行业内大部分公司实现实时交互APP而言,要不舍弃部分业务和用户体验,要不牺牲服务器、带宽等资源,除了这2种方式,目前尚无存在其他更好的架构模型。
【发明内容】
[0018]本发明实施例的目的在于提供一种PaaS与Erlang App应用引擎架构执行流程,旨在解决现有技术中无法整合HTTP与SOCKET方式下APP存在的问题。
[0019]—方面,提供一种PaaS与Erlang App应用引擎架构执行流程,所述流程包括:
[0020]客户端采用Javascript中Ajax方式发起长拉请求到服务端,参数经过服务端语义解析模块连接到Erlang并发模型;
[0021]Erlang并发模型引入Erlang OTP框架,获取被分配资源ID,将获取的资源ID注册到系统公共组件模块中去;
[0022]等待系统消息传递模型发送返回结果,当接收到的返回结果为正常响应消息时,会通过语义解析模块将结果返回到前端客户端;当接收到的返回结果为异常响应消息后,会重新引入Erlang OTP框架,获取被分配资源ID,重新将分配资源ID中注册到系统公共组件模块中去,然后重新执行返回结果操作;如果没有消息被接收,当前线程会被Erlang并发模型托管接收进入线程休眠状态,直到有消息更新。
[0023]可选的,所述流程在客户端采用Javascript中Ajax方式发起长拉请求到服务端之前还包括:
[0024]当客户端被启动时候,Javascript脚本会启动前端监控重启模块,并初始化Ajax请求器,Ajax请求器会发出客户端请求给服务端,并接收服务器返回的消息,通过前端消息字典解析消息内容,并循环执行;
[0025]所述监控重启模块,用于保证Ajax请求器有且仅有一个请求被发出。
[0026]可选的,所述Ajax请求器会发出客户端请求给服务端具体包括:
[0027]Ajax请求器发送Json格式数据给服务端语义解析模块以使语义解析模块会根据参数字典解析Json格式,并将Json数据转换成Bit宏数据。
[0028]可选的,所述Erlang OTP框架包括:压力监控引擎和调用线程复用引擎;其中,
[0029]所述压力监控引擎,用于主动触发检测;
[0030]所述线程复用引擎,用于优先根据不同服务器的空闲资源搜索线程池以定位要申请的线程资源ID,匹配到合适线程资源后,根据客户端请求类型判断是否搜索缓存服务器加载已存在的业务逻辑处理结果,如果选择不加载,会从PaaS平台提供的业务逻辑复用队列里选择要执行的逻辑程序类型。
[0031]可选的,所述PaaS与Erlang App应用引擎构架还包括:消息机制架构体系:
[0032]所述消息机制架构体系,用于将所有的消息都会汇总到线程状态模块,然后通过线程状态模块通知Long Polling控制器进行托管操作。
[0033]可选的,所述PaaS与Erlang App应用引擎构架还包括:被架设在线程池后面的缓存服务器,用于对于程序逻辑脚本结果的缓存。
[0034]可选的,Long Polling控制器,用于存储接收到Erlang并发模型通过Erlang OTP框架传回来的线程元数据和线程标识符。
[0035]在本发明实施例中,本发明提供的技术方案是专门针对PaaS下要求即时性、强交互、HTML轻量无插件化、开发难度小、周期短、低成本、高并发、系统健壮成熟的APP架构体系解决方案。整体实现了现在互联网和传统软件所不能解决的PaaS平台无插件,高即时性问题。它更适用于现代PaaS应用的需要。所以其具有整合HTTP与SOCKET方式的优点。
[0036]附图简要说明
[0037]图1是本发明提供的PaaS与Erlang App应用引擎架构执行流程图;
[0038]图2是本发明提供的客户端Long Polling发送机制逻辑交互图;
[0039]图3是本发明提供的线程控制与逻辑处理交互图;
[0040]图4是本发明提供的服务端消息机制图;
[0041]图5是本发明提供的PaaS与Erlang App应用引擎架构具体执行流程图。
[0042]实施本发明的方式
[0043]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0044]本发明【具体实施方式】提供一种PaaS与Erlang App应用引擎架构执行流程,该流程如图1所示,包括:
[0045]101、客户端采用Javascript中Ajax方式发起长拉请求到服务端,参数经过服务端语义解析模块连接到Erlang并发模型;
[0046]102、Erlang并发模型引入Erlang OTP框架,获取被分配资源ID,将获取的资源ID注册到系统公共组件模块中去;
[0047]103、等待系统消息传递模型发送返回结果,当接收到的返回结果为正常响应消息时,会通过语义解析模块将结果返回到前端客户端;当接收到的返回结果为异常响应消息后,会重新引入Erlang OTP框架,获取被分配资源ID,重新将分配资源ID中注册到系统公共组件模块中去,然后重新执行返回结果操作(即重新走一遍之前流程);如果没有消息被接收,当前线程会被Erlang并发模型托管接收进入线程休眠状态,直到有消息更新。
[0048]本发明提供的方法提供了一套对于Long Polling的高性能,低成本解决方案,采用了针对线程托管控制方式的,目前行业内没有一套方案是针对线程托管的Long Polling解决方案,它在廉价PC机的并发数量经测试已最大限度的达到了 10峰值。
[0049]可选的,上述流程在101之前还可以包括:
[0050]客户端Long Polling发送机制:
[0051]客户端Long Polling发送机制参见图(2)基于线程事件的Long Polling逻辑交互图。图5为PaaS与Erlang App应用引擎架构具体执行流程。当客户端被启动时候,Javascript脚本会启动前端监控重启模块,并初始化Ajax请求器,Ajax请求器会发出客户端请求给服务端,并接收服务器返回的消息,通过前端消息字典解析消息内容,并循环执行。监控重启模块,用于保证Ajax请求器有且仅有一个请求被发出。
[0052]可选的,上述Ajax请求器会发出客户端请求给服务端具体可以包括:
[0053]Ajax请求器发送Json格式数据给服务端语义解析模块以使语义解析模块会根据参数字典解析Json格式,并将Json数据转换成Bit宏数据。语义解析模块将Bit数据以流的方式去申请线程注册,线程注册会加载线程队列树节点获取上下文信息,判断是否创建分布式节点。如果当前线程资源充裕,申请本地线程注册。如果当前线程资源不足,创建分布式Cookie凭证,传递给PaaS服务器集群,获取新服务器资源,最后更新线程队列节树节点。无论是本地注册还是通过PaaS集群线程注册,都会通过Erlang OTP框架进行资源获取操作。
[0054]可选的,Erlang OTP框架包括:压力监控引擎和调用线程复用引擎;其中,
[0055]所述压力监控引擎,用于主动触发检测;所述线程复用引擎,用于优先根据不同服务器的空闲资源搜索线程池以定位要申请的线程资源ID,匹配到合适线程资源后,根据客户端请求类型判断是否搜索缓存服务器加载已存在的业务逻辑处理结果,如果选择不加载,会从PaaS平台提供的业务逻辑复用队列里选择要执行的逻辑程序类型。
[0056]压力监控引擎作用: [0057]压力监控引擎作用参见图(3)线程控制与逻辑处理交互图。压力监控处理引擎会根据3个维度指标进行压力监控:1、单台服务器并发量和请求数量。2、集群环境下服务器CPU和内存资源占用量。3、分布式环境下平均负载量。压力监控处理引擎还负责创建和回收线程池线程资源。存在2种情况压力监控处理引擎会被动触发创建和回收线程资源:1、线程复用引擎找不到合适的线程资源发出通知。2、异常监控节点向压力监控引擎发出通知。
[0058]可选的,上述PaaS与Erlang App应用引擎构架还包括:消息机制架构体系:
[0059]消息机制架构体系流程参见图(4)服务端消息机制图。消息机制架构体系,用于将所有的消息都会汇总到线程状态模块,然后通过线程状态模块通知Long Polling控制器进行托管操作。这里面消息的类型包括:
[0060]1、缓存服务器发出的缓存消息。
[0061]2、系统公共组件推送过来的公共消息。
[0062]3、异常监控模块发出的异常消息。
[0063]4、逻辑处理模块发出的业务逻辑消息。
[0064]5、PaaS z?平台发出的PaaS底层消息。
[0065]6、线程状态模块向线程资源池发出的资源回收消息。
[0066]可选的,上述构架还包括:缓存服务器处理机制:
[0067]缓存服务器被架设在线程池后面,用于对于程序逻辑脚本结果的缓存。缓存服务器本身是由PaaS平台提供的。他最基础缓存的数据包括3部分:
[0068]1、公共数据的缓存。
[0069]2、每次客户端请求中的重复数据缓存。
[0070]3、线程之间通讯心跳标识符的缓存。
[0071]可选的,Long Pol ling控制器,用于存储接收到Erlang并发模型通过Erlang OTP框架传回来的线程元数据和线程标识符。Long Polling控制器不负责存储任何类型的业务数据,当它获取到资源ID后会对线程进行休眠操作,同时启用消息监听。消息监听会根据系统消息机制来选择是否退出托管进行业务数据的向上传递。
[0072]本领域技术人员可以理解,本发明实施例提供的技术方案全部或部分步骤是可以通过程序指令相关的硬件来完成。比如可以通过计算机运行程来完成。该程序可以存储在可读取存储介质,例如,随机存储器、磁盘、光盘等。
[0073]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的【具体实施方式】之内所作的等同替换或改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种PaaS与Erlang App应用引擎架构执行流程,其特征在于,所述流程包括: 客户端采用Javascript中Ajax方式发起长拉请求到服务端,参数经过服务端语义解析模块连接到Erlang并发模型; Erlang并发模型引入Erlang OTP框架,获取被分配资源ID,将获取的资源ID注册到系统公共组件模块中去; 等待系统消息传递模型发送返回结果,当接收到的返回结果为正常响应消息时,会通过语义解析模块将结果返回到前端客户端;当接收到的返回结果为异常响应消息后,会重新引入Erlang OTP框架,获取被分配资源ID,重新将分配资源ID中注册到系统公共组件模块中去,然后重新执行返回结果操作;如果没有消息被接收,当前线程会被Erlang并发模型托管接收进入线程休眠状态,直到有消息更新。
2.根据权利要求1所述的流程,其特征在于,所述流程在客户端采用Javascript中Ajax方式发起长拉请求到服务端之前还包括: 当客户端被启动时候,Javascript脚本会启动前端监控重启模块,并初始化Ajax请求器,Ajax请求器会发出客户端请求给服务端,并接收服务器返回的消息,通过前端消息字典解析消息内容,并循环执行; 所述监控重启模块,用于保证Ajax请求器有且仅有一个请求被发出。
3.根据权利要求2所述的流程,其特征在于,所述Ajax请求器会发出客户端请求给服务端具体包括: Ajax请求器发送Json格式数据给服务端语义解析模块以使语义解析模块会根据参数字典解析Json格式,并将Json数据转换成Bit宏数据。
4.根据权利要求1所述的流程,其特征在于,所述ErlangOTP框架包括:压力监控引擎和调用线程复用引擎;其中, 所述压力监控引擎,用于主动触发检测; 所述线程复用引擎,用于优先根据不同服务器的空闲资源搜索线程池以定位要申请的线程资源ID,匹配到合适线程资源后,根据客户端请求类型判断是否搜索缓存服务器加载已存在的业务逻辑处理结果,如果选择不加载,会从PaaS平台提供的业务逻辑复用队列里选择要执行的逻辑程序类型。
5.根据权利要求1所述的流程,其特征在于,所述PaaS与ErlangApp应用引擎构架还包括:消息机制架构体系: 所述消息机制架构体系,用于将所有的消息都会汇总到线程状态模块,然后通过线程状态模块通知Long Polling控制器进行托管操作。
6.根据权利要求1所述的流程,其特征在于,所述PaaS与ErlangApp应用引擎构架还包括:被架设在线程池后面的缓存服务器,用于对于程序逻辑脚本结果的缓存。
7.根据权利要求2所述的流程,其特征在于, Long Polling控制器,用于存储接收到Erlang并发模型通过Erlang OTP框架传回来的线程元数据和线程标识符。
【文档编号】H04L29/06GK103618732SQ201310655663
【公开日】2014年3月5日 申请日期:2013年12月5日 优先权日:2013年12月5日
【发明者】马太航 申请人:用友软件股份有限公司