新一代图书馆开放服务平台FOLIO应用实践研究

2020-05-13 14:31叶仁杰吴元业
新世纪图书馆 2020年2期
关键词:微服务

叶仁杰?吴元业

摘 要 FOLIO是一个具有发展前景的新一代图书馆服务平台。本文以深圳大学图书馆对FOLIO的应用实践为例,介绍FOLIO平台架构、核心网关OKAPI架构及运作流程、FOLIO应用程式开发实践,致力于为其他高校图书馆提供相关FOLIO的研究及实践经验。

关键词 图书馆开放平台 FOLIO OKAPI 微服务

分类号 G250.7

DOI 10.16810/j.cnki.1672-514X.2020.02.007

Research on Application Practice of New Generation Library Service Platform FOLIO

Ye Renjie, Wu Yuanye

Abstract FOLIO is a new generation library service platform with development prospect. Taking the application of FOLIO in Shenzhen University Library as an example, this paper introduces the framework of FOLIO platform, the framework and operation process of OKAPI core gateway, and the development practice of FOLIO application program, aiming to provide other university libraries with relevant researching and practical experience of FOLIO.

Keywords Library service platform. FOLIO. OKAPI. Micro-services.

0 引言

随着信息技术在图书馆领域的深化应用,信息化建设的重要性日益凸显。目前,电子资源在馆藏中占据的比例急剧增长,而传统的图书馆集成管理系统往往是基于纸本资源设计的,无法胜任电子资源采集、加工、保存、发现及获取等工作[1]。同时,越来越多的读者通过图书馆外的机构来获取信息,图书馆的纸本书流通率与咨询量越来越低,传统的图书馆集成管理系统无法满足读者的需求和行为方式的变化。图书馆管理系统应重新梳理并整合现有资源及业务,做好读者及图书馆管理人员的需求调研工作,利用好信息技术的发展,以满足读者个性化的阅读需求[2]。再者,传统的图书馆自动化集成系统由于系统结构老化、资源分散、孤岛系统多及升级维护难度高等原因,已无法满足图书馆管理和服务的要求变化,理应升级转型成具备资源管理、流程管理及资源发现功能的新一代图书馆管理系统[3]。平台化转型是新一代图书馆管理系统的发展趋势[4],目前,国内暂无产品化的新一代图书馆服务平台,而供应商开发的产品封闭且单一,无法满足图书馆的复杂业务迭代,且国内图书馆的创新驱动力不足,研发新一代的图书馆开放平台需要大规模的人力、物力投入,因而可从技术架构、产品特点、业务功能等多个方面,对国外产品进行借鉴[5]。

FOLIO是EBSCO公司在2016年推出的开源图书馆服务平台项目,是一个以微服务架构为核心、以应用程式支持传统资源管理功能并扩展到新领域的创新平台。FOLIO具有模块化、灵活性好、可扩展性高及技术先进等特点,项目一经发布就受到国内外图书馆界的关注[6]。本文旨在通过对FOLIO平台应用实践的研究,为FOLIO平台的本地化应用,以及符合国情的新一代图书馆系统的自主研发提供有益经验。

1 FOLIO平台国内外研究与应用实践

FOLIO的建设理念是图书馆和服务供应商共同研究图书馆的未来发展及新技术的应用,以社区协作为导向,自2016年3月份开源LSP(Library Service Platform,图书馆服务平台) 项目以來,已有来自数十个国家的1000多名成员加入FOLIO社区。美国德克萨斯A&M大学图书馆院长David Carlson表示,FOLIO不仅改变了图书馆系统的市场环境,同时也改变了图书馆与供应商之间的关系,是图书馆系统开发的一项非凡创举[7]。目前,芝加哥大学、杜克大学、康奈尔大学等高校图书馆参与FOLIO社区讨论,共同研究新一代图书馆服务平台的发展方向;Index Data公司致力于电子资源模块的研发以及FOLIO架构的设计,为FOLIO平台提供技术支持;Ebsco公司为FOLIO平台的发展提供资金支持,保证项目的有序发展,同时还对项目进行计划指导和推广。此外,还有其他社会组织为FOLIO公司提供技术支持、托管服务、软件开发等,各界组织协作构建FOLIO平台,共同打造一个可持续、开放的生态系统。

在国内,亦有不少高校图书馆开启了对新一代图书馆服务平台的研究及实践。重庆大学图书馆杨新崖等以重庆大学图书馆为实证研究案例,提出平台化转型是新一代图书馆管理系统的发展趋势,其应具备平台化结构、资源整合及新技术应用的基本特征[4]。北京大学图书馆刘素清提出,国外产品的本地化应用实证分析及我国新一代图书馆系统的研发实践探索,是新一代图书馆系统研究的重要方向,新一代的图书馆系统需要图书馆界携手系统提供商、信息技术服务商等多方共同研发[5]。厦门大学图书馆肖铮等对FOLIO平台的系统设计及技术架构进行研究,认为国内图书馆有必要关注FOLIO、尝试搭建并进行实践探索[8-9]。上海图书馆正在搭建基于FOLIO的下一代图书馆服务平台FOLIO项目,并制定了2019、2020的相应开发计划。深圳大学图书馆亦在深入研究FOLIO平台与深大图书馆新一代管理系统的整合,目前已完成FOLIO平台的本地化构建,并与新一代管理系统完成应用对接。CALIS从2017年3月便已开始对FOLIO的架构及核心模块进行研究,目前以FOLIO架构为基础的新一代图书馆服务平台CLSP正在不断发展,并组织成立了CLSP建设联盟。CLSP平台已于2018年10月发布,倡导“大”馆藏下的“大平台”与“大联盟”的建设,力求打造符合国情的开放平台和生态系统[10]。

综上所述,FOLIO是一个具有发展前景的新一代图书馆服務平台。本文以深圳大学图书馆对FOLIO的应用实践为例,介绍FOLIO平台架构、核心网关OKAPI架构及运作流程、FOLIO应用程式开发实践,致力于为其他高校图书馆提供相关FOLIO的研究及实践经验。

2 FOLIO概述

2.1 FOLIO平台简介

FOLIO平台是一个供图书管理员、系统开发人员及供应商协作的开源平台,是一个现代化的技术生态系统,通过开源应用程式建立起可持续的多方协作,从而更有效地管理图书馆资源并创造收益。FOLIO项目旨在促进可持续的、以社区为导向的协作,积极创建现代技术生态系统,使图书馆通过开源应用程序来管理图书馆资源,发挥图书馆价值[6]。

FOLIO平台主要具备3大特性。

(1) 模块化:应用之间的交互快速便捷,用户可以自行选择所需应用,供应方和图书馆都可以开源或收费共享应用。

(2) 灵活性:用户可以自行选择平台的运营方式,满足自己的开发需求。

(3) 扩展性:FOLIO平台可轻易拓展各种应用系统,如校园网、机构库、资源发现等。

2.2 FOLIO平台架构

FOLIO平台架构主要由4部分组成。

(1)UI用户界面层:App的应用界面。

(2)APP应用层:构建、拓展、应用各种应用程序,如流通、编目等图书馆传统服务以及各种个性化应用。

(3)OKAPI网关层:FOLIO的核心网关,管理和运行微服务。

(4) 系统层:实现各种基础业务逻辑,包括数据库配置、数据存储、索引、日志、租户管理等。

2.3 核心微服务网关OKAPI架构及运作分析

微服务架构是一项在云中部署应用和服务的新技术,是一种将单体应用程序作为小型服务开发的方法,每个单体应用程式都可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”[11]。

OKAPI是FOLIO管理和运行微服务的网关,其核心为API网关模式,由OKAPI代理服务实现,核心职责为身份验证、监控、负载平衡、缓存、请求整形和管理及静态响应处理。OKAPI通过提供具体的Web服务端点和请求处理的详细信息,处理请求和响应实体、状态代码、错误条件等[12]。OKAPI的架构如图1所示,其核心是3大服务。

(1) 代理服务 (Proxy Service):管理模块信息、租户信息、接口与租户之间的关系信息并请求转发。

(2) 发现服务(Discovery Service):管理模块注册及启动信息。

(3) 部署服务 (Deployment Service/Agent):管理模块运行。

其中OKAPI管理模块分为两种模式。

(1) 托管模式:OKAPI根据模块的描述文件定义的内容,启动模块并通过进程ID监控模块的运行。

(2) 代理模式:OKAPI仅负责请求的转发。

FOLIO基于描述文件将模块挂接至OKAPI的代理服务,其描述如下。

(1)ModuleDescriptor.json:描述Module的基本信息(ID,名称等)、依赖信息、对外提供的API接口信息、版本信息等。

(2)DeploymentDescriptor.json:描述Module的部署信息。

以应用程式(选座日志系统) 为例,一个完整的OKAPI管理模块运作流程如图2所示。

