此模板描述了传入的参数和最后生成的URL的映射关系,即将参数中building和room145 的值替换模板中相应的值,最终生成的URL即为需要访问的URL。表 1详细地描述了几种经常使用的模板。 表1 资源模板举例 Tab. 1 The examples of resource template 参数 数据源 资源模板 资源描述 意义 class:1, id: 10 Web数据 http://xxx_school/{class}/{id} http://xxx_school/1/10 在1班编号为10的学生信息 filename: data.txt 本地文件 /home/user/{filename } /home/user/data.txt 存在路径为/home/usr/data.txt位置的文件内容 age: 17 数据库 SELECT * FROM student WHERE age={age} SELECT * FROM student WHERE age=17 获取age为17的所有学生信息 用Key与Parameters来标识资源的作用是,它使得不同数据源的操作得到了统一,上150 层组件只要根据规则传入相应的key和Parameters,就能得到最终的数据。另外,key和parameters的形式可以唯一表示一个资源,同时也为其他通用的数据服务提供了条件。 3.2 数据编解码以及数据格式的屏蔽 编码器和解码器为数据中间件提供了编解码的功能。 在一个数据请求中,直接由数据源返回的可能是格式化的信息。比如,HTTP[6]请求返155 回的可能是XML或者JSON文本,或者是通过BASE64编码序列化的二进制信息。这些信息经过进一步处理之后才能直接应用(转化成数据实体)。解码器在用户层中允许上层组件自定义数据的解析方式。之后所得到的数据是解析完毕后的数据实体。 同样,在更新数据的时候,数据源可能会要求一组格式化的数据,如POST请求body中的xml数据。上层组件同样可以通过自定义编码器来实现这一功能。编码器会将传入的数160 据实体转化成格式化的数据(XML,JSON等序列化数据)提交给数据源。 编码器和解码器的工作方式如图4所示。 请求结果解码器数据实体数据实体编码器发送的数据 图4 编码器和解码器的工作方式 Fig. 4 The workflow of encoder and decoder 165 编码器和解码器所带来的好处为,他将数据源的差异在数据组织格式上进一步屏蔽。如,不同的GIS服务可能返回不同格式的数据,但它们实质上为同种服务的不同体现形式。解码器和编码器可以讲其统一化,并给上层组件一个无差异的数据实体。从而可以有效地实现不同服务之间的迁移,提高软件的可替换性。 3.3 缓存服务 170 3.3.1 缓存机制的介绍 严格上来讲,缓存服务不属于中间件的必要组成部分,但是在终端软件环境中,缓存机制广泛存在于各种数据源尤其是基于HTTP的WEB数据源中[7]。另外受限于网络限制和用户体验的需求,经常有数据缓存的需求。本设计将缓存作为中间件的内置服务提供给上层组件,需要缓存服务的组件可以通过配置不同资源的缓存参数来达到数据缓存的目的。 175 图5表示了无缓存和有缓存时中间件的行为。 中间件数据源数据请求者获取数据获取数据返回数据返回数据缓存数据到本地中间件数据请求者获取数据返回数据从本地获取缓存数据本地无缓存本地有缓存 图5 无缓存和有缓存时中间件的行为 Fig. 5 The behavior of middleware when the cache exists and not 180 当缓存数据不可用时(没有缓存或缓存已经过期),中间件会通过DataMapper从数据源中获取数据,并将获取的数据缓存到本地。而当缓存数据可用时,即本地存在未过期的缓存,数据会直接从本地通过缓存引擎获取缓存数据。 无论是数据来自于缓存还是数据源,数据的访问方式对上层模块来讲都是一样的,其逻辑的不同仅仅发生在中间件内部。因此,此设计大大简化了加入缓存后上层模块的逻辑。 185 3.3.2 缓存过期机制 中间件需要一种机制来防止过于陈旧的数据的存在, 对于每一个资源,我们用三个标识表示其缓存的状态,这三个标识是:update_time, expire_time, age。 1) update_time 表示数据更新的时间 ,一般来讲,其会使用数据源提供的数据源更新时间,但是对于190 大多数数据源来讲并没有提供此项信息,此时会用数据获取的时间表示。 2) expire_time 表示资源过期的时间,如果当前时间在缓存expire_time之后,则其会被看做过期数据而被舍弃。 3) age 195 表示自expire_time之后,缓存有效的持续时间。如果当前时间减去缓存的update_time 大于age,则缓存会被当做过期数据被舍弃。 一般来讲,在知道update_time的前提下,只要知道expire_time或者age就可以完全获取缓存的状态,因此expire_time和age可以有一个为空。 采用expire_time和age作为缓存过期的判断标识的原因主要是为了适应不同的场景: 200 对于有效性精确依赖于日期的数据,expire_time可以更好地表示这一状况。比如,对于当天的节目预告信息,会在过了当天之后失效。 对于其他数据,一般用age来表示数据何时失效。 3.3.3 缓存引擎 中间件提供了两个缓存引擎来用于不同类型的缓存存储,他们分别是持久化引擎和内存205 引擎。 1) 内存引擎 内存引擎可以将资源缓存到内存中,内存引擎的优点在于读写速度较快。但是当应用关闭或终端断电后缓存数据会丢失。内存引擎一般会存储一些临时或并不要求长时间缓存的数据。 210 2) 持久化引擎 持久化引擎可以将缓存数据缓存到持久化介质中,其好处是不受应用运行状况和电源的影响,可以长时间保持数据,对于比较静态或者需要长时间保存的数据可以放在持久化引擎中存储。 4 应用实例 215 作为一个中间件形式的数据模块,本设计可以运用到大多数终端软件之中。目前已有很多终端应用使用了本设计并收到了良好的效果。 使用本中间件的一个例子为智能家居的物联网应用,如图6所示。在此应用中,软件需要面对大量不同服务商提供的不同传感器访问接口,如有些接口以REST的WEB服务的形式提供,有的则以Socket的形式提供。不同的数据源的差异给开发带来了很大的困难。本220 文中设计的中间件的使用有效地解决了这一问题,中间件将底层不同传感器接口的差异屏蔽,并向上层模块提供了统一的访问接口。因此,在设计上层模块时,开发者不必关注传感器的差异,只需要专注于业务逻辑的设计,这在很大程度上降低了软件设计的复杂度。 图6 使用数据中间件的物联网智能家居应用 Fig. 6 The smart home application of IoT using terminal middleware 另外中间件中的缓存服务也降低了此应用的性能以及资源开销,通过将相对静态的信息(如设备列表信息等)缓存到本地,应用可以减少同网络交互的次数和数据延迟,增强用户的体验。因为中间件将缓存机制集成到中间件内部,无论数据源有无缓存,都有相同的访问230 方式,因此,缓存的引入不仅带来性能上的提升,同时也没有因为缓存的引入增加了了软件的复杂度。 5 结论 本文设计了一种面向多数据源的终端软件中间件。中间件位于底层数据之上,起到了屏蔽底层数据差异,并向上层提供统一的操作方式的作用。在中间件中,本文探讨了将数据映235 射为资源的方式,并提出了具体的实现。另外,中间件的数据编解码的设计进一步降低了数据源和软件上层逻辑的耦合性,使得软件各个模块可以独立演进。在上面设计的基础上,中间件还提供了缓存的服务,此服务可以对使用了中间件的数据进行缓存,并降低系统的开销。本设计中的中间件可以广泛地运用在各类终端软件中,为终端软件开发提供了良好的数据基础和环境。 240 [参考文献] (References) [1] 鲁帆.移动智能终端发展趋势研究[J].现代传播,2011,(11):139-140. [2] Fielding,R.T. Architectural Styles and the Design of Network-based Software Architectures[D]. Irvine: University of California, 2000. [3] 张小霞.一种基于XML的中间件跨库检索系统[J].现代电子技术,2012,35(8):28-29,32. 245 [4] Huanqin Li, Jinfeng Liu. Research on Heterogeneous Data Exchange based on XML[J]. Physics Procedia, 2012, 25: 1382-1387. [5] Jing Su, Ruoyu Fan, Xin Li. Research and design of heterogeneous data integration middleware based on XML[J]. Intelligent Computing and Intelligent Systems (ICIS), 2010, 2: 850-854, 29-31. [6] R. Fielding, et al, RFC2621. Hypertext Transfer Protocol--HTTP/1.1[S]. Internet Engineering Task Force, June 250 1999. [7] 贺琛,陈肇雄,黄河燕等.Web缓存技术综述[J].小型微型计算机系统,2004,25(5):836-842. 学术论文网Tag:代写硕士论文 代写论文 代写代发论文 代发论文 |