中国畜禽寄生虫查询系统与开放接口的建立

2018-03-26 03:04杨志远朱顺海赵其平谢雨翔徐帅兵崔晓霞韩红玉
动物医学进展 2018年2期
关键词:寄生虫畜禽服务器

杨志远,朱顺海,赵其平,唐 敏,谢雨翔,徐帅兵,崔晓霞,董 辉,韩红玉,黄 兵,3*

(1.上海师范大学生命与环境科学学院,上海 200234;2.中国农业科学院上海兽医研究所/农业部动物寄生虫学重点实验室,上海 200241;3.江苏省动物重要疫病与人兽共患病防控协同创新中心,江苏扬州 225009)

随着信息技术的发展,科研、医疗工作者获取知识的途径更多地依赖于计算机,相应地诞生出一些专业化的信息服务软件和网站,如GenBank[1]、EMNL[2]、PDB[3]等生物信息学数据库,是负责用于收录和查询生物基因、基因组和蛋白质等生物信息学数据。维基物种[4]是一个免费的物种分类网站,其中包含了大部分寄生虫物种,为分类学家和相关工作者提供了物种查询服务。在国内,“中国动物主题数据库”[5]、“中国物种网”[6]、“中国植物志网站”[7]提供了动植物物种的查询。在我国寄生虫领域中,“畜禽寄生蠕虫形态学分类检索系统”[8]、“中国畜禽寄生虫分类鉴定专家系统”[10]和“禽类寄生虫计算机识别系统”[9]等,是基于本地数据库进行数据查询,陈自强等[11]利用ASP语言编程、Access作为寄生虫资料数据库实现了医学寄生虫资料的网上搜索,沈海默等[12]基于J2EE平台开发了“寄生虫虫种资源信息管理系统”等,这些系统的研发为寄生虫查询、鉴定等提供了有效的工具。

基于规则的专家系统中的规则都是专家们讨论总结出来的,因此,系统判断的精确度主要取决于专家的水平,而许多情况下没有真正的专家存在[13]。而且,其前项限制条件较多,规则库复杂,在某些情况下,例如对规则中数字属性值的确定,则需要大量样本以及复杂的运算,在系统知识整理和收集方面,会耗费大量的人力和精力,而且虫种的形态多样性和复杂性,要想穷尽这些信息建立规则,十分困难。

对于形状这类的长文本的数据,使用数据库的模糊查询开发是比较棘手的,需要进行关键字的匹配、长度计算等等,而全文检索可以解决这个问题。全文检索[14]是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。通过使用者输入的形状词汇,搜索引擎进行词汇频率、词汇间距离的计算,得到相应形状匹配的虫种,这样可以很好解决形状信息的知识库建立和查询程序的开发。

我国畜禽寄生虫资源丰富,已记载的畜禽寄生虫种类已达2 300多种,先后出版了《中国家畜家禽寄生虫名录》[15]、《中国畜禽寄生虫形态分类图谱》[6]、《中国家畜家禽寄生虫名录(第二版)》[17]、《中国畜禽线虫形态分类彩色图谱》[18],还将陆继出版相关寄生虫的形态分类彩色图谱。为实现这些专著所含信息的快速查询,本研究使用Java语言开发了中国畜禽寄生虫虫种查询系统,旨在为兽医工作者和相关科技人员,提供一个数据全面、查询功能丰富的信息查询平台。基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用。对外提供的API调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值[19],因此在本系统的基础上开发相应的查询接口,提供给其他平台使用是十分必要的。

1 系统总体设计

1.1 系统总体描述

本系统除了满足本系统使用者的查询需求外,本系统所开放的查询接口,未来也有可能供各单位所开发的系统所使用,随之可能带来的问题是,系统可能会面对大量用户的高并发的访问,因此在设计之初,将本系统所设计的功能进行拆分,归类成4个独立的系统,即前台系统、搜索系统、单点登录系统、管理系统,各个子系统可通过扩展组成集群,来应对高并发访问带来的问题。

各个子系统架构采用J2EE三层开发体系架构,使用SpringMVC+Spring+MyBatis的技术框架。

从系统整体框架设计上,需要重点达到以下四个要求:

1.1.1 性能 保持系统在正常和预估的压力下稳定运行。

