确定服务间依赖关系的方法及装置与流程

文档序号:33320873发布日期:2023-03-03 20:31阅读:77来源:国知局
确定服务间依赖关系的方法及装置与流程

1.本技术涉及通信技术,尤其涉及一种确定服务间依赖关系的方法及装置。


背景技术:

2.为了解决传统单体应用的痛点,微服务已经成为云原生系统的重要定义,且其规模也都呈爆发式增长。随着微服务架构及其规模的增长也带来了一些安全性。例如:某云原生系统中有a、b、c共3个服务,且a在业务上只依赖b、c,b在业务上依赖c,其对应的访问权限应当设置为:a不能被任何服务访问、b只能被a访问、c能被a、b访问。
3.在相关技术中,通常采用以下方式确定微服务间的依赖关系:获取多个微服务的微服务代码文件,从微服务代码文件中识别多个微服务中每个微服务的初始化信息,从初始化信息中提取目标服务依赖关系。其中,初始化信息可以包括:服务运行的依赖包,服务初始化关联的微服务。但是,最终得到的服务间依赖关系的完整性不高。


技术实现要素:

4.本技术实施例的主要目的在于提出一种确定服务间依赖关系的方法及装置,以及提高服务间依赖关系的完整性。
5.第一方面,本技术实施例提供一种确定服务间依赖关系的方法,包括:
6.对微服务代码文件进行语义识别确定目标代码片段,其中,所述目标代码片段由表征服务间调用请求的代码语句组成;
7.从所述代码语句中提取出表征所述服务间调用请求的目标参数;
8.根据所述目标参数确定服务间依赖关系。
9.在一些实施例中,所述对微服务代码文件进行语义识别确定目标代码片段,包括:
10.采用语义模型识别出所述微服务代码文件中用于发起所述服务间调用请求的网络调用语句;
11.根据所述网络调用语句获取表征所述服务间调用请求的所述代码语句,由所述代码语句组成所述目标代码片段。
12.在一些实施例中,所述方法还包括:
13.采用语义模型识别出所述微服务代码文件中表征所述服务间调用请求的调用类型的第一参数及获取所述代码语句需要关注的第二参数;
14.所述根据所述网络调用语句获取表征所述服务间调用请求的所述代码语句,包括:
15.根据所述网络调用语句和所述第二参数获取表征所述服务间调用请求的所述代码语句。
16.在一些实施例中,所述根据所述网络调用语句和所述第二参数获取表征所述服务间调用请求的所述代码语句,包括:
17.以所述网络调用语句为起点,将所述网络调用语句中包含的所述第二参数作为污
点;
18.根据所述第二参数沿着控制流进行污点传播,识别出与所述第二参数相关的第三参数,并将所述第三参数作为污点,根据所述第三参数继续执行污点传播过程,直到达到预设条件;
19.提取污点传播过程中被污染的参数的代码表达式作为表征所述服务间调用请求的代码语句。
20.在一些实施例中,根据所述微服务代码文件中的赋值语句,所述污点传播过程包括:
21.将污点由所述赋值语句的左侧表达式中被污染的参数传递给右侧表达式中的参数。
22.在一些实施例中,根据所述微服务代码文件中的调用语句,所述污点传播过程包括:
23.将污点由被污染的方法参数传递给调用所述方法参数对应的方法的调用语句中的参数。
24.在一些实施例中,根据所述微服务代码文件中的返回值,所述污点传播过程包括:
25.当所述返回值被污染时,从所述返回值的对应方法的return语句开始,在所述对应方法的方法体内进行污点传播。
26.在一些实施例中,所述方法还包括:
27.根据微服务应用内部的服务间通信方式获取服务间调用库;
28.根据服务间调用库建立语义模型。
29.第二方面,本技术实施例提供一种确定服务间依赖关系的装置,包括:
30.代码片段确定模块,用于对微服务代码文件进行语义识别确定目标代码片段,其中,所述目标代码片段由表征服务间调用请求的代码语句组成;
31.参数提取模块,用于从所述代码语句中提取出表征所述服务间调用请求的目标参数;
32.依赖关系确定模块,用于根据所述目标参数确定服务间依赖关系。
33.在一些实施例中,所述代码片段确定模块包括:
34.网络调用语句识别单元,用于采用语义模型识别出所述微服务代码文件中用于发起所述服务间调用请求的网络调用语句;
35.代码片段确定单元,用于根据所述网络调用语句获取表征所述服务间调用请求的所述代码语句,由所述代码语句组成所述目标代码片段。
36.在一些实施例中,所述代码片段确定模块还包括:
37.参数识别单元,用于采用语义模型识别出所述微服务代码文件中表征所述服务间调用请求的调用类型的第一参数及获取所述代码语句需要关注的第二参数;
38.所述代码片段确定单元具体用于:根据所述网络调用语句和所述第二参数获取表征所述服务间调用请求的所述代码语句。
39.在一些实施例中,所述代码片段确定单元具体用于:以所述网络调用语句为起点,将所述网络调用语句中包含的所述第二参数作为污点;根据所述第二参数沿着控制流进行污点传播,识别出与所述第二参数相关的第三参数,并将所述第三参数作为污点,根据所述
第三参数继续执行污点传播过程,直到达到预设条件;提取污点传播过程中被污染的参数的代码表达式作为表征所述服务间调用请求的代码语句。
40.在一些实施例中,所述代码片段确定单元具体用于:根据所述微服务代码文件中的赋值语句,将污点由所述赋值语句的左侧表达式中被污染的参数传递给右侧表达式中的参数。
41.在一些实施例中,所述代码片段确定单元具体用于:根据所述微服务代码文件中的调用语句,将污点由被污染的方法参数传递给调用所述方法参数对应的方法的调用语句中的参数。
42.在一些实施例中,所述代码片段确定单元具体用于:当所述返回值被污染时,从所述返回值的对应方法的return语句开始,在所述对应方法的方法体内进行污点传播。
43.在一些实施例中,所述装置还包括:
44.语义模型建立模块,用于根据微服务应用内部的服务间通信方式获取服务间调用库;根据服务间调用库建立语义模型。
45.第三方面,本技术实施例提供了一种电子设备,包括:
46.一个或多个处理器;
47.存储装置,其上存储有一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面所述的确定服务间依赖关系的方法;
48.一个或多个i/o接口,连接在所述处理器与存储器之间,配置为实现所述处理器与存储器的信息交互。
49.第四方面,本技术实施例提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现第一方面所述的确定服务间依赖关系的方法。
50.本技术的技术方案,一方面,在确定服务间依赖关系时使用的是微服务代码文件,由于在微服务代码文件中包含了所有的服务间的调用关系,因此能够保证服务间依赖关系的完整性;另一方面,通过对微服务代码文件进行语义识别确定表征服务间调用请求的目标代码片段,可以精确的定位到有效代码片段,减少搜索空间和优化分析,进一步提高处理效率。
附图说明
51.图1为本技术实施例提供的一种确定服务间依赖关系的方法的流程图;
52.图2为本技术实施例提供的另一种确定服务间依赖关系的方法的流程图;
53.图3为本技术实施例提供的另一种确定服务间依赖关系的方法的流程图;
54.图4为本技术实施例提供的一种确定服务间依赖关系的装置的结构图;
55.图5为本技术实施例提供的电子设备的结构图。
具体实施方式
56.为使本领域的技术人员更好地理解本技术的技术方案,下面结合附图对本技术提供的服务器进行详细描述。
57.在下文中将参考附图更充分地描述示例实施例,但是所述示例实施例可以以不同
形式来体现且不应当被解释为限于本文阐述的实施例。反之,提供这些实施例的目的在于使本技术透彻和完整,并将使本领域技术人员充分理解本技术的范围。
58.如本文所使用的,术语“和/或”包括一个或多个相关列举条目的任何和所有组合。
59.本文所使用的术语仅用于描述特定实施例,且不意欲限制本技术。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由
……
制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、组件和/或其群组。
60.本文所述实施例可借助本技术的理想示意图而参考平面图和/或截面图进行描述。因此,可根据制造技术和/或容限来修改示例图示。因此,实施例不限于附图中所示的实施例,而是包括基于制造工艺而形成的配置的修改。因此,附图中例示的区具有示意性属性,并且图中所示区的形状例示了元件的区的具体形状,但并不旨在是限制性的。
61.除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本技术的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
62.实施例一
63.图1示出了本发明实施例一提供的确定服务间依赖关系的方法的流程图,本实施例的执行主体为本发明实施例提供的确定服务间依赖关系的装置,该装置可集成在终端设备(例如,移动终端、平板电脑或台式电脑)或服务器中。如图1所示,该方法包括以下步骤:
64.步骤s101:对微服务代码文件进行语义识别确定目标代码片段,其中,目标代码片段由表征服务间调用请求的代码语句组成。
65.具体的,可以在项目输出源代码和初始化文件时采取不侵入破坏、不拦截报文的方式获取微服务代码文件,通过该微服务代码文件中可以获取到比较完整的服务间依赖关系。其中,微服务应用程序的代码文件可能有多种形式,例如可以为源代码、字节码和二进制代码。本实施例中的代码文件为何种形式与微服务应用程序采用的编程语言的执行过程有关。不同编程语言具备的代码形式不一致,相应的,最适宜进行语义识别分析的代码形式也不相同。
66.例如下表一所示,为不同编程语言下的最适宜进行语义识别分析的代码文件形式:
67.表一
68.编程语言javapythongojavascriptrubyc#源代码√√√√√√字节码√√
××
√√二进制代码
××

×××
69.对于java语言,目前有许多工作在字节码层面的成熟静态分析工具,为便于分析可以将字节码文件作为本实施例中的代码文件。再例如,go语言,可以将源代码和二进制代码作为本实施例中的代码文件。除了源代码外,还有一些外部文件(例如.proto文件与服务部署文件)中包含与服务间调用请求相关的重要信息,因而也可以作为代码文件进行解析
和处理。
70.由于一个微服务应用程序其对应的代码量是巨大的,如果全部进行扫描分析会耗费很多时间和资源,因此,在本实施例中,为了减少搜索范围和优化分析,可以从微服务代码文件识别出对确定服务间依赖关系有用的代码语句,即这些代码语句可以表征服务间调用请求,且在一个微服务应用中服务间的调用是有限即少量的,因此表征服务间调用请求的代码语句也是有限的,进而根据这些少量的代码语句可以快速精确的确定服务间依赖关系。
71.步骤s102:从代码语句中提取出表征服务间调用请求的目标参数。
72.其中,代码语句为表征服务间调用请求的代码表达式,在该代码表达式中包含了表征服务间调用关系的目标参数。其中,服务间调用请求的类型不同,其对应的目标参数也不相同。例如下表二所示,为不同服务间调用请求对应的目标参数:
73.表二
[0074][0075][0076]
步骤s103:根据目标参数确定服务间依赖关系。
[0077]
其中,目标参数中包含了服务间的调用关系。例如,http调用和grpc调用的目标参数path即调用路径,该调用路径表明了服务间的调用关系,因此根据目标参数path就可以确定服务间依赖关系。再例如,tcp调用的目标参数port即调用端口,该调用端口表明了服务间的调用关系,因此根据目标参数port就可以确定服务间依赖关系。
[0078]
以下述目标代码片段为例
[0079]
1reviews={
[0080]
2"name":"http://reviews:9080",
[0081]
3"endpoint":"reviews"
[0082]
4}
[0083]
5@app.route('/api/v1/products/《product_id》/reviews')
[0084]
6url=reviews['name']+"/"+reviews['endpoint']+"/"+str(product_id)
[0085]
7res=requests.get(url,headers=headers,timeout=3.0)
[0086]
基于上述目标代码片段可以提取如下目标参数:
[0087]
{
[0088]
"type":"http",
[0089]
"url":"http://reviews:9080/reviews/*",
[0090]
"path":"/reviews/*",
[0091]
"method":"get"
[0092]
}
[0093]
进而根据该目标参数可以确定调用的服务的路径为:http://reviews:9080/
reviews/*,进而根据上述服务的路径确定调用的服务。
[0094]
当需要确定的服务间依赖关系较多时,可以基于确定的多个目标代码片段进行统一提取,生成一个清单文件,例如,json清单文件,通过该清单文件来描述服务间依赖。为了提高处理效率,可以采用污点传播的方式扫描每个目标代码片段,进而根据扫描结果确定目标参数。
[0095]
本实施例在确定服务间依赖关系时,一方面,使用的是微服务代码文件,由于在微服务代码文件中包含了所有的服务间的调用关系,因此能够保证服务间依赖关系的完整性;另一方面,通过对微服务代码文件进行语义识别确定表征服务间调用请求的目标代码片段,可以精确的定位到有效代码片段,减少搜索空间和优化分析,进一步提高处理效率。
[0096]
在一个可选实施例中,如图2所示,步骤s101具体包括:
[0097]
步骤a:采用语义模型识别出微服务代码文件中用于发起服务间调用请求的网络调用语句。
[0098]
如果服务发起服务间调用请求,一般在微服务代码文件中都有相应的代码语句,该代码语句即为网络调用语句。在本实施例中,采用预先建立的语义模型对微服务代码文件进行语义识别,以确定用于发起服务间调用请求的网络调用语句。该语义模型可以基于微服务应用内部的服务间通信方式建立,具体建立过程详见下述可选实施例。
[0099]
下面对网络调用语句进行举例说明,下述为一段源代码,在该源代码中包含了代码语句import requests和res=requests.get(url,headers=headers,timeout=3.0),采用语义模型可以识别出上述代码语句,进而确定网络调用语句为res=requests.get(url,headers=headers,timeout=3.0)。
[0100]
源代码
[0101]
1import requests
[0102]
2from flask import request,session
[0103]

[0104]
3reviews={
[0105]
4"name":"http://reviews:9080",
[0106]
5"endpoint":"reviews"
[0107]
6}
[0108]

[0109]
7@app.route('/api/v1/products/《product_id》/reviews')
[0110]
8def reviewsroute(product_id):
[0111]
9headers=getforwardheaders(request)
[0112]
10user=session.get('user',")
[0113]
11status,reviews=getproductreviews(product_id,headers)
[0114]

[0115]
12def getproductreviews(product_id,headers):
[0116]
13try:
[0117]
14url=reviews['name']+"/"+reviews['endpoint']+"/"+str(product_id)
[0118]
15res=requests.get(url,headers=headers,timeout=3.0)
[0119]
步骤b:根据网络调用语句获取表征服务间调用请求的代码语句,由代码语句组成目标代码片段。
[0120]
具体的,在确定了网络调用语句后,可以基于该网络调用语句确定被调用的代码语句,基于被调用的代码语句获取表征服务间调用请求的代码语句。以上述源代码为例,在网络调用语句中res=requests.get(url,headers=headers,timeout=3.0)包含参数url和headers,基于参数url确定其对应的调用语句url=reviews['name']+"/"+reviews['endpoint']+"/"+str(product_id),并基于参数headers确定其对应的调用语句headers=getforwardheaders(request),由于调用语句headers=getforwardheaders(request)中的参数为输入参数request因此结束。而url=reviews['name']+"/"+reviews['endpoint']+"/"+str(product_id)中参数reviews为方法参数,因此进一步确定其对应的调用语句如下:
[0121]
3reviews={
[0122]
4"name":"http://reviews:9080",
[0123]
5"endpoint":"reviews"
[0124]
6}
[0125]
由于方法参数reviews中的参数name和endpoint均为常量,则结束调用语句的查找过程。基于上述查找过程可以确定表征服务间调用请求的代码语句如下:
[0126]
1reviews={
[0127]
2"name":"http://reviews:9080",
[0128]
3"endpoint":"reviews"
[0129]
4}
[0130]
5@app.route('/api/v1/products/《product_id》/reviews')
[0131]
6url=reviews['name']+"/"+reviews['endpoint']+"/"+str(product_id)
[0132]
7res=requests.get(url,headers=headers,timeout=3.0)
[0133]
在一个可选实施例中,为进一步提高识别效率,所述方法还包括:
[0134]
步骤s104:采用语义模型识别出微服务代码文件中表征服务间调用请求的调用类型的第一参数及获取代码语句需要关注的第二参数。
[0135]
具体的,在建立语义模型后,基于语义信息增强该语义模型,该语义信息描述了服务间调用请求的类型,并指示了在后续获取代码语句中需要关注的关键参数即第二参数。例如,该语义模型可以为一个方法类,基于上述源代码示例可以设置如下方法类,在该方法类示例中,该语义模型包括第一参数即服务间调用请求的类型http、第二参数method和url。
[0136]
语义模型
[0137]
library:requests
[0138]
method:get(url,params=none,**kwargs)
[0139]
semantics:http-get
[0140]
key parameters:url(semantics:http-url)
[0141]
相应的,步骤b具体包括:根据网络调用语句和第二参数获取表征服务间调用请求的代码语句。
[0142]
基于上述示例的源代码和语义模型,可见在网络调用语句res=requests.get(url,headers=headers,timeout=3.0)中的参数url即为第二参数,仅基于参数url进一步确定其对应的调用语句,相对于上述步骤b不需要再查找参数headers的调用过程,从而减少了不必要的参数的调用过程,进一步提高处理效率。
[0143]
在一个可选实施例中,为了进一步提高目标代码片段的识别效率和速度,这里采用污点传播的方式确定组成目标代码片段的代码语句,如图3所示,步骤b具体包括:
[0144]
步骤b1:以网络调用语句为起点,将网络调用语句中包含的第二参数作为污点。
[0145]
基于上述示例的源代码和语义模型,可以确定本实施例中的网络调用语句为res=requests.get(url,headers=headers,timeout=3.0),对应的第二参数为url,则将从网络调用语句res=requests.get(url,headers=headers,timeout=3.0)开始,将url作为污点进行污点传播。
[0146]
步骤b2:根据第二参数沿着控制流进行污点传播,识别出与第二参数相关的第三参数,并将第三参数作为污点,根据第三参数继续执行污点传播过程,直到达到预设条件。
[0147]
其中,沿着控制流的反向还是正向进行污点传播取决于该网络调用语句为调用语句还是被调用语句,如果该网络调用语句为调用语句,则沿着控制流的反向进行污点传播,如果该网络调用语句为被调用语句,则沿着控制流的正向进行污点传播。基于上述示例的源代码,则沿着控制流的反向进行污点传播。污点从网络调用语句中的参数url即第二参数沿着反向传递给url=reviews['name']+"/"+reviews['endpoint']+"/"+str(product_id)语句中的方法参数reviews即第三参数,进而传递给方法参数reviews中的相关参数name和endpoint,结束污点传播。其中,结束污点传播的预设条件为参数由常量赋值或者来自输入参数。
[0148]
具体的,在污点传播过程中针对不同的代码语句其对应的污点传播过程不同,主要有以下几种情况:
[0149]
第一种情况,根据微服务代码文件中的赋值语句,污点传播过程包括:将污点由赋值语句的左侧表达式中被污染的参数传递给右侧表达式中的参数。
[0150]
第二种情况,根据微服务代码文件中的调用语句,污点传播过程包括:将污点由被污染的方法参数传递给调用方法参数对应的方法的调用语句中的参数。
[0151]
第三种情况,根据微服务代码文件中的返回值,污点传播过程包括:当返回值被污染时,从返回值的对应方法的return语句开始,在对应方法的方法体内进行污点传播。
[0152]
步骤b3:提取污点传播过程中被污染的参数的代码表达式作为表征服务间调用请求的代码语句。
[0153]
基于上述示例的源代码和语义模型,可以确定最终的目标代码片段如下:
[0154]
在一个可选实施例中,所述方法还包括语义模型的建立过程,具体如下:根据微服务应用内部的服务间通信方式获取服务间调用库;根据服务间调用库建立语义模型。
[0155]
由于同一微服务应用内部的服务间通信方式是相对统一的,引入的服务间调用库的数目也很有限。因此,基于这些服务间调用库进行针对性的建模,可以减少工作量。例如grpc请求所调用的应用程序接口被定义于相应的.proto文件中,可以通过解析该文件进行自动化的建模得到对应的语义模型,以协助识别出有哪些语句实际上发起了grpc请求。
[0156]
实施例二
[0157]
图4示出了本发明实施例二提供的确定服务间依赖关系的装置的结构图,该装置可以采用软件或硬件的方式实现,该装置可以集成在终端设备或服务器中。如图4所示,该装置包括代码片段确定模块201、参数提取模块202和依赖关系确定模块203;其中,
[0158]
代码片段确定模块201用于对微服务代码文件进行语义识别确定目标代码片段,其中,目标代码片段由表征服务间调用请求的代码语句组成;
[0159]
参数提取模块202用于从代码语句中提取出表征服务间调用请求的目标参数;
[0160]
依赖关系确定模块203用于根据目标参数确定服务间依赖关系。
[0161]
在一些实施例中,代码片段确定模块201包括:网络调用语句识别单元2011和代码片段确定单元2012;其中,
[0162]
网络调用语句识别单元2011用于采用语义模型识别出微服务代码文件中用于发起服务间调用请求的网络调用语句;
[0163]
代码片段确定单元2012用于根据网络调用语句获取表征服务间调用请求的代码语句,由代码语句组成目标代码片段。
[0164]
在一些实施例中,代码片段确定模块201还包括:参数识别单元2013;其中,
[0165]
参数识别单元2013用于采用语义模型识别出微服务代码文件中表征服务间调用请求的调用类型的第一参数及获取代码语句需要关注的第二参数;
[0166]
代码片段确定单元2012具体用于:根据网络调用语句和第二参数获取表征服务间调用请求的代码语句。
[0167]
在一些实施例中,代码片段确定单元2012具体用于:以网络调用语句为起点,将网络调用语句中包含的第二参数作为污点;根据第二参数沿着控制流进行污点传播,识别出与第二参数相关的第三参数,并将第三参数作为污点,根据第三参数继续执行污点传播过程,直到达到预设条件;提取污点传播过程中被污染的参数的代码表达式作为表征服务间调用请求的代码语句。
[0168]
在一些实施例中,代码片段确定单元2012具体用于:根据微服务代码文件中的赋值语句,将污点由赋值语句的左侧表达式中被污染的参数传递给右侧表达式中的参数。
[0169]
在一些实施例中,代码片段确定单元2012具体用于:根据微服务代码文件中的调用语句,将污点由被污染的方法参数传递给调用方法参数对应的方法的调用语句中的参数。
[0170]
在一些实施例中,代码片段确定单元2012具体用于:当返回值被污染时,从返回值的对应方法的return语句开始,在对应方法的方法体内进行污点传播。
[0171]
在一些实施例中,所述装置还包括:语义模型建立模块204;其中,
[0172]
语义模型建立模块204用于根据微服务应用内部的服务间通信方式获取服务间调用库;根据服务间调用库建立语义模型。
[0173]
上述各个模块的具体结构和工作原理可参照方法实施例中的相应描述,此处不再赘述。
[0174]
实施例三
[0175]
本技术实施例提供一种电子设备,参照图5,其包括:
[0176]
一个或多个处理器301;
[0177]
存储器302,其上存储有一个或多个程序,当一个或多个程序被一个或多个处理器
执行,使得一个或多个处理器实现上述任意一项的确定服务间依赖关系的方法;
[0178]
一个或多个i/o接口303,连接在处理器与存储器之间,配置为实现处理器与存储器的信息交互。
[0179]
其中,处理器301为具有数据处理能力的器件,其包括但不限于中央处理器(cpu)等;存储器302为具有数据存储能力的器件,其包括但不限于随机存取存储器(ram,更具体如sdram、ddr等)、只读存储器(rom)、带电可擦可编程只读存储器(eeprom)、闪存(flash);i/o接口(读写接口)303连接在处理器301与存储器302间,能实现处理器301与存储器302的信息交互,其包括但不限于数据总线(bus)等。
[0180]
在一些实施例中,处理器301、存储器302和i/o接口303通过总线相互连接,进而与计算设备的其它组件连接。
[0181]
实施例四
[0182]
本技术实施例提供一种计算机可读介质,其上存储有计算机程序,程序被处理器执行时实现上述任意一种确定服务间依赖关系的方法。
[0183]
本领域普通技术人员可以理解,上文中所申请方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其它数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其它存储器技术、cd-rom、数字多功能盘(dvd)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其它的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其它传输机制之类的调制数据信号中的其它数据,并且可包括任何信息递送介质。
[0184]
本文已经申请了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其它实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本技术的范围的情况下,可进行各种形式和细节上的改变。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1