基于多租户技术的web服务的部署、调用方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于多租户技术的web服务的部署、调用方法和装置。
背景技术
多租户技术(multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它探讨与实现如何于多用户的环境下共用相同的业务***或程序组件,并且仍可确保各用户间数据的隔离性。
现有的多租户技术,简单来说是指一个单独的业务实例可以为多个组织或***服务,该业务实例即为可支持多租户技术的***,这多个组织或***即构成了这个业务实例的多个租户,它们共用该业务实例的数据中心。为了保障多个租户之间的数据隔离,该支持多租户技术的业务实例需要在设计上对它的数据和配置进行虚拟分区,从而使该业务实例的每个租户都能够使用一个单独的***实例,并且每个租户都可以根据自己的需求对租用的***实例进行个性化配置。
现有的多租户技术的核心在于对支持多租户技术的业务实例的数据和配置进行虚拟分区。以Java作为编程语言为例,现有的多租户技术的实现方案多是基于Hibernate来实现业务实例的数据和配置的虚拟分区,然后将业务实例部署于JVM(Java VirtualMachine,Java虚拟机)上从而实现多租户***。由于在Java语言中线程是JVM工作的主要方式,故而部署于JVM上的多租户***一般基于线程来进行业务处理,通过为每个租户分配守护线程,使多租户可以访问同一个对象,从而使程序具备并发处理的能力,最大限度的发挥目前多核处理器的运算能力。其中,Hibernate是对象关系映射框架,主要用来将用户业务***中的数据层实体对象与数据库表进行映射。基于Hibernate的多租户技术的实现可以为每个租户建立一个独立的数据源,相当于在数据库中隔离出了若干个子库。
现有的基于Hibernate实现的部署于JVM上的多租户***的调用过程如下:
1、为多租户***配置公共/私有架构schema(架构的作用是定义一份文档的合法组件群,或者是***执行的约束规则),分别对应共享区和私有区,并将配置的架构schema保存到不同数据源中;
2、通过请求***拦截web(World Wide Web,即全球广域网,也称为万维网)请求,并转发给租户解析器;
3、租户解析器从web请求中解析出对应的租户标识ID(identification),并将租户标识ID发送给多租户链接管理器;
4、多租户链接管理器获取该租户对应的schema,绑定该租户的数据源到数据源管理者;
5、web控制器从数据源管理者处拿到对应的数据源处理业务请求并返回对应结果;
6、重复步骤2-5。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
1、当出现跨域请求(例如:远程过程调用RPC请求)时,现有的多租户***在进行跨域访问时会存在网络开销问题;
2、随着私有类型租户的增加,为私有类型租户建立的数据源也会增加,导致数据库资源开销会迅速增大;
3、现有技术是基于线程进行业务处理,故会存在以下问题:限制请求类型,若租户发起的业务请求不是原子请求,需要多个子线程协作处理时,现有的多租户***无法高效处理;即便是在无任何业务请求的情况下,现有的多租户***仍需要维护一定量的线程(每个租户的守护线程);阻塞中的线程无法处理新的请求,线程的回调开销很大,在回调前线程无法接收新的任务;线程的创建、维护成本太高,需要考虑阻塞、同步、死锁等问题。
发明内容
有鉴于此,本发明实施例提供一种基于多租户技术的web服务的部署、调用方法和装置,能够将多个业务***以租户的形式部署于同一个web服务平台上以实现业务服务隔离,如此,即可将跨域的远程过程调用转化为本地调用,从而节省网络通信、交互等的开销,提高响应效率。
为实现上述目的,根据本发明实施例的一个方面,提供了一种基于多租户技术的web服务的部署方法。
一种基于多租户技术的web服务的部署方法,将不少于一个业务***以租户的形式部署到web服务平台,所述方法包括:获取业务***的租户注册请求,所述租户注册请求包括所述业务***的配置文件和可执行的类文件;解析所述配置文件,并为其中的私有方法生成权限校验规则,以及加载所述可执行的类文件;为所述业务***分配端口并将其发布为web服务。
可选地,若所述私有方法具有依赖方法,则将所述权限校验规则添加到所述依赖方法的注解中。
可选地,获取业务***的租户注册请求之后,还包括:将所述业务***的可执行的类文件中声明的需要使用协程处理的方法进行标记,并将所述业务***的可执行的类文件更新为标记后的类文件。
可选地,加载所述可执行的类文件包括:对所述可执行的类文件进行解析,将已进行标记的方法中织入干预代码以实现通用线程的暂停和唤醒。
可选地,获取业务***的租户注册请求之后,还包括:将所述可执行的类文件经过序列化及压缩处理后保存到数据库或磁盘中。
可选地,若保存到数据库中,则所述压缩处理包括:将序列化后的可执行的类文件进行字节化处理以转换为字节码;基于Base64编码方式对所述字节码进行编码;将每个字节码对应的8位二进制码的前两位切割掉之后,将所有字节码的二进制码拼接;对拼接后得到的二进制码按照每8位为一段进行分割,并将分割后得到的每段二进制码十进制化后转换为字节以进行压缩处理。
可选地,若保存到磁盘中,则所述压缩处理包括:建立一个纵轴为54横轴为20的坐标轴,并以每一个单元横、纵坐标轴的相交点表示一个汉字符号;将序列化后的可执行的类文件进行字节化处理以转换为字节码,并对所述字节码基于Base64编码方式进行编码;根据预设的编码与坐标轴上的坐标值的对应关系,获取所述编码对应的横、纵坐标值,并将对应的纵轴和横轴的相交点的汉字符号作为压缩文件。
根据本发明实施例的另一方面,提供了一种基于多租户技术的web服务的部署装置。
一种基于多租户技术的web服务的部署装置,将不少于一个业务***以租户的形式部署到web服务平台,所述装置包括:请求获取模块,用于获取业务***的租户注册请求,所述租户注册请求包括所述业务***的配置文件和可执行的类文件;解析加载模块,用于解析所述配置文件,并为其中的私有方法生成权限校验规则,以及加载所述可执行的类文件;服务发布模块,用于为所述业务***分配端口并将其发布为web服务。
可选地,若所述私有方法具有依赖方法,则将所述权限校验规则添加到所述依赖方法的注解中。
可选地,还包括标记模块,用于:在获取业务***的租户注册请求之后,将所述业务***的可执行的类文件中声明的需要使用协程处理的方法进行标记,并将所述业务***的可执行的类文件更新为标记后的类文件。
可选地,所述解析加载模块还用于:对所述可执行的类文件进行解析,将已进行标记的方法中织入干预代码以实现通用线程的暂停和唤醒。
可选地,还包括文件保存模块,用于:在获取业务***的租户注册请求之后,将所述可执行的类文件经过序列化及压缩处理后保存到数据库或磁盘中。
可选地,若保存到数据库中,则所述压缩处理包括:将序列化后的可执行的类文件进行字节化处理以转换为字节码;基于Base64编码方式对所述字节码进行编码;将每个字节码对应的8位二进制码的前两位切割掉之后,将所有字节码的二进制码拼接;对拼接后得到的二进制码按照每8位为一段进行分割,并将分割后得到的每段二进制码十进制化后转换为字节以进行压缩处理。
可选地,若保存到磁盘中,则所述压缩处理包括:建立一个纵轴为54横轴为20的坐标轴,并以每一个单元横、纵坐标轴的相交点表示一个汉字符号;将序列化后的可执行的类文件进行字节化处理以转换为字节码,并对所述字节码基于Base64编码方式进行编码;根据预设的编码与坐标轴上的坐标值的对应关系,获取所述编码对应的横、纵坐标值,并将对应的纵轴和横轴的相交点的汉字符号作为压缩文件。
根据本发明实施例的又一方面,提供了一种基于多租户技术的web服务的调用方法。
一种基于多租户技术的web服务的调用方法,所述web服务按照如本发明实施例所提供的基于多租户技术的web服务的部署方法进行部署,所述调用方法包括:获取用户发起的web服务调用请求的请求类型;当所述请求类型为私有请求时,对所述用户进行权限校验;当权限校验通过时,响应所述web服务调用请求。
可选地,对所述用户进行权限校验包括:获取所述私有请求对应的私有方法;根据所述私有方法的权限校验规则对所述用户进行权限校验。
可选地,对所述用户进行权限校验包括:获取所述私有请求对应的私有方法;若所述私有方法具有依赖方法,则从所述依赖方法的注解中获取所述权限校验规则;根据所述权限校验规则对所述用户进行权限校验。
根据本发明实施例的又一方面,提供了一种基于多租户技术的web服务的调用装置。
一种基于多租户技术的web服务的调用装置,所述web服务按照如本发明实施例所提供的基于多租户技术的web服务的部署方法进行部署,所述调用装置包括:类型获取模块,用于获取用户发起的web服务调用请求的请求类型;权限校验模块,用于当所述请求类型为私有请求时,对所述用户进行权限校验;请求响应模块,用于当权限校验通过时,响应所述web服务调用请求。
可选地,所述权限校验模块还用于:获取所述私有请求对应的私有方法;根据所述私有方法的权限校验规则对所述用户进行权限校验。
可选地,所述权限校验模块还用于:获取所述私有请求对应的私有方法;若所述私有方法具有依赖方法,则从所述依赖方法的注解中获取所述权限校验规则;根据所述权限校验规则对所述用户进行权限校验。
根据本发明实施例的又一方面,提供了一种电子设备。
一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例所提供的基于多租户技术的web服务的部署、调用方法。
根据本发明实施例的再一方面,提供了一种计算机可读介质。
一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例所提供的基于多租户技术的web服务的部署、调用方法。
上述发明中的一个实施例具有如下优点或有益效果:通过获取业务***的租户注册请求,并对业务***的配置文件进行解析以为私有方法生成权限校验规则,以及加载业务***的可执行的类文件之后,为业务***分配端口并发布为web服务,实现了基于多租户技术的web服务的部署方法,基于多租户的技术理论,将多个业务***以租户的形式部署于同一个web服务平台上以实现业务服务隔离,如此,即可将跨域的远程过程调用转化为本地调用,从而节省网络通信、交互等的开销,提高响应效率。另外,本发明还可以使用协程的方式进行业务处理,协程相对线程来说,其切换方式更为灵活,并且可节省线程的创建、维护开销,提高分布式高并发下的吞吐量;同时,还可以将业务***的可执行的类文件保存到web服务平台的工作空间对应的数据库或磁盘中,而并不是直接加载到JVM中,只有当该业务***被调用时,才会进行类文件的动态加载和执行,并且在业务处理完成后即释放资源,实现了类的动态加载和卸载,从而提高了JVM的有效利用率。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的基于多租户技术的web服务的部署方法的主要步骤示意图;
图2是本发明实施例的***架构图;
图3是本发明实施例的web服务的部署流程示意图;
图4是根据本发明实施例的基于多租户技术的web服务的部署装置的主要模块示意图;
图5是本发明实施例的web服务的调用流程示意图;
图6是本发明实施例可以应用于其中的示例性***架构图;
图7是适于用来实现本发明实施例的终端设备或服务器的计算机***的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
现有的多租户***多是通过对支持多租户技术的业务实例的数据和配置进行虚拟分区以实现数据和配置隔离,但是无法做到服务隔离,故而当出现跨域访问时会存在网络开销的问题。为了解决这个技术问题,本发明提供了一种web服务的部署方法,基于多租户技术理论,将多个业务***以租户的形式部署于同一个web服务平台上以实现业务服务隔离,如此,即可将跨域的远程过程调用转化为本地调用,从而节省网络通信、交互等的开销,提高响应效率。
本发明通过内嵌web服务器作为web服务平台,并将外部的业务***实例作为租户注册到web服务平台,从而实现了业务服务隔离的多租户***。具体地,在接收到业务***示例的租户注册请求后,首先为该租户分配一个租户标识;之后可根据租户标识获取业务***对应的配置信息,以解析出该租户对外提供的服务别名(或该租户的域名,别的租户可以通过该服务别名来访问该租户)、私有服务接口(即只允许该租户自己调用的方法)、公共服务接口(所有的租户可以共享的方法)、调用外部***的服务别名(即当前租户需要访问的其它***的服务别名)、服务接口(不区分公有和私有),数据源分片信息等;然后,根据租户标识获取业务***的可执行的类文件并加载到JVM中,具体实现时需基于Java的类加载机制,由于租户的可执行资源包处于Java类加载器加载不到的地方,故需要自行加载,在加载的过程中还可以对该租户的资源文件织入(把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象,这样的行为叫做织入)标识,即在编译后的字节码文件中添加不影响程序运行的租户标识tenantId,以实现对租户进行打码;最后,将业务***实例发布为web服务并以端口区别于其他的web服务。其中,在对业务***的配置信息进行解析时,还可以为私有服务接口配置锁,以使持有该锁的租户才能访问该业务***实例的私有方法。
下面结合附图及具体实施例介绍本发明的web服务的部署方法。
图1是根据本发明实施例的基于多租户技术的web服务的部署方法的主要步骤示意图。,如图1所示,为了实现将不少于一个业务***以租户的形式部署到web服务平台,本发明实施例的基于多租户技术的web服务的部署方法主要包括如下的步骤S101至步骤S103。
步骤S101:获取业务***的租户注册请求,租户注册请求包括业务***的配置文件和可执行的类文件;
步骤S102:解析配置文件,并为其中的私有方法生成权限校验规则,以及加载可执行的类文件;
步骤S103:为业务***分配端口并将其发布为web服务。
其中,通过步骤S102即可将租户的可执行类文件等资源文件进行数据隔离,并且在进行加载的过程中动态进行干预代码的注入以实现通用线程的暂停和唤醒。通过为私有方法生成权限校验规则,以实现只有指定的用户可以访问该业务***的私有服务接口,从而实现了服务隔离。在为私有方法生成权限校验规则后,会将私有方法及权限校验规则保存到web平台的租户注册中心,以备后续用户通过该web服务平台访问该业务***时可以进行权限校验。
根据本发明的一个实施例,若私有方法具有依赖方法,则将权限校验规则添加到依赖方法的注解中。其中,依赖方法指的是该私有方法在执行时需要依赖的方法。若私有方法具有依赖方法,则当该私有方法被调用执行时,该依赖方法即需要被执行,此时可根据该依赖方法的注解中保存的权限校验规则对用户进行权限校验。其中,权限校验规则根据需要可灵活设定,例如可以是生成令牌秘钥对并使用令牌秘钥对进行权限校验,也可以是生成校验码并使用校验码进行权限校验,等等。
根据本发明的一个实施例,在获取业务***的租户注册请求之后,还可以包括:
将业务***的可执行的类文件中声明的需要使用协程处理的方法进行标记,并将业务***的可执行的类文件更新为标记后的类文件。
并且,加载可执行的类文件包括:
对可执行的类文件进行解析,将已进行标记的方法中织入干预代码以实现通用线程的暂停和唤醒。
通过该实施例的技术方案,即可使用协程的方式进行业务处理,协程(coroutine)与子例程一样,也是一种程序组件。子例程是某个主程序的一部分代码,该代码执行特定的任务并且与主程序中的其他代码相对独立,相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程与线程相比较来说,多个线程相对独立,有自己的上下文,但是切换受***控制;而多个协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。因此,协程相对线程来说,其切换方式更为灵活,并且可节省线程的创建、维护开销,提高分布式高并发下的吞吐量。
本发明基于JVM的轻量级协程进行业务处理,根据本发明的内置类加载器和JVM代理器在对类文件进行***编译时,识别和记录带有协程标识的类或方法,并将含有协程标识的类或方法的位置记录到一个自定义文件——“协程文件”中,在加载时通过配合标准的Java字节码文件(.class)和协程文件在含有协程标识的类和方法上织入干预代码以实现通用线程的暂停(yield方法)和唤醒(notify方法)。本发明协程的yield方法实现不会在JVM上产生内存占用也不会挂起线程,从而可以节省线程的创建和维护开销。
在分布式部署环境中,本发明的协程处理模式通过对协程的yield动作由业务***控制线程暂停和继续执行,在并发环境下分布式事务的处理不会造成线程的挂起和阻塞。
根据本发明的另一个实施例,在获取业务***的租户注册请求之后,还可以包括:
将可执行的类文件经过序列化及压缩处理后保存到数据库或磁盘中。
根据该实施例,web服务平台在获取业务***的租户注册请求及业务***的配置文件和可执行的类文件之后,还可以将业务***的可执行的类文件保存到web服务平台的工作空间对应的数据库或磁盘中,而并不是直接加载到JVM中,只有当该业务***被调用时,才会进行类文件的动态加载和执行,并且在业务处理完成后即释放资源,实现了类的动态加载和卸载,从而提高了JVM的有效利用率。
根据另一个实施例,本发明可将前述包含有协程文件的可执行的类文件通过序列化及压缩处理后保存到磁盘或者数据库,只有当调用协程方法时才会根据协程文件进行动态加载和干预代码的织入。如不需要协程方法,该过程不会在JVM上生产多余栈帧。当该web服务被调用时,类加载器会从压缩数据中读取协程文件,从而获取包含有协程标识的方法和需要yield(线程暂停)的方法行,以及参数名称和请求类型。类加载器根据参数名称和请求类型加载目标服务类并织入干预代码,当程序执行到yield方法时会通过抛出异常的方式终止执行,并将中止执行时的执行结果作为中间值保存到目标服务类的栈顶,等待下次发起对该web服务的调用时,直接从上次暂停的位置加载中间值作为变量值并压入操作栈。
在大规模的业务集成环境中,本发明通过对可执行的类文件的序列化和反序列化以将协程文件写入磁盘,该过程不会损耗JVM的内存。
通过对运行时对象的序列化和字节(byte)化再进行文件化,可以便捷的将类文件存储到磁盘、数据库等存储介质上。根据不同的介质对数据大小的定义不同本发明提供两种动态压缩方式。在windows或linux***中英文字母、数字、英文半角符号占用一个字节,在mysql等关系型数据库中varchar类型中文与英文占用是一致的。
在本发明的一个实施例中,若保存到数据库中,则压缩处理包括:
将序列化后的可执行的类文件进行字节化处理以转换为字节码;
基于Base64编码方式对字节码进行编码;
将每个字节码对应的8位二进制码的前两位切割掉之后,将所有字节码的二进制码拼接;
对拼接后得到的二进制码按照每8位为一段进行分割,并将分割后得到的每段二进制码十进制化后转换为字节以进行压缩处理。
其中,Base64是网络上最常见的用于传输8Bit(位)字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
在服务器的磁盘介质中,通过对字节化数据的Base64编码处理,会产生由大写字母(A-Z)、小写字母(a-z)、数字(0-9)、英文半角符号(+/)共64个符号排列组合产生的序列化文件,首先建立0-63与64个符号的对应关系,然后对0-63进行二进制化,之后将8位的二进制码切割掉前两位与下一个处理后的二进制码拼接,然后进行每8位一段的分割,对分割处理后的二进制码十进制化并获取其字节值输出以实现压缩处理,解压缩过程相反。
在本发明的另一个实施例中,若保存到磁盘中,则压缩处理包括:
建立一个纵轴为54横轴为20的坐标轴,并以每一个单元横、纵坐标轴的相交点表示一个汉字符号;
将序列化后的可执行的类文件进行字节化处理以转换为字节码,并对字节码基于Base64编码方式进行编码;
根据预设的编码与坐标轴上的坐标值的对应关系,获取编码对应的横、纵坐标值,并将对应的纵轴和横轴的相交点的汉字符号作为压缩文件。
其中,54指的是由大写字母(A-Z)、小写字母(a-z)和英文半角符号(+/)共有54个符号,20指的是可能重复的符号的个数。具体地,对于关系型数据库中类文件的存储,可建立一个纵轴为54纵轴横轴为20的坐标轴,每一个单元横纵轴相交点用一个汉字符号代替位置,将字节化后的字节码进行Base64处理,对于相连的字母进行简记,例如sssss记为原值加个数的形式s5,然后在坐标轴上寻找s5(其中,第一个字符s即对应纵轴坐标,第二个字符5即对应横轴坐标)对应的汉字符号并输出以实现压缩处理,解压缩过程相反。
图2是本发明实施例的***架构图。如图2所示,本发明的web服务平台***主要包括监控管理平台、web服务器和数据库3部分。其中,监控管理平台用于对本发明的web服务平台***进行监控和管理,用户通过监控管理平台提交业务***的租户注册请求,以及业务***的可执行的资源文件(如:*.jar,*.zip,*.war,*.tar)以及配置信息等;web服务器是提供部署于web服务平台的各业务***的运行环境的容器,其中实线表示公共方法与数据的访问,虚线表示私有方法和数据的使用;数据库用于存储各业务***的应用数据。
图3是本发明实施例的web服务的部署流程示意图。如图3所示,以一个业务***通过web服务平台进行租户注册为例,web服务的部署流程主要包括如下的步骤:
步骤S301:用户通过监控管理平台上传业务***的工程压缩包,其中,工程压缩包内包括业务***的配置文件和可执行的类文件等;
步骤S302:web服务平台的中控调拨装置判断当前节点状态并分配给不同的处理器,其中,若“_f_=0”,即该业务***为首次上传工程压缩包,则将对应的工程压缩包传递给打码器;
步骤S303:打码器对工程压缩包内的配置文件进行解析,以获取该业务***对外提供的服务别名、私有服务接口、公共服务接口、调用外部***的服务别名、服务接口,数据源分片id等信息;并且,将工程压缩包内的可执行的类文件中声明的需要使用协程处理的方法进行重命名以实现添加协程标识,重命名的格式例如是:原名_coroutine_协程方法名,并且将添加了协程标识的方法的位置记录下来;最后,将处理后的文件移动到web服务平台的工作空间,并保存到工作空间对应的磁盘或者数据库中;
步骤S304:web服务平台的中控调拨装置在打码器完成处理后,再次判断当前节点状态并分配给不同的处理器,此时,“_f_=1”,表示文件已转移至web服务平台的工作空间,然后将当前节点的任务分配给初始化器;
步骤S305:初始化器用于将上传到web服务平台的工作空间的业务***部署到JVM中,具体地,通过JVM的代理器调用自定义的类加载器以加载可执行的类文件,并解析其中含有协程标识的文件以生成协程文件;解析配置文件,为私有方法生成令牌秘钥对,并将该私有方法和秘钥推送到注册中心;然后在注册中心搜索该私有方法是否有依赖方法,如有,则将秘钥保存到该依赖方法的注解文件中;
步骤S306:web服务平台的中控调拨装置在初始化器完成处理后,再次判断当前节点状态,此时,“_f_=2”,表示文件已加载、解析完成,返回监控管理平台文件上传成功;
步骤S307:用户触发执行;
步骤S308:web服务平台的中控调拨装置将任务分配给分离器;
步骤S309:分离器从注册中心的端口池中获取一个可用的端口,并将该业务***发布为web服务。
其他的业务***通过web服务平台进行租户注册的过程与上述流程相同。如此,即可将多个业务***以租户的形式注册到统一的web服务平台,以实现服务隔离。
图4是根据本发明实施例的基于多租户技术的web服务的部署装置的主要模块示意图。如图4所示,为了实现将不少于一个业务***以租户的形式部署到web服务平台,本发明实施例的基于多租户技术的web服务的部署装置400主要包括请求获取模块401、解析加载模块402和服务发布模块403。
请求获取模块401用于获取业务***的租户注册请求,所述租户注册请求包括所述业务***的配置文件和可执行的类文件;
解析加载模块402用于解析所述配置文件,并为其中的私有方法生成权限校验规则,以及加载所述可执行的类文件;
服务发布模块403用于为所述业务***分配端口并将其发布为web服务。
根据本发明的一个实施例,若所述私有方法具有依赖方法,则将所述权限校验规则添加到所述依赖方法的注解中。
根据本发明的另一个实施例,基于多租户技术的web服务的部署装置400还可以包括标记模块(图中未示出),用于:
在获取业务***的租户注册请求之后,将所述业务***的可执行的类文件中声明的需要使用协程处理的方法进行标记,并将所述业务***的可执行的类文件更新为标记后的类文件。
根据本发明的实施例,解析加载模块402还可以用于:
对所述可执行的类文件进行解析,将已进行标记的方法中织入干预代码以实现通用线程的暂停和唤醒。
根据本发明的另一个实施例,基于多租户技术的web服务的部署装置400还可以包括文件保存模块(图中未示出),用于:
在获取业务***的租户注册请求之后,将所述可执行的类文件经过序列化及压缩处理后保存到数据库或磁盘中。
根据本发明的一个实施例,若保存到数据库中,则压缩处理包括:
将序列化后的所述可执行的类文件进行字节化处理以转换为字节码;
基于Base64编码方式对所述字节码进行编码;
将每个字节码对应的8位二进制码的前两位切割掉之后,将所有字节码的二进制码拼接;
对拼接后得到的二进制码按照每8位为一段进行分割,并将分割后得到的每段二进制码十进制化后转换为字节以进行压缩处理。
根据本发明的另一个实施例,若保存到磁盘中,则压缩处理包括:
建立一个纵轴为54横轴为20的坐标轴,并以每一个单元横、纵坐标轴的相交点表示一个汉字符号;
将序列化后的所述可执行的类文件进行字节化处理以转换为字节码,并对所述字节码基于Base64编码方式进行编码;
根据预设的编码与坐标轴上的坐标值的对应关系,获取所述编码对应的横、纵坐标值,并将对应的纵轴和横轴的相交点的汉字符号作为压缩文件。
根据本发明的另一方面,还提供了一种web服务的调用方法和装置。其中,该web服务是按照前述实施例中的方法进行部署的。该web服务的调用方法主要包括以下的步骤:
获取用户发起的web服务调用请求的请求类型;
当所述请求类型为私有请求时,对所述用户进行权限校验;
当权限校验通过时,响应所述web服务调用请求。
根据本发明的一个实施例,对所述用户进行权限校验包括:
获取所述私有请求对应的私有方法;
根据所述私有方法的权限校验规则对所述用户进行权限校验。
根据本发明的另一个实施例,对所述用户进行权限校验包括:
获取所述私有请求对应的私有方法;
若所述私有方法具有依赖方法,则从所述依赖方法的注解中获取所述权限校验规则;
根据所述权限校验规则对所述用户进行权限校验。
图5是本发明实施例的web服务的调用流程示意图。如图5所示,本发明一个实施例的web服务的调用流程主要包括如下的步骤:
步骤S501:用户向web服务平台发起web服务的调用请求,此时的调用请求中无需区分web服务设备,仅需添加web服务对应的端口号port即可,调用请求例如是:http://xxxx:port/x/x;
步骤S502:请求到达目标web服务后,web服务平台的IOC(Inversion of Control,控制反转)控制器进行业务处理之前的权限校验,由于web服务具有公有方法和私有方法,故需对用户进行权限校验;
步骤S503:IOC控制器判断请求类型,当请求类型为私有请求时,由加密机进行权限校验;
步骤S504:加密机首先从注册中心中获取目标web服务的私有方法对应的秘钥或者与该私有方法的依赖方法的秘钥key对应的秘钥;然后,加密机校验key的构成是否是合法的(例如:是否满足生成规则,以及是否是本web服务平台颁发的,等等),以及秘钥是否合法;如果是,则校验通过,将秘钥或者将校验成功信息发送给IOC控制器;
步骤S505:IOC控制器将秘钥发送到目标web服务;
步骤S506:目标web服务根据秘钥请求依赖服务(依赖方法对应的服务)进行业务处理;
步骤S507:依赖服务在接收到目标web服务的请求后,将由IOC控制***通过执行上述的步骤S502-S504再次进行权限校验,并在校验通过后,由IOC控制器将秘钥发送到依赖服务;
步骤S508:依赖服务返回响应结果给目标web服务;
步骤S509:目标web服务返回响应结果。
根据本发明的实施例,基于多租户技术的web服务的调用装置主要包括:
类型获取模块,用于获取用户发起的web服务调用请求的请求类型;
权限校验模块,用于当所述请求类型为私有请求时,对所述用户进行权限校验;
请求响应模块,用于当权限校验通过时,响应所述web服务调用请求。
其中,权限校验模块还可以用于:
获取所述私有请求对应的私有方法;
根据所述私有方法的权限校验规则对所述用户进行权限校验。
另外,权限校验模块还可以用于:
获取所述私有请求对应的私有方法;
若所述私有方法具有依赖方法,则从所述依赖方法的注解中获取所述权限校验规则;
根据所述权限校验规则对所述用户进行权限校验。
根据本发明实施例的技术方案,通过获取业务***的租户注册请求,并对业务***的配置文件进行解析以为私有方法生成权限校验规则,以及加载业务***的可执行的类文件之后,为业务***分配端口并发布为web服务,实现了基于多租户技术的web服务的部署方法,基于多租户的技术理论,将多个业务***以租户的形式部署于同一个web服务平台上以实现业务服务隔离,如此,即可将跨域的远程过程调用转化为本地调用,从而节省网络通信、交互等的开销,提高响应效率。另外,本发明还可以使用协程的方式进行业务处理,协程相对线程来说,其切换方式更为灵活,并且可节省线程的创建、维护开销,提高分布式高并发下的吞吐量;同时,还可以将业务***的可执行的类文件保存到web服务平台的工作空间对应的数据库或磁盘中,而并不是直接加载到JVM中,只有当该业务***被调用时,才会进行类文件的动态加载和执行,并且在业务处理完成后即释放资源,实现了类的动态加载和卸载,从而提高了JVM的有效利用率。
图6示出了可以应用本发明实施例的基于多租户技术的web服务的部署、调用方法或基于多租户技术的web服务的部署、调用装置的示例性***架构600。
如图6所示,***架构600可以包括终端设备601、602、603,网络604和服务器605。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的基于多租户技术的web服务的部署、调用方法一般由服务器605执行,相应地,基于多租户技术的web服务的部署、调用装置一般设置于服务器605中。
应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图7,其示出了适于用来实现本发明实施例的终端设备或服务器的计算机***700的结构示意图。图7示出的终端设备或服务器仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,计算机***700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有***700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本发明的***中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,例如,可以描述为:一种处理器包括请求获取模块、解析加载模块和服务发布模块。其中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定,例如,请求获取模块还可以被描述为“用于获取业务***的租户注册请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获取业务***的租户注册请求,所述租户注册请求包括所述业务***的配置文件和可执行的类文件;解析所述配置文件,并为其中的私有方法生成权限校验规则,以及加载所述可执行的类文件;为所述业务***分配端口并将其发布为web服务。
根据本发明实施例的技术方案,通过获取业务***的租户注册请求,并对业务***的配置文件进行解析以为私有方法生成权限校验规则,以及加载业务***的可执行的类文件之后,为业务***分配端口并发布为web服务,实现了基于多租户技术的web服务的部署方法,基于多租户的技术理论,将多个业务***以租户的形式部署于同一个web服务平台上以实现业务服务隔离,如此,即可将跨域的远程过程调用转化为本地调用,从而节省网络通信、交互等的开销,提高响应效率。另外,本发明还可以使用协程的方式进行业务处理,协程相对线程来说,其切换方式更为灵活,并且可节省线程的创建、维护开销,提高分布式高并发下的吞吐量;同时,还可以将业务***的可执行的类文件保存到web服务平台的工作空间对应的数据库或磁盘中,而并不是直接加载到JVM中,只有当该业务***被调用时,才会进行类文件的动态加载和执行,并且在业务处理完成后即释放资源,实现了类的动态加载和卸载,从而提高了JVM的有效利用率。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。