1.1.2 扩展性 满足“低耦合、高内聚”的要求,各个子系统可独立进行扩展,不影响其他子系统。

1.1.3 安全性 抵御日常攻击,能够满足当下和未来几年的安全需求。

1.1.4 伸缩性 面对高并发的访问情况,系统能够构建集群。

1.2 系统功能流程

系统功能流程图见图1。各系统功能说明如下:

1.2.1 前台系统 负责用户页面的请求处理、用户注册与登录相关信息的校验。

1.2.2 查询系统 处理用户的查询请求、虫种信息的传送。

1.2.3 管理系统 处理本系统管理员操作,包括虫种管理、用户管理、管理员管理。

1.2.4 单点登录系统 处理web系统发来的用户注册与登录请求、用户身份识别、管理员添加与登录请求、管理员身份识别。

1.3 系统架构设计

整个系统的架构图见图2,各个子系统通过内网进行通信。单点登录系统、Redis、MySQL、Solr这些服务所在的服务器,其防火墙设置为只允许相应的子系统所在的服务器进行通信,这样可以有效的隔绝外部的攻击。前台系统、搜索系统、管理系统由于需要对外进行提供服务,所以其所在的服务器防火墙没有进行设置。对于DDOS这类的攻击,阿里云在其服务器上提供DDoS基础防护[20]可以抵御这类攻击。

纵观整个架构设计,各个子系统分别负责不同业务,这样便于后续系统进行业务上扩展和弹性伸缩。搜索系统的目的是为了虫种查询所服务的,在设计上没有存储用户的会话信息,因此当该系统出现访问量大的情况时,可以通过集群的方式增加服务器来解决这个问题。此外,MySQL服务器和Solr服务器如果存在上述的问题,MySQL服务也可以通过集群、读写分离来解决这个问题,Solr服务可以通过SolrColud搭建集群[21]的方式解决这个问题。不过,就本系统的用户群而言(用户数量少),不存在上述问题,所以为了节约服务器的开销成本,这里没有实现其高可用架构。

前台系统的功能比较繁杂,除了负责页面的请求响应外,还涉及到用户相关的操作程序。在分布式网站开发中,为了实现高内聚、低耦合这一目的,应该将不同的功能和服务分割开来[22],这样才能提高网站的并发处理能力和功能扩展能力,但就本系统而言,功能单一、用户群少,为了节约开发、部署成本,这里没有将用户系统、前台系统分割开,而是放在了一起。对于用户的会话信息,都存储Redis中,因此前台系统也可以通过集群解决高并发访问带来的问题。

图1 系统功能流程图

图2 系统架构图

2 各子系统设计

2.1 搜索系统设计

虫种的信息中,对于虫种形状描述的信息,是比较繁多的,多则超过2 000个中文字符,而且对于形状描述的信息,每一种虫种在描述格式上都有着差异,通过关系型数据库的模糊查询,解决这样长字符串的匹配是比较棘手的。用户输入的关键词信息,可能在数据库中都没有一对一的匹配的内容,导致在程序上缩小了查询的范围。因此本系统对形状这类信息的查询,采用了全文检索的方式,利用基于Lucene的Solr负责管理虫种形状数据。

在Solr服务器中,除了对虫种形态、名称、ID信息进行了存储外,其余的描述信息都没有存储,这是为了减少Solr服务的冗余,提高其查询效率,因为将这些多余的信息进行存储,会消耗掉索引擎的存储空间,带来不必要的开销。

用户查询虫种的流程见图3。如果请求中不涉及虫种形状数据的查询,客户端会发起searchSql请求,直接查询MySQL数据库;如果只查询虫种形状数据的查询,则会发起searchSolr的请求,先去带上形状数据作为查询条件,查询Solr服务器获取符合条件的虫种ID和加上高亮显示文本信息,再使用虫种ID向MySQL数据库查询这些虫种的详细信息;如果查询条件包括虫种形状数据和非形状数据,客户端会发起searchSqlAndSolr请求,查询系统先将非形状数据做为条件去MySQL数据库中查询,获取符合条件的虫种ID,然后将虫种ID和形状数据作为条件去Solr服务器中查询,分页也是在这一步,通过加上分页条件进行。

