CN102185900B - 一种应用服务平台***和一种开发应用服务的方法 - Google Patents
一种应用服务平台***和一种开发应用服务的方法 Download PDFInfo
- Publication number
- CN102185900B CN102185900B CN 201110097156 CN201110097156A CN102185900B CN 102185900 B CN102185900 B CN 102185900B CN 201110097156 CN201110097156 CN 201110097156 CN 201110097156 A CN201110097156 A CN 201110097156A CN 102185900 B CN102185900 B CN 102185900B
- Authority
- CN
- China
- Prior art keywords
- application service
- server
- application
- request message
- tabulation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种应用服务平台***和一种开发应用服务的方法。所述***包括:代理服务器、由多个应用服务器组成的服务器集群、中心服务器和资源服务器,其中:代理服务器,用于向各应用服务器分发客户端请求;每个应用服务器,用于负载应用服务并运行;中心服务器,用于接收外部上传的应用服务,并在对应的应用服务器上部署该应用服务;资源服务器,用于保存应用服务器上的各应用服务需要访问的数据资源。本发明的技术方案降低了应用开发的难度,提高了部署的灵活性并降低了部署的难度。
Description
技术领域
本发明涉及后台服务开发领域,特别是涉及一种应用服务平台***和一种开发应用服务的方法。
背景技术
在后台服务开发领域,大部分互联网应用和企业应用都会遇到***规模变得日益复杂,并且***规模日益增大后,开发成本和运维成本都急剧增高。
本发明致力于降低应用开发难度,提高部署的灵活性并降低部署的难度。
发明内容
本发明提供了一种应用服务平台***,该***降低了应用开的难度,提高了部署的灵活性并降低了部署的难度。
本发明还提供了一种开发应用服务平台的方法。
为达到上述目的,本发明的技术方案是这样实现的:
本发明公开了一种应用服务平台***,该***包括:代理服务器、由多个应用服务器组成的服务器集群、中心服务器和资源服务器,其中:
代理服务器,用于接收客户端请求消息,通过查询中心服务器上的应用服务配置信息列表识别该客户端请求消息所对应的应用服务,然后通过查询中心服务器上的应用服务配置信息列表和应用服务运行信息列表获得对应的应用服务的路径,根据所获得的路径将客户端请求消息分发给对应的应用服务所在的应用服务器;接收应用服务器端返回的处理结果,并返回给客户端;
其中,应用服务配置信息列表包括如下信息:应用服务ID、应用服务名称、应用服务类型、应用进程名、应用服务元数据标注;应用服务运行信息列表包括如下信息:应用进程名称、应用服务路径;
每个应用服务器,用于负载应用服务并运行,将应用服务的运行信息写入中心服务器上的应用服务运行信息列表中;用于在接收到代理服务器发送的客户端请求消息时,将该客户端请求消息交给对应的应用服务进行处理;应用服务处理该客户端请求消息所请求的任务,并将处理结果返回给代理服务器;
中心服务器,用于接收外部上传的应用服务,将外部传入的该应用服务的描述信息保存到应用服务配置信息列表中,并在对应的应用服务器上部署该应用服务;
资源服务器,用于保存应用服务器上的各应用服务需要访问的数据资源。
本发明还公开了一种运行于上述的应用服务平台***的应用服务的方法,该方法包括:
基于应用组件AppBean开发应用服务,一种AppBean处理一种类型的业务请求;
在基于一种AppBean开发一个应用服务时,需要确定的参数包括应用服务上下文。
由上述可见,本发明这种由上述代理服务器、应用服务器集群、中心服务器和资源服务器构成的应用服务平台***,将分散的服务器资源在逻辑上整合到一起,极大降低了应用的开发难度,提高了部署的灵活性并降低了部署的难度。
附图说明
图1是本发明实施例中的应用服务平台***的逻辑结构示意图;
图2是本发明实施例中的应用服务平台***的一个实际组网示意图;
图3是本发明实施例中的单个应用服务器的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
图1是本发明实施例中的应用服务平台***的逻辑结构示意图。在图1中,各逻辑部分的描述如下:
※代理(Proxy)
-用于分发客户端的消息,并维护客户端状态(如长连接);
-服务:
·SAP:维护与客户端的SIP长连接;
·HAP:负责分发Http应用;
·SMSP:负责分发短信上行应用;
※应用主机集群(AppEngine Hosts)
-负载实际的应用服务运行,可进行服务器分组;
※基础服务(Base Service)
-平台内部需求的一些核心应用或独立应用;
※资源(Resource)
-提供给平台使用的***资源,如:
·数据库(Database)
·文件(File)
·内存对象缓冲服务器(Memcache)
※中心(Center)
-整个***的管控中心,用于看管所用应用服务的部署、分发、更新等***管理操作。
图2是本发明实施例中的应用服务平台***的一个实际组网示意图。如图2所示,该应用服务平台***包括:代理服务器、由多个应用服务器组成的服务器集群、中心服务器和资源服务器,其中:
代理服务器,用于接收客户端请求消息,通过查询中心服务器上的应用服务配置信息列表识别该客户端请求消息所对应的应用服务,然后通过查询中心服务器上的应用服务配置信息列表和应用服务运行信息列表获得对应的应用服务的路径,根据所获得的路径将客户端请求消息分发给对应的应用服务所在的应用服务器;接收应用服务器端返回的处理结果,并返回给客户端;
其中,应用服务配置信息列表至少包括如下信息:应用服务ID、应用服务名称、应用服务类型、应用进程名、应用服务元数据标注;应用服务运行信息列表至少包括如下信息:应用进程名称、应用服务路径;
在本实施例中,代理服务器包括:超文本传输协议HTTP代理服务器、初始会话SIP代理服务器和短信***SMS代理服务器。其中,HTTP代理服务器负责分发HTTP应用服务,SIP代理服务器负责与客户端的SIP长连接,SMS代理服务器负责分发短信上行应用服务。
每个应用服务器,用于负载应用服务并运行,将应用服务的运行信息写入中心服务器上的应用服务运行信息列表中;用于在接收到代理服务器发送的客户端请求消息时,将该客户端请求消息交给对应的应用服务进行处理;应用服务处理该客户端请求消息所请求的任务,并将处理结果返回给代理服务器;
中心服务器,用于接收外部上传的应用服务,将外部传入的该应用服务的描述信息保存到应用服务配置信息列表中,并在对应的应用服务器上部署该应用服务;
资源服务器,用于保存应用服务器上的各应用服务需要访问的数据资源。在本实施例中,资源服务器包括:数据库服务器、文件服务器和内存对象缓冲服务器。
在图2所示的应用服务平台***中,代理服务器,进一步用于在接收到客户端请求消息时,根据客户端请求消息中的信息以及中心服务器上的应用服务配置信息列表,创建应用服务上下文,在所述客户端请求消息中添加应用服务上下文后分发给对应的应用服务器上的应用服务;
应用服务在接收到客户端请求消息后,在完成该客户端请求消息所请求的任务的过程中,根据应用服务上下文进行数据资源定位。
在图2所示的应用服务平台***中,所述代理服务器,用于在接收到客户端请求消息时,根据该请求消息中的统一资源定位符URL,查找出中心服务器上的应用服务元数据标注字段包含与所述URL一致信息的应用服务配置信息列表,根据所查找出的应用服务配置信息列表中的应用服务名称识别出该客户端请求消息所对应的应用服务;所述代理服务器,用于根据所查找出的应用服务配置信息列表中的应用进程名,查找出中心服务器上的应用进程名称字段包含与所述应用进程名一致信息的应用服务运行信息列表,从所查找出的应用服务运行信息列表中获取应用服务的路径信息。
所述代理服务器,根据所查找出的应用服务配置信息列表中的元数据标注字段中的关于加载应用服务上下文信息,创建应用服务上下文。
在图2所示的应用服务平台***中,中心服务器,进一步用于保存资源列表;资源列表包括如下信息:资源名称、资源类型、应用服务上下文类型、定位算法名称、定位算法参数;
应用服务在接收到客户端请求消息后,在完成该客户端请求消息所请求的任务的过程中根据应用服务上下文以及资源列表中的对应信息进行资源定位。
在图2所示的应用服务平台***中,服务器集群中的多个应用服务器被分为多个不同的组,每组包含一台到多台服务器;中心服务器上保存有应用服务器列表和应用服务器分组列表;应用服务器列表包括如下信息:应用服务器名称、应用服务器所属的分组名称、应用服务器地址;应用服务器分组列表包括:应用服务器分组名称、分组中的应用服务器描述信息;
中心服务器在接收到外部上传的应用服务时,根据外部指令将该应用服务部署到单个应用服务器上,或者部署到属于同一组的多个服务器上。
这样,一个应用服务可以选择性地负载在某个组当中,也就是可以将核心的应用服务单独使用一组服务器,保证核心应用的资源使用及稳定性;而对刚上线的不稳定的应用服务使用一组单独的服务器,以剥离其中的影响,降低整个***的风险。这种做法有利于进行整体资源的分配及网络策略的调整。
图3是本发明实施例中的单个应用服务器的结构示意图。如图3所示,主机进程是部署在每台应用服务器上的后台监控进程,负责进行应用服务的下载运行与部署。主机进程会与中心服务器建立一个长连接,通过这个长连接接受部署、更新、监控等***指令。在一个应用服务器中几个应用服务可以运行在一个应用进程中,该应用进程也可以称为服务外壳。一个应用服务器上可以有多个应用进程。
在本发明中,基于图1和图2所示的应用服务平台***,提供了基于应用组件(AppBean)的应用服务开发模式。在本发明中,应用服务的开发需要通过扩展定制好的几种AppBean进行,一种AppBean用于处理一种类型的业务请求,业务请求可能来自用户的客户端软件、浏览器、内部引用、或外部信令调用。
在应用服务的开发时刻,AppBean可以认为是一个抽象基类,所有的应用服务都会从AppBean这个基类派生。下面对AppBean进行介绍。
·AppBean的抽象接口
-setup() 实现自安装
-prepare() 实现资源初始化
-run() 实现运行
·AppBean的几个子类,每个子类可能会处理不同形式的信令,应用开发人员需要选择合适的子类去实现自己的应用,其中主要的子类有如下几种:
-RemoteAppBean:每个RemoteAppBean处理一条特定的Rpc请求;
-HttpAppBean:处理一条特定的Http请求;
-MessageAppBean:处理一个特定的消息事务;
下面对以上的几种AppBean进行举例说明:
RemoteAppBean
·处理一个特定的Rpc请求,可能来源于下列几个场景
-来源于其他AppBean的引用;
-来源于proxy;
-来源于其他的***外部服务;
·参数解释
-﹤A﹥请求参数,强类型定义;
-﹤R﹥应答参数,强类型定义;
-﹤C﹥特定类型的应用服务上下文AppContext;
调用一个从RemoteAppBean派生的应用服务时,必须提供这个应用服务在实现时所声明的特定类型的应用服务上下文(AppContext),例如:
一个获取用户信息的应用服务会如下声明:
1.从RemoteAppBean﹤GetOption,UserInfo,UserContext﹥中派生;
a.请求参数﹤A﹥为GetOption,为获取用户的一些选项参数
b.应答参数﹤R﹥为UserInfo,为用户信息的集合
c.应用服务上下文﹤C﹥为UserContext,为当前上下文的用户信息,UserContext用于标识用户ID
2.实现process方法处理业务逻辑
HttpAppBean
·HttpAppBea用于处理一条特定的Http请求,Http请求可能来自于:
-来自用户客户端和浏览器的直接请求,请求会通过HAP的智能7层负载进行反向代理转换
-直接来源于其他服务器的请求
·实现一个特定的基于HttpAppBean的应用服务需要定制如下参数:
-应用服务上下文﹤C﹥:特定类型的上下文;
-Context来源:从何处获取上下文﹤C﹥;
-URL前缀:此应用服务处理的URL前缀。(URL前缀通过
HttpPrefix元数据标注处理,后续会提到)
例如:开发一个用于用户统一登录认证的应用服务的流程为:
1.从HttpAppBean的基类派生;
2.指定应用服务上下文类型﹤C﹥为SessionContext;
3.指定Context来源为cookie中的ssic字段;
4.实现process方法,读取HttpRequest,处理后返回HttpResponse给客户端。
MessageAppBean
·MessageAppBean用于处理松耦合的消息事务,一个MessageAppBean处理一个特定类型的Message,MessageAppBean会监听此类型的消息队列,并在消息队列到达时开始处理;
·实现一个特定的MessageAppBean需要指定如下参数
-应用服务上下文﹤C﹥:特定类型的上下文;
-消息类型﹤A﹥:指定强类型Message;
-事件名称(Message Name):一个用于标记一类消息的全局唯一名称;
·MessageAppBean采用生产者/消费者模式
-生产者会将产生的Message压入消息队列
MessageQueueService.Enqueue(context,entity);
-作为消费者的MessageAppBean会在启动的时候回到消息队列服务中注册,并订阅特定类型的Queue,开始接受Queue中的内容;
-生产者和消费者,允许一对多,多对多的映射关系。
以上对三种AppBean进行了举例介绍。
由上述的举例说明可以看出,各AppBean的参数都不太一样,但都包括AppContext这个参数。
AppContext
在本发明的应用服务平台***中,应用服务上下文(AppContext)是应用调用及资源定位的关键。这里应用调用包括代理服务器调用应用服务,以及应用服务内调用其他的应用服务,这两种应用都需要AppContext来实现目标应用服务的定位。AppContext从数据构成上分为两部分:
·Uri:为字符串格式,包含了用户的索引信息,负责定位,例如:
-id:230302023
-session:13910000001
·Data:附加数据
-预定义好的强类型数据结构;
-在某些场合,附加数据会由Proxy提供给后面的应用服务。
在本发明的***中有一些预先定义好的上下文:
-NullContext:预定义的空上下文,用在不需要上下文的场合;
-SessionContext:预定义的只保存会话ID的上下文。
除标准AppContext,在使用本发明的应用服务***平台进行扩展开发的时候,需要先定制业务相关的一些基础,AppContext就是其中之一。下面例举一个关于AppContext的具体实施例。
例如:使用本发明的应用服务平台***开个一个即时消息(IM)***,这个IM***中的用户都采用一个整数id进行定位,那么可以根据如下方式定制这个IM***的AppContex,从AppContext派生,命名为UserContext:
·Uri部分:“id:230302023”,表示用户的id,那么通过这个用户的id,可以定位用户的应用服务位置与数据库存储位置;
·Data部分:
-用户的登录网络地址;
-客户端类型等;
当定制了用户的UserContext,所有该***内基于用户进行操作的AppBean都会用UserContext作为AppBean的﹤C﹥参数,如:
-获取用户资料;
-设置用户资料;
-获取好友列表等;
此外,在本发明的应用服务平台***中,除了提供基于单个用户的AppContext外,还提供了基于群组的业务类型,开发基于群组的应用服务,也需要定制基于群组的AppContext,IM***使用一个整数用于标识群组,从AppContext派生,命名为GroupContext,GroupContext的结构如下:
·Uri部分:“group:123123”,标识群组id,表示用户的id,那么通过这个群组的id,我们可以定位群组的应用服务位置,与数据库存储位置;
·Data部分:
-群组的会话参数;
-群组的授权等;
当定制了基于群组的GroupContext后,该***内基于群组进行操作的所有AppBean都会用GroupContext作为AppBean的﹤C﹥参数,如:
-设置群组名称;
-更新群组权限;
-获取群离线消息等。
应用元数据标注
在本发明中,一个应用服务可能会包含如下的元数据标注:
1.AppName(应用服务的名字和分类名)
·声明AppBean的名字以及分类名;
-AppName(category="Core",name="AddBuddy")
这里xxx为Java语言对程序元数据的标注。
·Category:name全局唯一;
·Category可以用于AppBean的分类;
-方便运维人员进行配置与分类;
-在一个Category中,如果允许一个AppBean能够被其他
Category中的AppBean访问,必须将这个AppBean声明
成为公开或友好;
·Public():允许所有的AppBean访问;
·Friendlly(“Core”):只允许指定Category访问;
·Friendlly(“Core:AddBuddy”):只允许指定应用访问;
2.Stateful(应用服务的状态信息)
Stateful("Presence")
·当声明一个AppBean为有状态的,则此个AppBean可以将状态保存在本机内存中;
·没有标注Stateful的应用均视为无状态应用,禁止使用本机内存进行状态的保存;
·如果一个Category中的多个AppBean声明的Stateful参数一样(“Presence”),则这个几个AppBean启动到一个进程中,并且不允许单独热更新;
·Stateful的应用在热更新的时候会丢失状态,所以尽量用memcache方式去代替,建议仅在某些性能要求很高的领域启动;
·当某个AppBean被声明为Stateful时,针对这个AppBean的访问会采用这个AppBean的AppContext绑定的一致性Hash的方式进行路由;
3.BeforeHandler(前置业务处理项)
·在某个AppBean接管控制之前优先处理前置业务,比如配额判断,日志记录,安全审核等;
·这个Handler可以中断业务的运行,修改业务的入口参数,可以异步处理;
BeforeHandler(type=SecurityQuotaHandler.class,params=("AddBuddy“));
·实现一个BeforeHandler需要实现emoteAppBeanHandler<A,R,C>接口;
–void run(RemoteAppHandlerTx<A,R,C>tx);
4.AfterHandler(后置业务处理项)
·可以指定在业务成功后进行处理,或失败后进行,或不管成功失败都进行;
AfterHandler(type=OperationLogHandler.class,result=OpResults.All,params=("AddBuddy“));
·Handler能够拿到完整的请求参数,及应用在context中添加的上下文数据;
·Handler的处理结果不会再影响到AppBean的返回结果
·实现方法与BeforeHandler相同。
5.
HttpPrefix(HTTP前缀,只针对HttpAppBean)
·用于标注一个HttpAppBean处理的Http请求范围;
·如:HttpPrefix("/login.do");
-表示该HttpAppBean处理以login.do为起始的http请求。Message Name(事件名称,只针对MessageAppBean)
·用于标注一个MessageAppBean的名称;
·如:Message Name
6.ContextLoader(加载应用服务上下文信息)
·用于标注一个AppBean如何加载AppContext
·如:ContextLoader(name="CookieParser")
-表示通过名为CookieParser的程序去处理处理Context;
-CookieParser程序内置在Proxy当中,通过处理HttpRequest中的Cookie字段去加载用户相关信息。
前面介绍了基于AppBean的应用服务开发过程。可以看出在本发明中应用服务开发的最小粒度为AppBean。接下来介绍开发完成的应用服务如何在应用服务***平台上部署以及运行的过程。
前面提到应用服务***平台中的服务器集群中的应用服务器可以分成多个组,一个应用服务可以部署在一组应用服务器上,因此首先介绍一下本发明中的应用服务器的分组配置情况。
在本发明中,能够运行应用服务的应用服务器需要在全局统一配置,具体来说在中心服务上配置全局的应用服务器列表和应用服务器分组列表。
应用服务器列表如表1所示:
字段名称 | 宇段类型 | 主键 | 描述 |
ServerName | VarChar | Y | 应用服务器名称 |
ServerGroup | VarChar | 应用服务器分组名称 | |
ServerAddress | VarChar | 应用服务器地址 |
表1
由表1可见,应用服务器列表包括如下信息:应用服务器名称、应用服务器所属的分组名称、应用服务器地址。
应用服务器分组列表如表2所示:
字段名称 | 字段类型 | 主键 | 描述 |
GroupName | VarChar | Y | 应用服务器分组名称 |
GroupDesc | VarChar | 应用服务器描述信息 |
表2
由表2可见,应用服务器分组列表包括:应用服务器分组名称、分组中的应用服务器描述信息。
中心服务器在接收到外部上传的应用服务时,根据外部指令将该应用服务部署到单个应用服务器上,或者部署到属于同一组的多个服务器上。
在实际应用中,多台应用服务器可以被分为不同的组,用于运行不同的应用服务,应用服务器分组的好处如下:1.将核心应用专门指定应用服务器组,可以保证核心应用的资源使用及稳定性;2.给一些新增的不稳定的应用指定单独的应用服务器组,可以降低整个***的风险;3.有利于进行整体资源的分配及网络策略的调整。
加载应用服务到应用服务器的过程
在本发明中,开发完成的应用服务会加载到服务器集群中的应用服务器上运行,并将代理服务器针对此应用服务的路由定制到负载该应用服务的应用服务器上。这个过程包括如下步骤:
-开发人员将开发完成的应用服务的代码进行编译,生成用于部署的部署包(jar包);
-运维人员通过加载工具(一般为AppLoader),通过元数据查找自动分析部署包中的应用类型及元数据标注,将分析出的数据写入中心服务器上的应用服务配置信息列表中,并将部署包上传到中心服务器上。
应用服务配置信息列表(以下称为Application表)如表3所示:
表3
在表3中,关于Annotations字段:AppLoader会通过分析Java应用类与应用类包含的元数据标注,并提取出每个AppBean的类型信息与元数据标注信息,并通过JSON(JavaScript Object Notation)格式的字符串保存在Application表的Annotations字段,具体格式如下:
Annotations字段包含classInfo子字段与classAnnotations子字段;
classInfo字段中包含,当前类型,基础类型,及基础类型的泛型参数;
classAnnotations字段包含该AppBean包含的每一个元数据标注,元数据标注的每个参数,通过”key”,“value”方式存储。
在表3中,除了WorkerPackage(应用服务部署包名称)、ServerGroup(应用服务器组)及Enabled(是否启用)字段,其余的字段的数据均由加载工具自动写入中心服务器中的应用服务配置信息列表中。这避免了人工写入的麻烦及错误风险。
-运维人员选择应用服务部署包名称、应用服务器组以及是否启用的选项,更新Application表表。
-中心服务器在运维人员的指令下,向Application表所示的应用服务器组中的各应用服务器发送加载Application表所指示的应用服务部署包的加载指令。
-应用服务器上主机进程接收到加载指令后,下载对应的应用服务的部署包,并启动应用进程(AppWorker),该应用进程运行该应用服务,并将该应用服务的运行状态写入中心服务器中的应用服务运行信息列表中。
应用服务运行信息列表(以下称为Running Worker表)如表4所示:
表4
每一个启动的应用进程都会与中心服务器建立连接,并在全局的应用服务运行信息列表中添加一条如表4所示的运行状态记录。
在表4中,应用服务路径个格式可以为:
rpc=tcp://192.168.1.100:8000;http=http://192.168.1.100:8080。
应用服务的路由策略
代理服务器(proxy)需要调用某个应用服务,或者一个应用服务需要调用另一个应用服务时,正是通过应用服务配置信息列表和应用服务运行信息列表进行定位的。
例如,在本发明的一个实施例中,查找一个Http应用服务的地址的流程如下:
1.代理服务器接收到客户端或浏览器发出的Http请求;
2.代理服务器访问中心服务器,从Application表的Annotations字段(应用服务元数据标注字段)中,找到HttpPrefix(一种元数据标注信息)与Http请求中请求URL相符的一条记录;
具体来说,枚举所有Application表中的记录,找到Annotations中的HttpPrefix元数据标注,并判断请求的URL是否与HttpPrefix的值为起始;
3.代理服务器根据步骤2中所确定的一条记录中的Annotations字段(应用服务元数据标注字段)的信息生成AppContext;具体来说,找到Annotations字段的ContextLoader信息,找到符合ContextLoader取值的赋值函数,从Http请求报文的Cookie字段中提取信息作为函数的输入,运行函数,得到AppContext;
4.代理服务器根据步骤2中所确定的一条记录中的WorkerName字段(应用进程名段),从Running Worker表的中找出AppWorkerName字段(运行的应用进程名称)与之相符的记录;可以有多条记录与之相符。
5.代理服务器根据步骤2中所确定的一条记录中的Annotations字段中的Stateful配置进行如下选择:
a.如果为‘true’,则使用一致性哈希的方式从多条RunningWorker中通过AppContext信息选出一条记录;这里,一致性哈希是通过AppContext的Uri字符串计算哈希值,选择哈希值所对应的一条记录;具体的哈希算法可采用KETAMA算法;
b.如果为‘false’,则随机选出一条RuningWorker记录;
6.提取所选出的RuningWorker记录中的ServiceURLs字段(应用服务路径字段)中的地址信息,根据给地址信息实现应用服务的调用。
在上面的例子中,代理服务器接收到的是针对HttpAppBean的请求,因此根据该请求中的URL找Application表中的对应的HttpPrefix,以找到对应的应用服务。如果代理服务器接收到的是与RemoteAppBean对应的Rpc请求,则直接根据该Rpc请求中的远程调用服务名称(RemoteAppName)查找应用服务名称(AppName)字段与其一致Application表,该Application表即为部署该Rpc请求对应的RemoteAppBean时所生成的表。如果代理服务器接收到的是与MessageAppBean对应的Message消息,则根据该消息中的事件名称,从Application表的Annotations字段找到MessageName与所述事件名称相符的一条记录,该条记录即为处理该消息的应用服务所应用的表格信息。
在本发明中,定义并实现一个具有某种业务功能的应用服务,这个应用服务势必要访问各种资源,如数据库、文件服务器、内存对象缓冲服务器或其他提供应用服务。在本发明的一个实施例中,这些资源都不是单点服务,也就是同一个类型的数据库可能存在多个纵向拆分的实例,在本实施例中,将一个应用服务能够访问的资源绑定在了实现时声明的AppContext上。
例如,在前面我们声明了一个获取用户信息的应用服务,名称GetUserInfoApp,在该应用服务的实现环节读取用户数据库(UserDB),并将结果返回。具体过程如下:
1.代理服务器接收来自于客户端的Http请求;
2.代理服务器通过Http请求的URL判断该请求对应的应用服务;具体为代理服务器通过方位中心服务器上的各Application表,找到Annotations字段中的HttpPrefix与Http请求的URL一致的Application表,该表对应的应用服务即为该Http请求所对应的应用服务;
3.根据第2步的判断代理服务器识别该请求对应的应用服务是GetUserInfoAPP的请求,并需要UserContext作为上下文参数;
4.代理服务器通过访问中心服务器上的对应的Application列表,根据其Annotations字段的ContextLoader信息创建UserContext;
5.代理服务器在来自客户端的Http请求中添加所创建的UserContext数据,通过查询Application列表和RunningWorker列表获得GetUserInfoAPP的路径后,将Http请求转发到GetUserInfoAPP所在的应用服务器;
6.应用服务器上的运行GetUserInfoAPP的应用进程接收到Http请求后,提取UserContext,并交给GetUserInfoAPP处理;
7.GetUserInfoAPP读取UserDB,在读取UserDB的时候,通过UserContext中的id信息进行UserDB的定位;
8.GetUserInfoAPP组织返回报文,并返回给代理服务器;
9.代理服务器将返回报文返回给客户端。
在上述过程的步骤7中,通过资源(Resource)表进行定位。在本发明的一个实施例中的资源表如表5所示:
表5
可以通过实现不同的定位函数(Locator),来实现针对不同资源的不同定位方式。例如在上例中,资源表的具体配置如表6所示:
字段名称 | 字段说明 | 示例取值 |
ResourceName | 资源名称 | UserDB |
ResourceType | 资源类型 | Database |
ContextType | 定位依赖的Context | UserContext |
LocatorName | 定位算法 | ModDatabaseLocator |
LocatorParams | 定位算法的参数 | 5 |
表6
则在步骤7中使用id:1001定位UserDB时,ModDatabaseLocator会取出1001,并将1001除5,取余数为1,返回名为UserDB.1的数据库实例。
由上述可见,本发明这种由上述代理服务器、应用服务器集群、中心服务器和资源服务器构成的应用服务平台***,将分散的服务器资源在逻辑上整合到一起,极大降低了应用的开发难度,提高了部署的灵活性并降低了部署的难度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (10)
1.一种应用服务平台***,其特征在于,该***包括:代理服务器、由多个应用服务器组成的服务器集群、中心服务器和资源服务器,其中:
代理服务器,用于接收客户端请求消息,通过查询中心服务器上的应用服务配置信息列表识别该客户端请求消息所对应的应用服务,然后通过查询中心服务器上的应用服务配置信息列表和应用服务运行信息列表获得对应的应用服务的路径,根据所获得的路径将客户端请求消息分发给对应的应用服务所在的应用服务器;接收应用服务器端返回的处理结果,并返回给客户端;
其中,应用服务配置信息列表包括如下信息:应用服务ID、应用服务名称、应用服务类型、应用进程名、应用服务元数据标注;应用服务运行信息列表包括如下信息:应用进程名称、应用服务路径;
每个应用服务器,用于负载应用服务并运行,将应用服务的运行信息写入中心服务器上的应用服务运行信息列表中;用于在接收到代理服务器发送的客户端请求消息时,将该客户端请求消息交给对应的应用服务进行处理;应用服务处理该客户端请求消息所请求的任务,并将处理结果返回给代理服务器;
中心服务器,用于接收外部上传的应用服务,将外部传入的该应用服务的描述信息保存到应用服务配置信息列表中,并在对应的应用服务器上部署该应用服务;
资源服务器,用于保存应用服务器上的各应用服务需要访问的数据资源。
2.根据权利要求1所述的***,其特征在于,
代理服务器,进一步用于在接收到客户端请求消息时,根据客户端请求消息中的信息以及中心服务器上的应用服务配置信息列表,创建应用服务上下文,在所述客户端请求消息中添加应用服务上下文后分发给对应的应用服务器上的应用服务;
应用服务在接收到客户端请求消息后,在处理该客户端请求消息所请求的任务的过程中,根据应用服务上下文进行数据资源定位。
3.根据权利要求2所述的***,其特征在于,
中心服务器,进一步用于保存资源列表;资源列表包括如下信息:资源名称、资源类型、应用服务上下文类型、定位算法名称、定位算法参数;
应用服务在接收到客户端请求消息后,在完成该客户端请求消息所请求的任务的过程中根据应用服务上下文以及资源列表中的对应信息进行资源定位。
4.根据权利要求1所述的***,其特征在于,
所述代理服务器包括:超文本传输协议HTTP代理服务器、初始会话SIP代理服务器和短信***SMS代理服务器;
所述资源服务器包括:数据库服务器、文件服务器和内存对象缓冲服务器。
5.根据权利要求1所述的***,其特征在于,
所述服务器集群中的多个应用服务器被分为多个不同组;
所述中心服务器上保存有应用服务器列表和应用服务器分组列表;
应用服务器列表包括如下信息:应用服务器名称、应用服务器所属的分组名称、应用服务器地址;
应用服务器分组列表包括:应用服务器分组名称、分组中的应用服务器描述信息;
中心服务器,用于在接收到外部上传的应用服务时,根据外部指令将该应用服务部署到单个应用服务器上,或者部署到属于同一组的多个服务器上。
6.根据权利要求1所述的***,其特征在于,
所述代理服务器,用于在接收到客户端请求消息时,根据该请求消息中的统一资源定位符URL,查找出中心服务器上的应用服务元数据标注字段包含与所述URL一致信息的应用服务配置信息列表,根据所查找出的应用服务配置信息列表中的应用服务名称识别出该客户端请求消息所对应的应用服务;或者,
用于在接收到客户端的请求消息时,根据该请求消息中的远程调用服务名称,查找出中心服务器上应用服务名称字段与所述远程调用服务名称一致的应用服务配置信息列表,根据所查找出的应用服务名称字段识别出该请求消息所对应的应用服务;或者,
用于在接收到客户端的请求消息时,根据该请求消息中的事件名称,查找出中心服务器上的应用服务元数据标注字段包含与所述事件名称一致信息的应用服务配置信息列表,根据所查找出的应用服务配置信息列表中的应用服务名称识别出该客户端请求消息所对应的应用服务;
所述代理服务器,用于根据所查找出的应用服务配置信息列表中的应用进程名,查找出中心服务器上的应用进程名称字段包含与所述应用进程名一致信息的应用服务运行信息列表,从所查找出的应用服务运行信息列表中获取应用服务的路径信息。
7.根据权利要求2所述的***,其特征在于,
所述代理服务器,用于在接收到客户端请求消息时,根据该请求消息中的统一资源定位符URL,查找出中心服务器上的应用服务元数据标注字段包含与所述URL一致信息的应用服务配置信息列表,然后根据该应用服务配置信息列表中的元数据标注字段中的关于加载应用服务上下文的信息,创建应用服务上下文。
8.一种开发运行于权利要求1至6中任一项所述的应用服务平台***的应用服务的方法,其特征在于,该方法包括:
基于应用组件AppBean开发应用服务,一种AppBean处理一种类型的业务请求;
在基于一种AppBean开发一个应用服务时,需要确定的参数包括应用服务上下文。
9.根据权利要求8所述的方法,其特征在于,该方法进一步包括:
在基于一种AppBean开发一个应用服务时,令该应用服务的元数据标注包括:应用服务的名字和分类名、应用服务的状态信息、前置业务处理项、后置业务处理项、HTTP前缀/事件名称、加载应用服务上下文信息。
10.根据权利要求8所述的方法,其特征在于,所述应用服务上下文在数据构成上包括两部分:字符串格式的通用资源标志符URI和附加数据部分。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110097156 CN102185900B (zh) | 2011-04-18 | 2011-04-18 | 一种应用服务平台***和一种开发应用服务的方法 |
CN201180062570.8A CN103283209B (zh) | 2011-04-18 | 2011-12-31 | 一种应用服务平台***及其实现方法 |
PCT/CN2011/085194 WO2012142854A1 (zh) | 2011-04-18 | 2011-12-31 | 一种应用服务平台***及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110097156 CN102185900B (zh) | 2011-04-18 | 2011-04-18 | 一种应用服务平台***和一种开发应用服务的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102185900A CN102185900A (zh) | 2011-09-14 |
CN102185900B true CN102185900B (zh) | 2013-07-17 |
Family
ID=44571970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110097156 Active CN102185900B (zh) | 2011-04-18 | 2011-04-18 | 一种应用服务平台***和一种开发应用服务的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102185900B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107341048A (zh) * | 2017-06-23 | 2017-11-10 | 郑州云海信息技术有限公司 | 一种查询占用服务器特定资源的客户端的方法和装置 |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012142854A1 (zh) * | 2011-04-18 | 2012-10-26 | 北京新媒传信科技有限公司 | 一种应用服务平台***及其实现方法 |
CN102523304B (zh) * | 2011-12-29 | 2014-10-22 | 北京新媒传信科技有限公司 | 一种应用云平台和云平台的实现方法 |
CN102413022B (zh) * | 2011-12-31 | 2014-04-16 | 北京新媒传信科技有限公司 | 一种应用调试方法和*** |
CN102523308B (zh) * | 2011-12-31 | 2015-01-14 | 北京新媒传信科技有限公司 | 一种应用开发方法和运行该方法所开发应用的平台*** |
CN102427480B (zh) * | 2011-12-31 | 2015-01-14 | 北京新媒传信科技有限公司 | 一种多应用服务平台***中的应用访问方法 |
CN102497454B (zh) * | 2011-12-31 | 2014-06-11 | 北京新媒传信科技有限公司 | 一种在应用服务平台***中对应用进行灰度发布的方法 |
CN102638567B (zh) * | 2012-03-02 | 2015-05-20 | 深圳市朗科科技股份有限公司 | 多应用云存储平台和云存储终端 |
CN102857546B (zh) * | 2012-03-20 | 2016-09-28 | 深圳市朗科科技股份有限公司 | 云存储平台和云存储终端 |
CN103379023B (zh) * | 2012-04-25 | 2016-06-01 | 腾讯科技(深圳)有限公司 | 即时通信方法和即时通信客户端 |
CN102647429A (zh) * | 2012-04-28 | 2012-08-22 | 杭州格畅科技有限公司 | 应用间通信的访问控制方法、应用进程管理器、在线应用平台 |
CN103581279B (zh) * | 2012-08-10 | 2017-05-10 | 百度在线网络技术(北京)有限公司 | 面向第三方开发者的接入***、方法及装置 |
CN103685390B (zh) * | 2012-09-13 | 2016-10-05 | 深圳市云帆世纪科技有限公司 | 基于用户标识的负载均衡方法、装置及*** |
CN103593172B (zh) * | 2012-10-29 | 2017-02-08 | 百度在线网络技术(北京)有限公司 | 面向统一结构化数据的应用程序的开发***、方法及装置 |
US9131353B2 (en) * | 2013-05-08 | 2015-09-08 | Intel Corporation | Apparatus, system and method of setting up an application service platform (ASP) peer to peer (P2P) group |
CN103297269B (zh) * | 2013-05-22 | 2016-04-27 | 中国石油大学(华东) | 一种基于服务计算平台的网络服务部署与管理方法 |
CN103366553A (zh) * | 2013-06-28 | 2013-10-23 | 银江股份有限公司 | 一种基于无线终端的实时交通服务信息获取方法及*** |
CN103618741A (zh) * | 2013-12-09 | 2014-03-05 | 惠州华阳通用电子有限公司 | 一种tcp长连接通信***及方法 |
CN103747107B (zh) * | 2014-01-27 | 2017-03-15 | 西安雷迪信息技术有限公司 | 一种兼容式云操作平台及其实现方法 |
KR102170520B1 (ko) | 2014-03-06 | 2020-10-27 | 삼성전자주식회사 | 로딩 타임을 개선하는 전자 장치 및 방법 |
CN103905551B (zh) * | 2014-04-02 | 2018-07-24 | 北京中交兴路车联网科技有限公司 | 一种服务调用方法及装置 |
CN104158851B (zh) * | 2014-07-21 | 2015-11-25 | 小米科技有限责任公司 | 一种网络业务的分发***、方法和设备 |
CN105704188B (zh) * | 2014-11-27 | 2019-04-12 | 华为软件技术有限公司 | 应用与服务的部署方法和装置 |
CN104615719B (zh) * | 2015-02-05 | 2018-04-17 | 百度在线网络技术(北京)有限公司 | 应用程序智能分发方法和装置 |
CN104780221B (zh) * | 2015-04-29 | 2018-04-06 | 温州中普科技咨询有限公司 | 中小企业知识产权综合服务平台*** |
CN106970843B (zh) * | 2016-01-14 | 2020-07-24 | 阿里巴巴集团控股有限公司 | 远程调用方法和装置 |
CN105740376A (zh) * | 2016-01-27 | 2016-07-06 | 北京铭万智达科技有限公司 | 一种微服务中api调用统计和监控的方法 |
CN106210058B (zh) * | 2016-07-13 | 2019-04-16 | 成都知道创宇信息技术有限公司 | 一种多核并行的反向代理方法 |
CN106325858A (zh) * | 2016-08-12 | 2017-01-11 | 中国南方电网有限责任公司 | 一种移动设备终端的应用构建***及方法 |
CN106301947B (zh) * | 2016-08-31 | 2023-08-25 | 广州品唯软件有限公司 | 业务信息处理***和方法 |
CN106951357B (zh) * | 2017-05-10 | 2018-06-15 | 焦点科技股份有限公司 | 一种基于守护进程的服务器端应用发布监控方法及装置 |
CN107451254B (zh) * | 2017-07-31 | 2020-08-07 | 广州市食蚁兽网络技术有限公司 | 一种生成数据库表数据唯一标识的方法 |
CN108616576B (zh) * | 2018-04-08 | 2022-05-27 | 网宿科技股份有限公司 | 一种调度应用服务器的方法和装置 |
CN108595222A (zh) * | 2018-04-26 | 2018-09-28 | 努比亚技术有限公司 | 后台服务环境搭建方法、服务器及计算机可读存储介质 |
CN108810170A (zh) * | 2018-07-19 | 2018-11-13 | 中国联合网络通信集团有限公司 | 资源配置方法及*** |
CN109857563B (zh) * | 2019-02-18 | 2021-04-27 | 重庆西部汽车试验场管理有限公司 | 任务执行方法、装置和任务执行*** |
CN110879811B (zh) * | 2019-11-18 | 2023-05-23 | 浪潮通用软件有限公司 | 一种在运行时进行数据与程序一致性自检的实现方法 |
CN111124705B (zh) * | 2019-12-04 | 2024-03-12 | 中盈优创资讯科技有限公司 | 业务请求处理方法及装置 |
CN111309796B (zh) * | 2020-02-07 | 2023-09-26 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置以及计算机可读存储介质 |
CN111569417A (zh) * | 2020-04-30 | 2020-08-25 | 北京视博云信息技术有限公司 | 一种云游戏的外设数据传输方法及*** |
CN115134408B (zh) * | 2021-03-19 | 2024-01-05 | 百果园技术(新加坡)有限公司 | 一种应用服务实现方法、装置、***、介质和设备 |
CN113220366A (zh) * | 2021-05-11 | 2021-08-06 | 北京达佳互联信息技术有限公司 | 子应用启动方法、装置、终端及服务器 |
CN113381976B (zh) * | 2021-05-11 | 2022-06-24 | 北京丁牛科技有限公司 | 一种走私攻击测试方法、装置、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110756A (zh) * | 2006-07-18 | 2008-01-23 | 华为技术有限公司 | 应用服务器分配方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002024120A (ja) * | 2000-07-11 | 2002-01-25 | Mitsubishi Electric Corp | 分散アプリケーションサーバシステム |
-
2011
- 2011-04-18 CN CN 201110097156 patent/CN102185900B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110756A (zh) * | 2006-07-18 | 2008-01-23 | 华为技术有限公司 | 应用服务器分配方法和装置 |
Non-Patent Citations (1)
Title |
---|
JP特开2002-24120A 2002.01.25 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107341048A (zh) * | 2017-06-23 | 2017-11-10 | 郑州云海信息技术有限公司 | 一种查询占用服务器特定资源的客户端的方法和装置 |
CN107341048B (zh) * | 2017-06-23 | 2021-03-23 | 苏州浪潮智能科技有限公司 | 一种查询占用服务器特定资源的客户端的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102185900A (zh) | 2011-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102185900B (zh) | 一种应用服务平台***和一种开发应用服务的方法 | |
EP3257272B1 (en) | System and method for the data management in the interaction between machines | |
CN102427480B (zh) | 一种多应用服务平台***中的应用访问方法 | |
CN102497454B (zh) | 一种在应用服务平台***中对应用进行灰度发布的方法 | |
US7853674B2 (en) | System and method for provisioning component applications | |
US8856735B2 (en) | System and method of generating REST2REST services from WADL | |
CN102413022B (zh) | 一种应用调试方法和*** | |
US7836439B2 (en) | System and method for extending a component-based application platform with custom services | |
US7729363B2 (en) | System and method for managing communication for component applications | |
KR101004576B1 (ko) | 연쇄 발견 웹 서비스 | |
US20140289366A1 (en) | Service providing method and system for instance hosting | |
CA2533608C (en) | System and method for provisioning component applications | |
US11595299B2 (en) | System and method of suppressing inbound payload to an integration flow of an orchestration based application integration | |
CN102523308B (zh) | 一种应用开发方法和运行该方法所开发应用的平台*** | |
US20130091416A1 (en) | Method for establishing a relationship between semantic data and the running of a widget | |
EP1684482B1 (en) | System and method for managing communication for component applications | |
JP5886901B2 (ja) | 装置へのコンテンツの分配を管理するシステムと方法とプログラムを提供する記憶媒体 | |
US20080216050A1 (en) | Method and System for Accessing a Resource Implemented in a Computer Network | |
CN202077062U (zh) | 一种应用服务平台*** | |
US10397342B2 (en) | Web service contract selection | |
CN116566656A (zh) | 资源访问方法、装置、设备及计算机存储介质 | |
van Gurp et al. | Service grid variability realization | |
WO2006040991A1 (ja) | 端末装置、サーバ装置、及びWebサービス提供システム | |
US8321500B2 (en) | Method and system for generating messages | |
CN117834222A (zh) | K8s***中waf规则的配置方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: Room 810, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080 Patentee after: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building A block 5 layer Patentee before: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |