具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本技术领域的人员更好地理解本说明书实施例中的技术方案,下面先对本说明书实施例涉及的流量回放的相关技术,进行简要说明。
请参见图1,图1是本说明书一实施例提供的流量回放业务的设备组网图。
如图1所示的设备组网包括流量发起方、流量接收方(对应图1所示的业务系统A、业务系统B)、与流量接收方对应的数据库(DB1、DB2);
其中,流量发起方通过向流量接收方发送录制流量,以使流量接收方接收该录制流量并进行对应的业务处理。
例如,如图1所示的流量发起方将用于模拟线上业务的录制流量发送给业务系统A;业务系统A将该录制流量转发至与业务系统A对应的数据库DB1,以使业务系统A执行与该录制流量中业务请求,从而实现流量回放。又例如,如图1所示的流量发起方将用于模拟线上业务的录制流量发送给业务系统B;业务系统B将该录制流量转发至与业务系统B对应的数据库DB2,以使业务系统B执行与该录制流量中业务请求,从而实现流量回放。
在以上示出的组网架构的基础上,本说明书旨在提出一种,基于计算确定录制流量中的各业务请求之间的依赖关系,并划分若干个流量分组;以及,基于若干个流量分组来实现快速地、低成本的有状态流量回放的技术方案。
在实现时,流量发起方对线上业务流量执行录制,获得录制流量;确定所述录制流量中的各业务请求之间的依赖关系,并基于所述依赖关系将所述录制流量中的业务请求划分为若干个流量分组;针对所述若干个流量分组中的业务请求分别执行流量回放。
在以上技术方案中,基于录制流量中的各业务请求之间的依赖关系,将录制流量划分为若干流量分组,针对若干流量分组中的业务请求分别执行流量回放;从而实现了有状态的流量模拟及回放,提高了测试效率,降低了人力成本和系统开销。
下面通过具体实施例并结合具体的应用场景对本说明书进行描述。
请参考图2,图2是本说明书一实施例提供的一种流量回放方法的流程图,所述方法应用于流量发起方,上述方法执行以下步骤:
步骤202、对线上业务流量执行录制,获得录制流量。
步骤204、确定所述录制流量中的各业务请求之间的依赖关系,并基于所述依赖关系将所述录制流量中的业务请求划分为若干个流量分组。
步骤206、针对所述若干个流量分组中的业务请求分别执行流量回放。
在本说明书中,上述流量发起方,可以包括集成有流量回放功能的任意形式的设备或设备集群。
例如,在实际应用中,上述流量发起方具体可以包括集成有流量回放功能的个人电脑、移动终端、负载均衡器、本地服务器、云服务器等。
在示出的一种实施方式中,上述流量发起方为分布式的测试系统。例如,在实际应用中,上述流量发起方具体可以是由用户搭建的用于测试淘宝系统或天猫系统的测试系统,该测试系统为由多个本地服务器或云服务器基于分布式协议组成的分布式系统。
为了方便理解,这里介绍下分布式系统的相关概念。分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的节点(例如,计算机或设备)组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个节点无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
在实现时,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,并且及时对单个节点的硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,以及,应用程序也不能进一步优化的时候,通常才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统是多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决该问题也会引入相应的分布式技术的相关机制和协议。
在本说明书中,上述流量接收方,包括与上述流量发起方对接的基于任意的分布式技术搭建的分布式系统;例如,上述分布式业务系统为基于Hadoop分布式技术的分布式系统。
在示出的一种实施方式中,上述流量接收方还可以是分布式的在线业务系统。也即,利用真实的业务系统,在真实的业务环境中,来执行流量仿真。
例如,在实际应用中,上述流量接收方可以是用于支持用户进行商品买卖交易的淘宝、天猫系统。
又例如,在实际应用中,上述流量接收方还可以是为用户提供的云计算或云存储服务的阿里云系统。
当然,在实际应用中,上述流量接收方也可以是在内部测试环境中搭建的用于模拟线上业务的测试系统,在本说明书中不进行特别限定。
在本说明书中,上述线上业务流量是指,在真实生产环境中发生的真实业务流量。例如,在实际应用中,上述线上业务流量具体可以是双十一期间淘宝系统或天猫系统中发生的由真实用户触发的商品买卖交易所对应的业务请求。
在本说明书中,上述录制流量包括上述流量发起方基于任何流量录制技术对上述线上业务流量所录制获得的用于测试的业务流量。
在实现时,流量录制技术可以有很多种,可以在基于硬件、网络、或软件对上述线上业务流量执行录制。比如:基于网络设备提供的流量镜像功能,可以获取生产环境中真实业务流量的镜像流量。再比如:基于软件流捕获工具,也可以获取生产环境中真实业务流量。
例如,在实际应用中,上述录制流量可以是双十一活动期间,用户在淘宝、天猫系统进行商品买卖交易时,录制的业务流量。又例如,上述录制流量还可以是用于验证上述分布式系统合入已解决问题代码的某个版本的业务流量。
需要说明的是,上述录制流量来自于真实的线上业务流量,但不是生产环境中,由实际用户触发的业务流量;也即上述录制流量是用于模拟和再现生产环境的业务场景,从而进一步验证生产环境中的各个业务系统的业务功能是否正确,或者性能达到预设的指标。
在本说明书中,上述流量发起方对线上业务流量执行录制,获得录制流量。
在实现时,上述流量发起方可以基于任何流量录制技术,对上述线上业务流量中的业务请求执行录制。流量回放技术可以有很多种,可以在不同角度对业务流量执行录制,
比如:基于TCP的录制工具TcpReplay。再比如:基于Java的用于压力测试的录制工具JMeter;其中,JMeter最初被设计用于Web应用测试,但后来扩展到其他测试领域,可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器等等。JMeter可以基于上述线上业务流量,进一步对被测对象模拟出巨大的录制流量负载,从而通过构造不同压力的录制流量,来测试被测对象的负载能力、以及分析整体性能。
需要说明的是,上述录制流量中可以包含有若干业务请求。例如,上述录制流量可以包含已录制的淘宝系统或天猫系统中上亿级别数量用户的“选择商品加入购物车”操作对应的业务请求。又例如,上述录制流量还可以包含已录制的淘宝系统或天猫系统中上亿级别数量用户的“购买商品”操作对应的业务请求。再例如,上述录制流量还可以包含已录制的支付宝系统中上亿级别数量用户的“转账”操作对应的业务请求。
为了理解方便,这里先介绍下“依赖关系”的含义,通常生产环境中的业务系统(例如为支付宝后台系统),当接收到业务应用(例如为支付宝APP)触发的对应第N个业务请求时,会获取该第N个业务请求的数据D1;通常会为该第N个业务请求根据预设规则随机生成对应的业务会话数据D2,并将该业务会话数据D1以及与该业务请求对应业务返回数据D3,作为该第N个业务请求对应的回应请求返回给该业务应用;进一步地,当该业务系统接收到该业务应用继续触发的对应第N+1个业务请求时,则该第N+1个业务请求可能会依赖该第N个业务请求中的数据D1和或该第N个业务请求对应的数据D1和或数据D2;由上可见,则该第N+1个业务请求与该第N个业务请求存在依赖关系。
因此,当上述流量发起方对包含存在上述依赖关系业务请求的上述录制流量执行回放时,由于上述录制流量中的业务请求存在依赖关系,则需要上述流量发起方保持该业务请求之间的回放顺序,而以上遵循上述依赖关系执行上述录制流量回放的过程,也被简称为“有状态回放”。而通常现有技术方案的流量回放是“无状态回放”,“无状态回放”,是指与上述“有状态回放”相对的情况,也即针对上述录制流量中的业务请求执行回放时,无法保证上述录制流量中的业务请求请求之间的回放顺序。
在本说明书中,当上述流量发起方计算确定上述录制流量中的各业务请求之间的依赖关系之前,需要先对上述录制流量中的各业务请求执行相关的协议解析的预处理操作。
在实现时,上述流量发起方针对上述录制流量中的业务请求,可以基于对应的协议解析工具或对应协议的编程实现,对该业务请求执行对应协议解析,从而获得协议解析后的业务参数,并以key-value键值对键值对的形式保存提取到的业务参数。
例如:上述录制流量可能包括针对PC端或支持H5设备端的http协议的业务请求进行录制获得的流量,上述录制流量可能还包括针对支持mmtp(Mayi Mobile TransportProtocol,蚂蚁移动传输协议)协议的移动终端的业务请求进行录制获得的流量。上述流量发起方可以基于http协议以及mmtp协议的编程实现或者利用对应已有的协议解析工具,对上述录制流量中业务请求执行对应业务协议解析,从而获得协议解析后的业务参数,并以key-value键值对键值对的形式保存该业务参数。
需要说明的是,当针对上述录制流量中各业务请求执行对应协议解析时,可以基于软件或硬件方式实现,在本说明书中不作具体限定。
在本说明书中,上述关键参数是指,在获得协议解析后的业务参数中的重要参数。
在实现时,在获得上述录制流量中各业务请求的协议解析后的业务参数后,由于协议解析获得的业务参数的个数较多,如果对所有业务参数执行依赖关系计算,则计算量会比较大。由此,需要在该业务参数中,选取重要的参数作为该业务参数对应的业务请求的关键参数作为依赖关系的计算依据。
在本说明书中,在获得上述录制流量后,上述流量发起方确定上述录制流量中的各业务请求之间的依赖关系。
在示出的一种实施方式中,上述流量发起方提取上述录制流量中的各业务请求所包含的上述关键参数,并以key-value键值对键值对的形式保存提取到的上述关键参数。
例如,上述关键参数可以是通过queryString(http协议的一种查询方法)从支持http协议的业务请求中获得的一个或多个参数;上述流量发起方提取上述录制流量中的各业务请求所包含的上述关键参数,并以key-value键值对键值对的形式保存提取到的上述关键参数,也即,该业务请求的关键参数可以被保存为:用户名(key)及其值(value)、用户(key)及其值(value)、业务类型(key)及其值(value)、操作时间(key)及其值(value)。
假定上述录制流量中的业务请求包括a请求、b请求、c请求;其中,对a请求、b请求以及c请求按上述关键参数(比如为id、type、time、name)提取后,a请求、b请求以及c请求分别对应的上述关键参数的key-value键值对,请参见表1所示例:
表1
如表1所示的等式左侧的id、type、time、name为关键参数对应key-value键值对的key,如表1所示的等式右侧的与id、type、time、name对应的值为关键参数对应key-value键值对的value。
当然在实现时,在获取上述业务请求以及对应上述关键参数的key-value键值对后,还可以对应上述关键参数,按白名单进一步筛选上述关键参数。
例如,针对关键参数的白名单包括参数id、type,在表1的基础上,则经该白名单进一步筛选后的上述关键参数的key-value键值对,请参见表2所示例:
表2
在本说明书中,在上述录制流量中的各业务请求所包含的关键参数提取及保存后,上述流量发起方将各业务请求中包含的关键参数的value值分别进行匹配。
例如,在实现时,上述流量发起方可以基于可执行的标准指令,针对各业务请求中包含的关键参数的value值分别进行匹配,获得该标准指令对应匹配的结果。
在本说明书中,进一步地,上述流量发起方基于上述匹配的结果确定上述录制流量中的业务请求之间的依赖关系。
在示出的一种实施方式中,上述流量发起方将各业务请求中包含的关键参数的value值相同的多个业务请求确定为具有依赖关系的业务请求。
在实现时,针对录制流量中各业务请求中对应的上述关键参数,上述流量发起方将各业务请求中包含的上述关键参数的value值分别进行匹配,将关键参数的相同key分别对应的value相等的业务请求,作为具有依赖关系的业务请求;
例如,基于表2所示的各业务请求中对应的上述关键参数的value值分别进行匹配,上述流量发起方将关键参数的相同key(比如:id)分别对应的value相等的业务请求,作为具有依赖关系的业务请求,可以确定a请求对应id的value与c请求对应id的value相等,由此确定匹配的结果为:a请求、c请求为具有依赖关系的业务请求。
又例如,上述流量发起方也可以将关键参数的相同key(比如:type)分别对应的value相等的业务请求,作为具有依赖关系的业务请求,可以确定b请求对应type值(关键参数)与d请求对应type值(关键参数)相等,由此确定匹配的结果为:业务请求为b请求、d请求为具有依赖关系的业务请求。
当然,除了将上述录制流量中各业务请求中包含的关键参数的value值相同的匹配规则外,还可以有其它的匹配规则,在本说明书中,不作具体限定。
在本说明书中,在确定上述录制流量中的各业务请求之间的依赖关系后,上述流量发起方基于上述依赖关系将上述录制流量中的业务请求划分为若干个流量分组。
接着以上示例继续举例,上述流量发起方将a请求、c请求保存为同一流量分组A中;上述流量发起方将b请求、d请求保存为同一流量分组B中,也即上述若干个流量分组可以包括流量分组A与流量分组B;其中,流量分组A与流量分组B是不同的流量分组。
当然,上述若干个流量分组的个数可以是百万、千万,亿、乃至十亿级别或更多;由此,由于上述若干个流量分组可以模拟海量用户及其对应业务行为。
在本说明书中,在基于上述依赖关系将上述录制流量中的业务请求划分为若干个流量分组后,上述流量发起方针对上述若干个流量分组中的业务请求分别执行流量回放。
在示出的一种实施方式中,上述流量发起方,按照上述若干流量分组中的业务请求的请求顺序,从若干上述流量分组中读取业务请求,并将读取到的业务请求发送至与上述流量接收方进行业务处理;
在实现时,上述流量发起方可以同时启动若干线程,分别按照上述若干流量分组中的业务请求的请求顺序,从若干上述流量分组中读取业务请求,并将读取到的业务请求发送至与上述流量接收方进行业务处理。
接着以上示例继续举例,上述若干个流量分组可以包括流量分组A与流量分组B,上述流量发起方启动2个线程,按照流量分组中的业务请求的请求顺序,分别从流量分组A及流量分组B中,读取流量分组A及流量分组中的业务请求;其中,针对流量分组A先读取a请求,再读取c请求;针对流量分组B先读取b请求,再读取d请求;在上述2个线程分别将从流量分组A及流量分组B中读取到的业务请求发送至与上述流量接收方进行业务处理。
在本说明书中,进一步地,在将读取到的上述若干流量分组中的业务请求发送至上述流量接收方后,上述流量接收方对上述业务请求进行对应业务处理,获得针对上述业务请求的业务处理结果。
接着以上示例继续举例,针对流量分组A,上述流量接收方先接收到a请求,对a请求进行对应业务处理,获得针对a请求的业务处理结果a;上述流量接收方再接收到c请求,对c请求进行对应业务处理,获得针对c请求的业务处理结果c。针对流量分组B,上述流量接收方先接收到b请求,对b请求进行对应业务处理,获得针对b请求的业务处理结果b;上述流量接收方再接收到d请求,对d请求进行对应业务处理,获得针对d请求的业务处理结果d。
在本说明书中,进一步地,上述流量接收方将上述业务请求的业务处理结果,发送给上述流量发送方。
接着以上示例继续举例,针对流量分组A,上述流量接收方在完成针对a请求的业务处理结果a后,将业务处理结果a发送给上述流量发送方;接着,上述流量接收方在完成针对c请求的业务处理结果c后,将业务处理结果c发送给上述流量发送方。针对流量分组B,上述流量接收方在完成针对b请求的业务处理结果b后,将业务处理结果b发送给上述流量发送方;接着,上述流量接收方在完成针对d请求的业务处理结果d后,将业务处理结果d发送给上述流量发送方。
在本说明书中,进一步地,上述流量发送方获取上述业务请求的业务处理结果,基于上述业务处理结果中的上述关键参数的value值,对上述业务请求的下一业务请求中的关键参数的value值进行替换后,将上述下一业务请求发送至与所述流量发起方对接的流量接收方进行业务处理,直到若干流量分组中的所有业务请求由上述流量接收方业务处理完成。
接着以上示例继续举例,针对流量分组A,上述流量发送方在获取业务处理结果a后,基于业务处理结果a中的上述关键参数(比如:id)的value值(比如:id的value为1231),对业务请求a的下一业务请求(业务请求c)中的关键参数(比如:id)的value值(如表2所示,id的value原来为123)进行替换为1231,再将下一业务请求(业务请求c),发送至与上述流量接收方进行业务处理;接着,上述流量接收方在完成针对关键参数的value值进行替换后的c请求的业务处理结果c后,将业务处理结果c发送给上述流量发送方;上述流量发送方,按照流量分组A中的业务请求的请求顺序,按上述示例步骤执行,直到流量分组A中的所有业务请求都由上述流量接收方业务处理完成及返回对应业务处理结果。针对流量分组B,同理以上示例过程,这里不再赘述。
需要说明的是,在针对同一分组流量中的业务请求对应业务处理结果中的关键参数的value值,对该业务请求的下一业务请求中的关键参数的value值进行替换的替换规则,还可以有多种方式,在本说明书中不做具体限定。
在以上技术方案,基于录制流量中的各业务请求之间的依赖关系,将录制流量划分为若干流量分组,针对若干流量分组中的业务请求分别执行流量回放;从而实现了有状态的流量模拟及回放,提高了测试效率,降低了人力成本和系统开销。
与上述方法实施例相对应,本申请还提供了流量回放装置的实施例。
与上述方法实施例相对应,本说明书还提供了一种流量回放装置的实施例。本说明书的流量回放装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书的流量回放装置所在电子设备的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
图4是本说明书一示例性实施例示出的一种流量回放装置的框图。
请参考图4,所述流量回放装置40可以应用在前述图3所示的电子设备中,所述装置应用于流量发起方,包括:
录制模块401,对线上业务流量执行录制,获得录制流量;
计算模块402,确定所述录制流量中的各业务请求之间的依赖关系,并基于所述依赖关系将所述录制流量中的业务请求划分为若干个流量分组;
回放模块403,针对所述若干个流量分组中的业务请求分别执行流量回放。
在本实施例中,所述计算模块402进一步:
提取所述录制流量中的各业务请求所包含的关键参数,并以key-value键值对键值对的形式保存提取到的关键参数;
将各业务请求中包含的关键参数的value值分别进行匹配;
基于所述匹配的结果确定所述录制流量中的业务请求之间的依赖关系。
在本实施例中,所述计算模块402进一步:
将各业务请求中包含的关键参数的value值相同的多个业务请求确定为具有依赖关系的业务请求。
在本实施例中,所述回放模块403进一步:
按照所述若干流量分组中的业务请求的请求顺序,从若干所述流量分组中读取业务请求,并将读取到的业务请求发送至与所述流量发起方对接的流量接收方进行业务处理;
获取所述业务请求的业务处理结果,基于所述业务处理结果中的所述关键参数的value值,对所述业务请求的下一业务请求中的关键参数的value值进行替换后,将所述下一业务请求发送至与所述流量发起方对接的流量接收方进行业务处理,直到所述若干流量分组中的所有业务请求由所述流量接收方业务处理完成。
在本实施例中,所述流量发起方为分布式的测试系统。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的装置、装置、模块或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
与上述方法实施例相对应,本说明书还提供了一种电子设备的实施例。所述电子设备可以应用于流量发起方;该电子设备包括:处理器以及用于存储机器可执行指令的存储器;其中,处理器和存储器通常通过内部总线相互连接。在其他可能的实现方式中,所述设备还可能包括外部接口,以能够与其他设备或者部件进行通信。
在本实施例中,通过读取并执行所述存储器存储的与流量回放的控制逻辑对应的机器可执行指令,所述处理器被促使:
对线上业务流量执行录制,获得录制流量;
确定所述录制流量中的各业务请求之间的依赖关系,并基于所述依赖关系将所述录制流量中的业务请求划分为若干个流量分组;
针对所述若干个流量分组中的业务请求分别执行流量回放。
在本实施例中,通过读取并执行所述存储器存储的与流量回放的控制逻辑对应的机器可执行指令,所述处理器被促使:
提取所述录制流量中的各业务请求所包含的关键参数,并以key-value键值对键值对的形式保存提取到的关键参数;
将各业务请求中包含的关键参数的value值分别进行匹配;
基于所述匹配的结果确定所述录制流量中的业务请求之间的依赖关系。
在本实施例中,通过读取并执行所述存储器存储的与流量回放的控制逻辑对应的机器可执行指令,所述处理器被促使:
将各业务请求中包含的关键参数的value值相同的多个业务请求确定为具有依赖关系的业务请求。
在本实施例中,通过读取并执行所述存储器存储的与流量回放的控制逻辑对应的机器可执行指令,所述处理器被促使:
按照所述若干流量分组中的业务请求的请求顺序,从若干所述流量分组中读取业务请求,并将读取到的业务请求发送至与所述流量发起方对接的流量接收方进行业务处理;
获取所述业务请求的业务处理结果,基于所述业务处理结果中的所述关键参数的value值,对所述业务请求的下一业务请求中的关键参数的value值进行替换后,将所述下一业务请求发送至与所述流量发起方对接的流量接收方进行业务处理,直到所述若干流量分组中的所有业务请求由所述流量接收方业务处理完成。
在本实施例中,所述流量发起方为分布式的测试系统。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。