在虫种访问以及用户的查询行为的记录上,如果采用关系型数据库来存储,在表的设计上可能较为繁琐,程序开发上,可能较为复杂。所以,在本系统中,对于这些行为的记录,使用Redis来存储,该键值对数据库提供的数据类型及其相应的数据操作,能够很好的满足开发需求[23],只需几行代码就能解决,并且不再需要考虑关系型数据库中表的设计,只需选择合理的数据类型使用即可。

图4是使用散列类型来存储虫种地区访问记录,虫种ID作为key值;使用列表类型存储用户访问记录,用户ID作为key值;使用有序集合类型存储所有虫种的访问量,key值为“visit”。

图3 用户查询虫种的流程图

图4 访问记录数据结构设计图

2.2 前台系统设计

前台系统使用到了jQuery框架、Vue.js框架、Bootstrap框架、Echarts图表库,在校验方面使用了武汉极意网络有限公司的“极验验证”技术[24]。

页面在布局和样式上全部采用了Bootstrap框架提供的功能,使其能够兼容PC端和移动端[25],同时能够节约页面上的成本。

如图5左所示,顶部是导航和用户注册登录表单,中部是查询系统的入口和相关介绍的链接,底部是本站的信息。图5右是移动端页面展示的截图,从移动端体验上来看,页面的交互功能、布局都是比较友好的。

在查询页面前后台交互上,使用了目前较为流行的Vue.js框架[26],前后台数据进行了彻底地分离,客户端通过发起对服务器的Ajax请求,服务器通过传输json文件到客户端,客户端对json文件进行解析,通过Vue.js完成页面的渲染。图6介绍了整个客户端程序与服务器程序交互的流程。

图5 系统主界面

图6 客户端和服务器通信过程

2.3 管理系统设计

管理系统的处理流程见图7。在本系统中,管理员分为超级管理员和普通管理员两类账户,为了简化设计与程序开发,这里没有使用基于角色的访问控制[27];为了防止滥用超级管理员这个账户,这里赋予超级管理员权限只有管理员管理模块,普通管理员除了没有管理员管理模块的权限外,其他的权限都有。在图片访问方面,使用了这个处理静态资源较为出众的Nginx服务器,而不是直接存储在本地磁盘中,因为Nginx能够支持一些常用的图片处理功能[28],并且当服务器中图片到达一定规模需要扩展时,通过Nginx的反向代理能够很容易的解决这一问题[29]。

在权限控制方面,使用了SpringMVC的拦截器[30],通过对请求资源的路径进行拦截,如果请求的对方身份是与资源所属者相同,则放行此次请求,否则返回没有权限的响应。在虫种管理中,除了有虫种的增删改查基本功能外,还增加了批量更新模块。批量更新功能是在大规模数据更新的情况下使用。图片处理模块中流程包括生成带有水印的图片以及匹配数据库中相应的虫种。

3 系统使用介绍

限于篇幅和网站安全性的原因,这里只介绍系统的查询功能。图8是搜索系统中简单查询功能,用户可选择所查询的类型,包括中文名称、拉丁文名称、地理分布、寄生动物、寄生部位、形态描述,然后在输入框中输入要查询的信息。例如图中选择的是中文名称,输入的是吸虫,点击查询后,会将查询结果显示在查询列表中。

图7 管理系统的处理流程图

图8 简单查询功能

图9是搜索系统中高级查询功能,该查询是多个类型条件组合在一块,完成对虫种的查询。图中的查询中文名称为“吸虫”,形态描述为“口吸盘为椭圆”,在查询结果列表中,虫种的名称都包含吸虫,在形态描述上,包含“口吸盘”、“椭圆”并且这2个关键词位置距离较近的结果都在前排显示(形态描述信息表达为口吸盘是椭圆的结果),而那些关键词距离较远(形态描述表达为口吸盘不是椭圆,而是其他部位是椭圆的结果)或者含有部分关键词的结果排名会靠后显示。

图10是虫种详情页面虫种详细部分,该部分显示了鲁氏杯叶吸虫的所属信息、基本信息、形态特征这些信息。图11是虫种详情页面中的地理分布图(右侧)和访问分布情况图(左侧),地图使用Echarts图表库中的地图[31],访问分布情况图中的蓝色区域表示该地区有用户访问过,颜色的深浅度表示访问的频次高低,如图11,当鼠标进入新疆区域时,会显示新疆有多少次的访问,图中显示的5次访问。通过对地理分布和访问分布的对比,可以为使用者预测出该虫种的大致流行情况。

图9 高级查询功能

图10 虫种详细信息(以鲁氏杯叶吸虫为例)

图11 用户访问分布图(左图)和地理分布图(右图)(以鲁氏杯叶吸虫为例)

4 开放接口

在系统的资源开放方面,这里只是对系统的查询功能和虫种详细信息的获取进行了开放,对于虫种的修改和增删这类功能,考虑到安全性和使用频次低等因素,没有进行开放,因此本系统的开放接口主要来源于搜索系统。

在搜索系统的设计上,这里没有单独地设计一系列对外开放的查询接口,而是将本系统所需的查询接口对外暴露出来,这样既可以对外提供一系列的查询接口,又可以为自己系统本身服务,起到了一个复用的作用,两者的区别在于请求所需的参数会有所不同。开放接口的具体使用说明,可在中国畜禽寄生虫查询网查看[32]。

查询请求返回数据包括了虫种所有的详细数据,对此设计的考虑是,因为不知道第三方调用者所需的数据有哪些,所以这里把虫种所有数据都传输过去,这样第三方使用者能够灵活的使用本系统提供的数据,同时也不用开发过多的查询请求来适配不同使用者的需求。

5 讨论

本系统使用Java语言开发,在系统的设计上,按照功能将系统拆分为4个子系统,使得系统在扩展性、性能、安全性和伸缩性等方面[33]能够满足当下需求。在各系统通信上,为了简化开发,这里使用了HTTP协议,可能在通信的效率上会有点折扣,但目前各个子系统通信是基于私有地址,在内部网络中进行通信,因此对于这种小规模的应用场景,还是能够应付。

在查询系统上,由于精力和时间有限,没有对专业性的词汇进行提取,来补充全文检索中所使用到的词库[34],在Solr的查询方面没能够进行细致的开放,使得形态数据查询精确度没能够达到预期水平。

在前台系统上,对于是否加入用户模块,这是有争议的,因为本系统目的仅仅是用来查询,而对于用户相关操作,暂时还没规划好。是否向用户放开修改虫种的权限,这可能会带来系统安全性的考虑及其他一系列的问题,随之也需要开发程序以解决这些问题。用户修改虫种的意愿是否强烈?用户的水平是怎样的……。从另外一个角度来看,在管理系统中,可以多添加管理员账户,让这些有意愿的用户来参与到虫种信息更新,从而可以解决这个问题。考虑未来会增加用户的功能因素,这里仅仅做了用户注册、登录、重置等功能。

6 结束语

本文通过使用Solr技术,建立了搜索系统的搜索服务器,解决了虫种形态信息查询的难题,并通过记录用户访问信息作为虫种访问地理分布的信息,能够实时动态监测和发现虫种热点地区。在系统页面开发上,使用了当下流行的Bootstrap、Vue.js前端开发技术,解决移动端和PC端的兼容性和提高页面开发效率。将搜索系统、前台系统、单点登录系统、管理系统整合起来,构建了在线版中国畜禽寄生虫查询系统(中国畜禽寄生虫查询网),为用户提供了有效、查询功能多样化的寄生虫查询工具。将搜索系统查询功能通过基于HTTP的查询接口方式对外提供,使得第三方科研单位能够在本系统提供资源的基础上进行开发,同时能够促进本系统访问记录数据的增长,为寄生虫流行病学提供参考依据。

[1] NCBI.GenBank[EB/OL].[2016-04-22].https://www.ncbi.nlm.nih.gov/genbank/.

[2] EBI.EMNL[EB/OL].http://www.ebi.ac.uk/. 2016-04-22.

[3] National Science Foundation. PDB.[2016-04-22].http://www.rcsb.org/pdb/home/home.do.

[4] 维基百科.维基物种[EB/OL].[2016-04-22].https://species.wikimedia.org/wiki/Main_Page.

[5] 中国科学院动物研究所.中国动物主题数据库[EB/OL].[2016-04-22].http://www.zoology.csdb.cn/.

[6] 中国物种网.中国物种网首页[EB/OL].[2016-04-22].http://www.sppchina.com/.

[7] 中国科学院植物研究所.中国植物志网站[EB/OL].[2016-04-22].http://frps.eflora.cn/.

[8] 杨学云,王开胜,姜悦平.畜禽寄生蠕虫形态学分类检索系统的建立及其应用[J].中国农学通报,2004,20(1):116-118.

[9] 周 杰,黄 兵.中国畜禽寄生虫分类鉴定专家系统研究[J].科学研究月刊,2007(4):47-51.

[10] 陈进会,蒋智钢.禽类寄生虫计算机识别系统[J].检验检疫科学,2008,18(1):30-32.

[11] 陈自强,贾 雍,彭鸿娟,等.医学寄生虫网络资料数据库的建立[J].第一军医大学学报,2003,23(1):50-52.

[12] 沈海默,胡 薇,陈韶红,等.基于J2EE平台的寄生虫虫种资源库的构建[J].中国兽医寄生虫病,2007,15(1):8-12.

[13] 张煜东,吴乐南,王水花.专家系统发展综述[J].计算机工程与应用,2010(19):43-47.

[14] 陈 立.全文检索引擎的设计研究[J].现代情报,2007(10):223-225.

[15] 沈 杰,黄 兵,廖党金,等.中国家畜家禽寄生虫名录[M].北京:中国农业科学技术出版社,2004:6-191.

[16] 黄 兵,沈 杰,董 辉,等.中国畜禽寄生虫形态分类图谱[M].北京:中国农业科学技术出版社,2006:3-617.

[17] 黄 兵,董 辉,韩红玉.中国家畜家禽寄生虫名录[M].2版北京:中国农业科学技术出版社,2014:6-217.

[18] 廖党金,黄 兵,叶勇刚,等.中国畜禽线虫形态分类彩色图谱[M].北京:科学出版社,2016:2-601.

[19] 李智慧.大型网站技术架构核心原理与案列分析[M].北京:电子工业出版社,2013:132-133.

[20] 阿里云.DDoS基础防护简介[EB/OL].[2017-01-19].https://help.aliyun.com/document_detail/28399.html?spm=5176.doc28408.6.539.1Jn83f.

[21] Apache.SolrCloud[EB/OL].[2017-01-19].https://cwiki.apache.org/confluence/display/solr/SolrCloud.

[22] 李智慧.大型网站技术架构核心原理与案列分析[M].北京:电子工业出版社,2013:18-19.

[23] 李子骅.Redis入门指南[M].2版.北京:人民邮电出版社,2015:2-5.

[24] 极验验证.极验验证特性[EB/OL].[2017-01-16].http://www.geetest.com/feature.

[25] Bootstrap官网.Bootstrap介绍[EB/OL].[2017-01-16].http://getbootstrap.com/.

[26] 张耀春,黄 轶,王 静,等.Vue.js权威指南[M].北京:电子工业出版社,2016:4-10.

[27] 吴翰清.白帽子讲Web安全[M].北京:电子工业出版社,2014:208-211.

[28] 陶利军.决战Nginx[M].北京:清华大学出版社,2012:266-268.

[29] 苗 泽.Nginx高性能Web服务器详解[M]北京:电子工业出版社,2013.:105-119.

[30] Iteye.SpringMVC中使用Interceptor拦截器[EB/OL].[2017-01-16].http://elim.iteye.com/blog/1750680.

[31] 百度.Echarts地图使用文档[EB/OL].[2017-01-16].http://echarts.baidu.com/echarts2/doc/doc.html#Map.

[32] 中国畜禽寄生虫网.接口使用指南[EB/OL].[2017-01-16].http://www.animal-parasite.cn/index/interfaceIntro.html.

[33] 李智慧.大型网站技术架构核心原理与案列分析[M].北京:电子工业出版社,2013:26-31.

[34] 罗 刚.解密搜索引擎实战:Lucene&Java精华版[M].2版.北京:电子工业出版社.2014:159-162.

猜你喜欢
寄生虫畜禽服务器
海洋中“最难缠”的寄生虫:藤壶
畜禽夏季喂野菜 防病快长真不赖
菌株出马让畜禽污染物变废为宝
夏季养畜禽 驱蚊有妙招
白话寄生虫
《热带病与寄生虫学》杂志稿约
通信控制服务器(CCS)维护终端的设计与实现
中国服务器市场份额出炉
得形忘意的服务器标准
多胚蛋白酶 高效养畜禽