从FOLIO系统的业务架构而言,FOLIO自带了大量成熟的相关应用,具体的相关应用见表6-2。
表6-2 FOLIO现有应用及其说明[4]
从技术系统架构而言,FOLIO的技术架构[5],如图6-2所示。
从图6-2中可以看到,FOLIO平台分为系统层(System Layer)、网关层(FOLIO Gateway)、应用层和界面层(UI Tookit)这4个层面。
①系统层。系统层主要实现底层数据库的交互模块、数据检索模块、多租户(Tenant)管理模块、日志管理模块等公用基础功能模块。多租户管理模块是为了方便一个服务商采用同一套系统提供给不同的大学,然后,再由大学系统管理员对大学的读者进行二次授权。FOLIO默认使用的事务数据库为PostgreSQL数据库,元数据库为MongoDB数据库。
②网关层。网关层主要对不同端口的服务进行转发,FOLIO将此模块称为OKAPI网关,OKAPI网关底层通过NGINX的端口转发机制实现。不同厂家开发了不同的应用服务(module),但有可能部署在一台服务器上。这些应用服务通过不同的内部端口提供相应的应用服务,然后,通过OKAPI网关统一转发到特定端口,如常用的HTTP端口或者HTTPS端口,最后,由防火墙对内、外暴露的端口进行安全管理。由于不同的应用服务采用不同的内部端口,因而可以方便进行日志监控、负债均衡、流量跟踪、排查异常和独立部署。OKAPI网关支持单服务器模式(dev)和集群模式(cluster)。
图6-2 FOLIO平台架构(www.xing528.com)
③应用层。应用层为业务逻辑层。对于图书馆的不同用户场景,需要开发独立的应用程序,这些应用程序的后台服务均基于微服务架构。开发完成后统一注册到OKAPI网关层,由OKAPI网关层进行统一的路由、授权、调度、服务器分片。
④界面层。界面层为系统前台的用户视图。由于微服务架构前、后台分离的特性,界面层并不直接请求应用层的后台服务,而是先请求OKAPI网关,由OKAPI网关进行调度。这样的好处是,实现界面层开发与应用层开发的解耦合。界面层的开发者往往是美工和JavaScript程序员,而应用层的开发者往往是JavaScript程序员。FOLIO采用的界面层开发框架是Stripes,是一款基于NodeJS的JavaScript的UI框架。
上述中最核心的微服务是OKAPI网关层。OKAPI网关层的通信协议为REST(Representational State Transfer)服务,通常基于RAML(RESTful API Modeling Language)构建。RAML是一种特殊的API建模语言,遵循YAML(YAML Ain't Markup Language)格式语法。使用RAML可以高效地构造后端API。对于通信协议背后的实现代码,采用Vert.x框架编写。Vert.x框架是一款高并发、轻量级、高性能的Java框架。OKAPI网关的接口又分为以下几类,如图6-3所示。
从图6-3中可以看到,OKAPI网关的服务主要分为部署服务(Deployment Service)、发现服务(Discoverty Service)和代理服务(Proxy Serive)3类。①代理服务,对新开发的微服务应用模块描述清单(ModuleDescriptor)进行注册,ModuleDescriptor注明了程序的元数据和请求方法;②发现服务,对新开发的微服务应用部署描述清单(DeploymentDescriptor)进行注册,DeploymentDescriptor注明了程序在硬盘的物理路径,该路径通常对应docker服务;③部署服务,和发现服务类似,但是发现服务用于单节点(dev模式),部署服务用于服务器集群模式(cluster模式)的节点。
图6-3 OKAPI服务分类图[6]
从图书馆的业务而言,FOLIO分为知识库域、馆藏域、采购域、馆藏域、流通域。每个域是由不同微服务应用构成的同一组场景模块(module),各个模块通过Codex微服务域作为数据注册中心和数据中介来进行交互[7]。Codex微服务的查询功能,如图6-4所示。
图6-4 Codex微服务查询功能图[8]
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。