(1)通过ModuleDescriptor.json、DeploymentDescriptor.json描述文件配置,使应用程式作为一个独立运行的模块托管挂接在OKAPI网关上。

(2)用户或模块之间访问API时,OKAPI根据请求者所属的租客信息验证对应模块权限。

(3)OKAPI网关根据模块注册的接口信息,向对应的接口进行调用。

(4)OKAPI网关接收接口返回的响应信息并转发给发起请求者。

在应用FOLIO前,建议对OKAPI进行部署练习,编译和运行OKAPI提供的测试示例模块(如okapi-test-auth-module、okapi-test-module,以及okapi-test-header-module),加深对OKAPI模块运作流程的理解,并熟悉命令维护模块的模式。

3 FOLIO基础平台构建

FOLIO基础平台的构建需FOLIO自身提供的基础模块如下。

OKAPI:API网关,负责管理和运行微服务。

mod-authtoken:负责过滤所有代理流量并检查有效令牌模块。

mod-login:用户登录模块。

mod-permissions:用户权限信息模块。

mod-users:用户基础信息管理模块。

mod-users-bl:以用户为中心进行数据简单访问的业务逻辑模块。

通过整合FOLIO平台的部署、发布、配置等命令,配置租户及用户的信息描述文件,提取核心命令进行封装,并通过反射机制,获取应用程式内的对象信息,自动生成配置模块化所需信息描述文件,实现启动FOLIO平台所需命令的深度整合,达到了“一键启动”FOLIO平台的效果。其中FOLIO平台初始化流程如图3所示。

在构建FOLIO平台的过程中,需注意以下几点。

(1)FOLIO支持使用的数据库是MongoDB和PostgreSQL,如使用PostgreSQL作为平台数据库,其数据库版本需为9.6.6或以上,否则会出现pgcrypto插件错误的问题。

(2) 初始化FOLIO平台前,应先创建好相应的数据库用户,并分配其相应数据库权限,再根据FOLIO提供的数据库初始化命令,建立表及相应逻辑关系。

(3) 初始化FOLIO平台时,注意在开启令牌拦截模块(authtoken)前完成添加租户及超级用户的操作,否则会出现无法进入平台的问题。

(4) 编写一份平台启动的命令文件,每添加一个应用程式后只需在该文件上添加相应的启动命令,有助于简化应用程式的拓展及维护工作。

FOLIO基础平台构建完成之后,除了将原有系统的应用对接之外,还可根据图书馆界不断变化的业务需求,灵活开发更多的应用程式或对接更多外部应用程式,进一步完成新一代图书馆服务平台的拓展。

4 FOLIO应用程式设计与实现

作为一个平台化的图书馆管理系统,FOLIO平台会与其他校园应用及各种商业应用有着大量的交互。应用的描述准确度、接口的说明文档质量以及各开发团队之间的交流效率极大地影响着应用之间的交互效率。为此,FOLIO为应用程式开发设计了一套规范化的开发流程,其核心技术为微服务架构Vert.x、接口建模语言RAML和代码自动构建框架RMB。

Vert.x是一個轻量、高性能、支持多语言开发的基于事件和异步的网络框架。它基于全异步java服务器Netty,用非阻塞的异步模型开发响应式和分布式的系统[13],具备以下特性。

(1) 多语言支持:支持使用JVM的主流语言编写基于Vert.x的应用,如java,Javascrpit,Groovy,Ruby等。

(2) 异步无锁编程:编写的代码完全基于异步事件,所有的程序都异步执行且通信无阻,不需要再关注线程的同步、锁的概念。

(3) 扩展性:所有的程序都独立运行,通过EventBus事件总线,可以轻松编写分布式解耦应用程序。

(4) 成熟的生态体系:异步驱动已经支持Postgres、MySQL、MongoDB、Redis等常用组件,并且有很多在生产环境中的应用案例。

通过Vert.x框架构建Folio应用程式,使用Vert.x提供的整套模组构建响应式微服务,可以确保系统的响应性、弹性以及高性能。

以微服务架构为核心的项目,服务的交互众多,接口的描述及管理尤为重要。RAML(RESTful API Modeling Language)是一种简单的RESTful API描述性语言,也是基于YAML和JSON格式定义的API建模语言[14],具备以下特性。

(1)API设计直观:RAML允许以纯文本的格式描述API,RAML内容对API的描述完整、格式简单,能直观地了解API的结构和功能,易于学习、使用。

