一种数据分层处理方法及装置
技术领域
本发明涉及互联网数据处理技术领域,尤其涉及一种数据分层处理方法及装置。
背景技术
图1是现有技术中数据分层方式及数据处理流程的示意图,模型视图控制器(Model View Controller,简称MVC)的软件设计模型包括控制层,模型层和表现层。此模型只将前后端页面分离却并没有明确后端交互业务逻辑层面的划分,导致后端业务层混乱不清、聚合度低、视图对后端数据低效率访问等。
现有技术中的分层方式均是模块化完成对应部分,并没有有效结合在一起。针对后端数据分层技术目前并没有比较典型或突出的设计方案和实现技术,多数均是有开发人员根据个人习惯或者业务范畴进行的范分类,这种分类方式下一旦主导人员变更或者业务方向有较大的改变时,数据的分层会出现多岔路分道,为后续业务的展开、软件的设计以及访问性能造成很大的困扰。同时由于多维性上下层数据交互,导致数据在高并发和大流量的时候,重复访问底层低速设备或服务以及重复进行大量无用的计算,进而大量消耗硬件的中央处理、内存存储以及输入输出接口等资源。
发明内容
为了解决上述技术问题,本发明提供了一种数据分层处理方法及装置。
本发明提供了一种数据分层处理方法包括:
路由控制层接收到请求消息后,确定所述请求消息中的各资源实体,判定各资源实体符合权限时,将所述请求消息路由到资源实体对应的方法控制层;
所述方法控制层确定所述请求消息中针对所述资源实体的操作实体,判定此操作实体符合权限时,将所述请求消息发送至过滤控制层;
所述过滤控制层对所述请求消息的操作请求参数进行校验,校验操作请求参数合法时,将所述请求消息发送至数据交互控制层;
所述数据交互控制层调用所述资源实体的数据交互控制层和/或所述资源实体的附属实体的数据交互控制层获取数据,执行所述操作实体所对应的操作,并将处理响应数据依次通过所述过滤控制层、所述方法控制层、所述路由控制层返回至所述请求消息的发送方。
上述数据分层处理方法还具有以下特点:
所述方法还包括:所述数据交互控制层判断执行所述请求消息需要提取磁盘存储数据或数据库数据时,调用所述原始数据控制层提取磁盘存储数据或数据库数据,所述原始数据控制层将提取的数据返回至所述数据交互控制层。
上述数据分层处理方法还具有以下特点:
所述数据交互控制层调用所述资源实体的数据交互控制层和/或所述资源实体的附属实体的数据交互控制层获取数据时,通过第三方接口或者内存级存储设备获取数据。
上述数据分层处理方法还具有以下特点:
所述将所述请求消息路由到方法控制层包括:采用YAF框架,根据引导路由规则为所述请求消息中资源实体分配路由控制器,通过分配的路由控制器的分发路将所述请求消息发送至所述请求消息。
上述数据分层处理方法还具有以下特点:
所述过滤控制层对所述请求消息的操作请求参数进行校验,校验操作请求参数非法时,向所述方法控制层返回拒绝消息;所述过滤控制层还对所述过滤控制层返回的数据进行脱敏处理。
上述数据分层处理方法还具有以下特点:
所述资源实体的操作实体包括获取、新建、更新和删除。
本发明还提供了一种数据分层处理装置,包括:
路由控制层模块,用于接收到请求消息后,确定所述请求消息中的各资源实体,判定各资源实体符合权限时,将所述请求消息路由到资源实体对应的方法控制层;还用于将从路由控制层模块收到的响应数据发送至所述请求消息的发送方;
所述方法控制层模块,用于确定所述请求消息中针对所述资源实体的操作实体,判定此操作实体符合权限时,将所述请求消息发送至过滤控制层;还用于将从所述方法控制层模块接收到的响应数据发送至所述路由控制层模块;
所述过滤控制层模块,用于对所述请求消息的操作请求参数进行校验,校验操作请求参数合法时,将所述请求消息发送至数据交互控制层;还用于将从所述数据交互控制层模块接收到的响应数据发送至所述方法控制层模块;
所述数据交互控制层模块,用于调用所述资源实体的数据交互控制层和/或所述资源实体的附属实体的数据交互控制层获取数据,执行所述操作实体所对应的操作,并将处理响应数据返回至所述过滤控制层。
上述数据分层处理装置还具有以下特点:
所述装置还包括:原始数据控制层模块;
所述数据交互控制层模块,用于判断执行所述请求消息需要提取磁盘存储数据或数据库数据时,调用所述原始数据控制层提取磁盘存储数据或数据库数据;
所述原始数据控制层模块,用于接收调用指令后,提取磁盘存储数据或数据库数据,并将数据返回至所述数据交互控制层模块。
上述数据分层处理装置还具有以下特点:
所述数据交互控制层模块,还用于在调用所述资源实体的数据交互控制层和/或所述资源实体的附属实体的数据交互控制层获取数据时,通过第三方接口或者内存级存储设备获取数据。
上述数据分层处理装置还具有以下特点:
路由控制层模块,用于使用以下方法将所述请求消息路由到方法控制层包括:采用YAF框架,根据引导路由规则为所述请求消息中资源实体分配路由控制器,通过分配的路由控制器的分发路将所述请求消息发送至所述请求消息。
上述数据分层处理装置还具有以下特点:
所述过滤控制层模块,还用于对所述请求消息的操作请求参数进行校验,校验操作请求参数非法时,向所述方法控制层返回拒绝消息;所述过滤控制层还对所述过滤控制层返回的数据进行脱敏处理。
本发明对后端业务进行分层,可以实现资源的中央处理、输入输出及内存存储的充分利用,提高数据处理效率和资源利用率。具体包括以下优点:
1、本发明是通过RESTful的风格,定义了请求的资源实体的类别、操作实体的类别,以及请求增删改查的具体动作方法。
2、本发明中的数据分层方法中根据业务将请求依次经过每一层,每层相互独立的处理本层数据,下一层数据信任上一层数据的输出结果,下一层仅能接受上一层输入数据,其核心作用实现了整体软件的高聚合低耦合的架构。
3、水平层之间依次交互通信,垂直层间仅有Data层可以相互调用通信,其它层均需要通过Data层进行通信或交互,这样就实现了数据多次有效利用降低资源请求IO、统一数据交互和通信出入口等优点。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是现有技术中数据分层方式及数据处理流程的示意图;
图2是本发明中数据分层方式及数据处理流程的示意图;
图3是本发明中数据分层处理方法的流程图;
图4是本发明中数据分层处理装置的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本发明中具体将后端业务固定划分为多层,最基本的五层包括:路由控制层或称为Controller层,方法控制层或称为Action层,过滤控制层模块或称为Page层,数据交互控制层或称为Data层,原始数据控制层或称为Dao层。其中具体层级可以根据需要设定,例如可以将Page层和Data层合并为一层。
数据分层技术主要原理是使数据不依赖具体业务而均衡的分配到事先约定的数个自定义的层次大类中,相同大类间的通信也仅限与上层和下层之间,每层中每个资源的具体方法操作相互独立,与具体业务无关,因此去除了工程中耦合性。
图2是本发明中数据分层方式及数据处理流程的示意图。各层之间只能被上层调用,并且只能调用对应的下层。从而数据流均是单向由上向下流动,一直到最底层获取到原始数据后反向流动到顶层输出。用户或客户端发起请求,数据流依次经历Controller层、Action层、Page层到Data层和Dao层,根据用户或客户端请求的具体类型,数据流最终可以终止到Page层、Data层或Dao层,多数正常请求均会从Dao层获取数据后,依次反向返回到上层。而我们通常Dao层获取原始数据是从我们存储服务上获取,目前比较流行的有MySQL、MongoDB、文件等。此种限定可以有效防止现有技术中调用方式导致的冗余调用和无效调用。
Data层和Dao层完全封在底层便于不使原始数据暴露到上层,保护原始数据的安全性。
图3是数据分层处理方法的流程图。此方法包括:
步骤301,Controller层接收到请求消息后,确定请求消息中的各资源实体,判定各资源实体符合权限时,将请求消息路由到Action层;
步骤302,Action层确定请求消息中针对上述资源实体的操作实体,判定此操作实体符合权限时,将请求消息发送至Page层;
步骤303,Page层对请求消息的操作请求参数进行校验,校验操作请求参数合法时,将请求消息发送至Data层;
步骤304,Data层调用上述资源实体的数据交互控制层和/或上述资源实体的附属实体的数据交互控制层获取数据,执行所述操作实体所对应的操作,并将响应数据依次通过Page层、Action层、Controller层返回至请求消息的发送方。
其中,
本方法中Controller层代表资源的入口,例如用户类在控制层具有控制类,Controller层还包括路由功能,包括从Controller层路由到Action层的对应用户的具体方法的集合体。Controller层中通过服务端的rewrite设置统一的入口,这样具有相同特性的一个实体就可以定义到Controller层中的一个分类。实体可以是文本、图片、服务等。在Controller层中对这个分类可以进行路由、判断实体类的权限、对附加信息进行初步校验、格式化或其它处理。
步骤301中,将请求消息路由到Action层包括:采用YAF框架,根据引导路由规则为请求消息中资源实体分配路由控制器,通过分配的路由控制器的分发路将请求消息发送至请求消息。分配时根据Bootstrap引导程序的路由协议如正则式、静态路由式(具体可参考文献YAF)和Controller层、Action层设置正则或静态映射进行匹配分发。Action层会根据配置的方法获取下层数据,如果成功则返回响应数据,如果Action层发现尚未有对应方法配置则直接终止请求。
步骤302中资源实体的操作实体包括获取、新建、更新和删除。例如,Controller层收到的请求消息为创建一篇文章,请求格式为POST/v1/article。其中,POST是此请求的请求操作实体,代表这是一个添加或创建操作。“v1”代表是此接口的v1版本,article是Controller层实体也就是资源实体。
在Action层,根据这个请求的POST请求操作实体、uri中path(这里的/v1/article)的内容、header(这里的header会根据数据根式添加入“content-type:application/json”以及对应身份验证)中的设置、query(一般POST请求时具体数据放到body中,GET请求时具体数据放到query中,也就是创建文章这个请求query部分为空)中的参数或者body体(body中包括创建文章具体的内容,文章分类以及文章标签等)中有关内容进行具体方法实体的分类路由。由Action层分类就可以确定具体是什么资源的什么类型操作。其中,如添加或修改的操作比较简单明确,而获取(GET)方法有可能存在获取多个、全部、或单个等情况,需要结合path或query信息具体分配方法。
步骤303中,Page层对所述请求消息的操作请求参数进行校验,校验操作请求参数非法时,向Action层返回拒绝消息。校验的内容包括操作请求参数是否超范围等,例如年龄范围、性别,最大最小值等。此方法可以使Page层过滤大部分来自上层的无效或非法数据,这样就避免了后端大量计算和IO请求,有效保护后端。经过Page层的处理数据请求流向下一层的Data层,可以认为数据是可信任的。
步骤304中Page层还对Data层返回的数据进行脱敏,具体是指根据业务类型移除数据包中的敏感信息,如加密用户的id、删除用户的密码。Page层还对Data层返回的数据进行数据最终结果格式或样式的调整。
Data层主要职责是针对资源实体进行不分具体业务的拆分。这一层需要大量的数据计算,整个数据流中此层是高CPU使用的一层,此层计算并格式化为最为常用的一种数据结构后,可以直接保存到内存级存储设备中,以便下次直接提取使用,降低CPU的使用率。由于本层业务相对独立,因此它是实体的抽象,具有高度的整合化,这也就为数据流分层中的重用奠定基础,并且避免了代码的大量重复,占用无用的内存和消耗大量不必要的CPU等优点。
步骤304中还包括:Data层判断执行请求消息需要提取磁盘存储数据或数据库数据时,调用Dao层提取磁盘存储数据或数据库数据,Dao层将提取的数据返回至Dao层。
步骤304中Data层调用上述资源实体的Data层和/或上述资源实体的附属实体的Data层获取数据时,通过第三方接口或者内存级存储设备获取数据。经过Data层的数据有可能直接走第三方接口、也可能直接走内存级存储设备获取到上层所需要的数据,因此大多数请求是不会进入到最底层的Dao层。
Dao层主要是从慢速设备如MySQL中提取原始数据,并直接返回原始数据的内容到Data层,因此Dao层主要消耗是IO方面。Dao层和Data层同样是实体的分支模块,也就是说Dao层每个分类都是一个实体,每个实体中的方法都是针对这个实体而和具体业务无关的方法体。这样就避免了重复请求慢速设备造成大量的IO浪费,影响请求质量,也减轻了如MySQL等慢速设备服务的压力。
图4是本发明中数据分层处理装置的结构图。此数据分层处理装置包括:路由控制层模块即Controller层模块、方法控制层模块即Action层模块、过滤控制层模块即Page层模块、数据交互控制层模块即Data层模块。
Controller层模块用于接收到请求消息后,确定请求消息中的各资源实体,判定各资源实体符合权限时,将请求消息路由到资源实体对应的方法控制层;还用于将从Controller层模块收到的响应数据发送至请求消息的发送方;
Action层模块用于确定请求消息中针对资源实体的操作实体,判定此操作实体符合权限时,将请求消息发送至过滤控制层;还用于将从Action层模块接收到的响应数据发送至Controller层模块;
Page层模块用于对请求消息的操作请求参数进行校验,校验操作请求参数合法时,将请求消息发送至数据交互控制层;还用于将从Data层模块接收到的响应数据发送至Action层模块;
Data层模块用于调用资源实体的数据交互控制层和/或资源实体的附属实体的数据交互控制层获取数据,执行操作实体所对应的操作,并将处理响应数据返回至过滤控制层。
本装置中还包括原始数据控制层模块即Dao层模块。
Data层模块用于判断执行请求消息需要提取磁盘存储数据或数据库数据时,调用原始数据控制层提取磁盘存储数据或数据库数据;
Dao层模块用于接收调用指令后,提取磁盘存储数据或数据库数据,并将数据返回至Data层模块。
其中,
Data层模块还用于在调用资源实体的数据交互控制层和/或资源实体的附属实体的数据交互控制层获取数据时,通过第三方接口或者内存级存储设备获取数据。
Controller层模块还用于使用以下方法将请求消息路由到方法控制层包括:采用YAF框架,根据引导路由规则为请求消息中资源实体分配路由控制器,通过分配的路由控制器的分发路将请求消息发送至请求消息。
Page层模块还用于对请求消息的操作请求参数进行校验,校验操作请求参数非法时,向方法控制层返回拒绝消息;过滤控制层还对过滤控制层返回的数据进行脱敏处理。
具体实施例
客户端要创建一个网关告警系统,在创建此系统中过程中需要发送各种请求,请求包括:增加、删除或修改以下列表中的至少一种:网关列表、网关调用者列表、告警信息列表等。客户端又需要显示告警统计趋势图等汇总信息。Controller层根据上述需求定义了以下实体:网关(getaway)、告警(alert)。Action层中定义了每个实体都有对应的动作分类操作实体获取(get)、添加(post)、删除(delete)、修改(put)。
客户端发送请求消息,此请求消息为请求获取网关A的告警信息列表。
Controller层确定此请求消息中的资源实体为网关A和告警,确定此实体符合权限即Controller层中存在此实体时,将此请求消息发送至Action层。
Action层确定此请求消息中针对网关的操作类型为获取,确定此操作类型符合权限时即Action层存在此操作类型时,将此请求消息发送至Page层。
Page层对请求消息中的操作请求参数进行校验,例如校验请求消息中email参数合法性、参数是否越界超过限制等。Page层校验操作请求参数非法时,直接向Action层返回拒绝消息。这样可以减轻下层IO和CPU的浪费。Page层校验操作请求参数合法时,到Data层进行具体需求的组装。
在Data层,针对网关实体,调用网关A的Data层获取网关A的详细信息称为第一信息;针对告警实体,调用告警实体的Data层获取告警详情称为第二信息;将上述第一信息、第二信息组合后进行格式化后输出至Page层。
此Data层的操作中,由于每次均为根据自己所在Data层进行内存级存储缓存,这样避免多次向Dao层请求慢速IO设备,效率和资源使用率大幅度提升,同时实现了低耦合。
Dao层主要是与底层持久保存的原始数据进行交互通信(持久层一般考虑成本和数据量等原因均是如DB、File等低速服务或设备),Data层和Dao层的交互主要在首次请求或Data层高速缓存失效后进行一次,同时由于Data层和Dao层只能是一对一单向调用,更加减少了Dao层的交互,降低CPU和IO的使用,提高了底层数据交互效率。整个系统层级分配更加明确,代码利用率更高,系统之外的服务(如上述DB等)压力减小,提高了整个系统的效率。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的物品或者设备中还存在另外的相同要素。
以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。