(2)API构建快捷:通过特定开发工具,便可依据设计好的API文档提供服务。

(3)API测试准确: 使用单元测试可以有效地保证API的准确性。

(4)API文档化:RAML设计的API,就是一份标准的接口文档。

(5)API共享性:共享简单、多方交流便捷。

通过RAML标准进行应用程式维护,利用其直观、快捷、准确的特性,描述接口文档的详细信息,可以协助团队更好地交流协作。其中,RAML构建的信息结构包括以下三种。

(1) 基本信息:描述API的关键内容,如名字、标题、路径。

(2) 用户文档:描述便于用户理解的API技术文档。

(3) 资源:描述规范RESTful资源、方法和标准。

微服务架构应用RAML建模语言,利用其完整的API设计生命周期,能高效便捷地管理应用程式。同时RAML建模语言引入了支持结构化文件和继承的语言功能,提高了代码的重用率,解决了跨领域的问题。

RMB框架(Raml-Module-Builder)以RAML标准为驱动,自动生成接口代码、接口参数的实体类及可视化API说明文档[15],包含以下工具。

(1)domain-models-api-interfaces:根据RAML、JSON文件生成Java实体类和Java接口。

(2)domain-models-api-aspects:验证RAML定义的API规则。

(3)domain-models-runtime:基于Vert.x的工具库。将RAML中定义的接口URL映射到正确的实现函数,抽象出所有样板功能,专注于实现业务功能,提供实现一次性作业、计划任务的功能。提供工具的(PostgresSQL客户端等) 使用。

(4)rules:提供Basic Drools功能,模块开发人员通过*.drl对象文件(JSON模式) 创建验证规则。

通过RMB自动构建框架,不仅能极大地提高开发人员的开发效率,免去繁琐且重复的代码撰写,规范的构建框架更能保证代码架构及代码规范的统一,大大提高开发团队人员之间的协作效率。

5 选座日志应用程式的设计与实现

目前深圳大学图书馆有两套选座系统。一是由厂商开发的刷卡系统,数据存储在SQL Server 2008上,二是由深圳大学图书馆自主研发的微信选座系统,数据存储在MySQL上。为了将两部分的日志数据进行汇总并实现查询和统计功能,保证数据的准确性及完整性,特以选座日志应用程式为例,进行基于FOLIO的App设计与实现。

应用程式设计思路为通过Apache sqoop合并SQL Server和MySQL内厂商及深圳大学图书馆的选座数据,传递至Hadoop的HDFS中,由选座日志应用程式对HDFS中的数据进行交互,并将返回结果与LAS4或图书馆应用进行交互,如图4所示。应用程式的实现包括以下流程。

(1) 构建实体类schemas。FOLIO实体类schemas采用JSON格式,以文件名为实体类名称,实体类属性内容包括属性名、是否必备、属性类型,属性的类型可以是Java的。schemas定义了具体的对象实体字段,用作返回界面展示结果。

(2) 通过RAML构造API。FOLIO要求文档按照头部声明、文档描述、实体类schemas和API路由描述的顺序描述API。其中,API路由描述是RAML的核心,路由的内容包括API的URI、接口调用方法、请求参数和返回结果。接口请求路径、请求参数以及返回参数等信息由配置文件定义。

(3) 实现接口逻辑。通过RMB工具对RAML文件配置的信息进行构建,生成API接口和参数实体,根据具体业务需求,实现接口逻辑。

(4) 完成配置。通过将“选座日志系统”的模块描述文件发送至已在运行的FOLIO平台,完成应用程式向FOLIO平台的配置。

FOLIO平台应用拓展后会有大量的应用程式交互,RMB自动构建代码程序以RAML文件为驱动生成代码,应用程式接口应严格遵循RAML文件的编写规范,在命名规范上建议以项目、模块以及功能划分,以防止因为应用程式接口路径重复,导致OKAPI服务崩溃的情况出现。配置模块时应在该应用程式的目录下保留一份部署命令文件、删除命令文件,使后期对应用程式的更新维护工作更加简单高效。对应用程式的配置及调试建议使用网页调试工具(如Postman),通过网页调试工具进行HTTP请求不仅能减少命令语句的编写,更能直观获取OKAPI服务对应用程式返回的响应信息,优化应用程式的开发过程。

目前,深圳大学图书馆新一代图书馆系统LAS4已完成与FOLIO平台的对接,并正式应用。原有的图书馆业务,如编目、流通、期刊、典藏统计等基础性功能模块稳定运作。其余拓展性功能模块如统一认证、存包柜、门禁、自助借书机、座位管理及选座日志系统等服务也已经集成应用。

其中,选座日志系统是一个完整的以FOLIO建模流程开发的应用程式。作为一个对接到FOLIO平台的模块,选座日志系统将厂商的数据以及微信选座系统的数据进行汇总,并提供接口,LAS4对注册的接口进行调用,OKAPI网关接收请求并将数据返回至LAS4完成交互。数据统计汇总查询效果如图5所示。

6 展望及建议

通过对FOLIO的探索及实践,可以为新一代图书馆系统的系统设计、技术架构提供有益参考。基于FOLIO设计的开发流程,能够提高团队协作效率,加速团队与团队之间的交流,快速准确地完成应用程式的开发应用,满足图书馆更多的业务需求迭代,为将来的拓展打下坚实的基础。今后,深圳大学图书馆计划继续深入研究FOLIO平台的底层架构,优化并完善FOLIO平台的模块管理功能,统一基本术语的描述,重新梳理模块的功能定义,进一步对需求文档进行完善。

如今,CALIS引导的CLSP联盟正在不断完善CLSP平台,积极建设中国FOLIO/CLSP社区。深圳大学图书馆在现有项目成果的基础上,将不断探索FOLIO架构的更深领域,并继续完善现有功能模块和业务。上海图书馆也在积极探索FOLIO架构,构建下一代图书馆服务平台FOLIO项目,同时也在进行FOLIO平台的汉化工作。希望在CALIS的引导下,国内更多的高校能抓住这一趋势与机遇,积极参与新一代图书馆系统的建设,加速学习FOLIO平台并进行应用实践,开发自身优势产品,加强技术交流,合作互补,携手共建中国高校图书馆自己的开放、个性、先进的新一代图书馆平台。

参考文献:

周义刚,聂华.新一代图书馆服务平台调研及思考:基于北京大学图书馆的需求[J].图书情报工作,2019,38(2):9-12.

许天才,杨新涯.新一代图书馆管理系统的发展现状与趋势:2016年教育部高校图工委信息技术应用工作年会综述[J].大学图书馆学报,2016(6):5-9.

殷红,刘炜.新一代图书馆服务系统:功能评价与愿景展望[J].中国图书馆学报,2013,39(5):26-33.

杨新崖,袁辉,沈敏.向服务平台转型的下一代图书馆管理系统实践研究[J].图书馆杂志,2015(9):23-27.

刘素清.基于用户馆体验视角的图书馆服务平台选择思考[J].图书情报工作,2015,62(14):49-53.

FOLIO[EB/OL].[2019-08-24]. https://www.folio.org/.

开源图书馆平台FOLIO[EB/OL].[2019-06-24]. https:

//www.edustack.org/2019/04/13/folio/.

肖铮,林俊伟,陈丽娟.下一代图书馆开放服务平台FOLIO初探[J].图书馆学研究,2018(15):34-38.

肖铮,林俊伟.用微服务构架下一代图书馆服务平台:以FOLIO为例[J].图书馆杂志,2018(11):63-69.

CALIS新一代图书馆服务平台建设联盟[EB/OL].[2019-08-24].http://community.calis.edu.cn/index.html.

王磊.微服务架构与实现[M].北京:电子工业出版社,2016:37-70.

OKAPI[EB/OL].[2019-08-24].https://github.com/folio-org/okapi/blob/master/doc/guide.md.

Vert.x[EB/OL].[2019-08-24].https://vertx.io.

The simplest way to design APIS[EB/OL].[2019-08-24].https://raml.org.

Raml-Module-Builder[EB/OL].[2019-08-24].https://github.com/folio-org/raml-module-builder.

葉仁杰 深圳大学图书馆馆员。 广东深圳,518060。

吴元业 深圳大学图书馆馆员。 广东深圳,518060。

(收稿日期:2019-09-05 编校:陈安琪,曹晓文)

猜你喜欢
微服务
数字文化馆建设中的“微服务”
基于微服务架构的日志系统
微服务架构及相应云平台解析
基于供给侧改革理论的图书馆社交网络微服务研究
微信公众平台在医院图书馆的应用现状调查
基于微信企业号的校园移动服务
从单一模式系统架构往微服务架构迁移转化技术研究
基于微信公众平台的高校图书馆微服务现状及对策
微媒体时代高校图书馆阅读推广微服务探析
万科开启“微服务”时代