■
圖書館信息系統(tǒng)的起源可追溯至從20世紀60年代的自動化系統(tǒng),計算機技術的不斷發(fā)展也使得逐步形成了包括采購、編目、流通、館藏等主要功能的圖書館管理系統(tǒng),國外出現(xiàn)了包括Dynix、Sirsi、3M等,國內也有金蝶、瑞天、匯文等眾多的圖書館系統(tǒng)軟件服務商。圖書情報專家Marshall Breeding的報告中提出了圖書館服務平臺(Library Service Platform,LSP)的概念,但仍未能擺脫傳統(tǒng)業(yè)務的思維局限。
對于圖書館服務模式的升級,傳統(tǒng)的方式是各館逐步升級其業(yè)務管理系統(tǒng),提高業(yè)務管理水平。但因歷史原因,同一個市域內多家圖書館業(yè)務系統(tǒng)軟件的供貨商、開發(fā)語言、數(shù)據庫系統(tǒng)、業(yè)務規(guī)則都各不相同。本文將通過為Z市建立全市圖書館統(tǒng)一服務平臺為例,介紹一種新的架構理念和思想,以新技術、高標準、低成本的方式實現(xiàn)全新的業(yè)務體系。
Z市現(xiàn)有市級圖書館2所,區(qū)縣級圖書館13所,高校圖書館3所,其他圖書館22所。上述圖書館均采購了不同的業(yè)務管理系統(tǒng),其中市級使用的是匯文RFID圖書館系統(tǒng),其他館則包含立博、美萍等,共5種異構管理系統(tǒng)。各圖書館均有獨立的館藏、讀者數(shù)據。
建立統(tǒng)一的服務平臺,需要滿足如下需求:一是業(yè)務延續(xù)原則,無論服務平臺的業(yè)務如何演化,不能改變原有系統(tǒng)的業(yè)務運行;二是數(shù)據完整一致原則,在統(tǒng)一服務平臺提供各類新業(yè)務時,需要確保原業(yè)務系統(tǒng)數(shù)據的一致性和完整性;三是實體惟一原則,對讀者而言,要求按身份證號進行惟一識別,一人多館的讀者信息既有效統(tǒng)一又各自獨立,書目根據ISBN碼進行識別,館藏圖書則擁有統(tǒng)一規(guī)則的條碼號;四是高效服務原則,要通過分布式架構保證大規(guī)模數(shù)據業(yè)務的運行效率,提供低延遲的用戶體驗;五是安全保密原則,要保證原業(yè)務系統(tǒng)的安全運行,同時不能泄露原系統(tǒng)的數(shù)據;六是持續(xù)開發(fā)部署,在服務平臺的搭建過程中,要能夠優(yōu)先實現(xiàn)三個主要的圖書館的業(yè)務整合,之后逐步擴展到全市所有圖書館,且平臺業(yè)務同樣需要持續(xù)擴展,需采用DevOps以滿足需求。
通過對需求的評估,系統(tǒng)研發(fā)團隊決定采用分布式微服務架構搭建統(tǒng)一服務平臺。在目前主流的微服務架構中,SpringCloud憑借著Spring框架的優(yōu)勢,被眾多開發(fā)團隊所選擇。但不可忽視的問題是,SpringCloud包含的內容非常多,團隊學習周期和成本都比較高。相比而言,Service Mesh具有更簡單的服務治理方式,通過Sidecar控制所有系統(tǒng)流量,將所有的請求集中管理。團隊可以將主要的時間精力聚集在業(yè)務邏輯中來。
Service Mesh可以在復雜的服務拓撲中實現(xiàn)請求的可靠傳遞,由開發(fā)Linkerd的Buoyant公司最早提出,是一個基礎設施層,用于處理服務間的通信。目前市場的主流解決方案是由Google、IBM和Lyft合作開發(fā)的Istio,經過近兩年的發(fā)展,已經可以滿足微服務架構的需求。通常來說,Istio Service Mesh包含兩部分內容:一是由Envoy作為Sidecar部署在服務單元中,對流入和流出服務的網絡請求進行攔截,同時實現(xiàn)如服務發(fā)現(xiàn)、負載均衡、流量拆分、故障識別、熔斷器、版本控制等微服務治理功能;二是運行服務運行管理的控制面板,包括管理代理配置、分發(fā)通信策略的Pilot,通過適配器集成基礎服務、標準配置等的Mixer,為服務間通信進行證書簽名輪換、雙向認證授權的Istio Auth。
服務平臺的用戶有市民(讀者)、書店銷售員、圖書館管理員、決策用戶等。其中,讀者的需求主要有:可通過網站、微信和移動客戶端注冊登錄,綁定讀者證,查詢圖書信息,查詢借閱記錄,讀者轉借,在線充值,書店購書,查看排名,預約圖書等;書店銷售員實現(xiàn)的是掃碼、售書、打印、代還功能,售書功能是指書店出售給讀者的圖書,視為讀者代圖書館進行采購,扣除的是借閱證的押金,且在還書后可退還;圖書館管理員的功能是對涉及本館的采購記錄、借還記錄、館藏情況進行查詢和統(tǒng)計,同時監(jiān)控服務平臺的運行情況;決策用戶則可以對所有圖書館的信息進行數(shù)據統(tǒng)計分析,獲得全局的運行情況。整體業(yè)務架構如圖1所示。
系統(tǒng)架構設計的主要目的是,為各種客戶端提供統(tǒng)一規(guī)范的請求,同時滿足持續(xù)開發(fā)部署的要求。整體架構分為多個層次,如圖2所示。
客戶端支持多種設備,系統(tǒng)管理員、圖書館管理員、書店管理員、決策人員均可使用PC端和移動端進行操作,普通讀者可使用移動客戶端和微信端進行操作。
采用Kubenetes中集成Istio的方式對服務集群進行治理。Istio是一個開源的服務網格,包括服務發(fā)現(xiàn)、負載均衡、故障恢復、指標收集、監(jiān)控及復雜運維等多樣化功能。可以透明地分層到現(xiàn)有的分布式應用程序上。同時也允許集成到日志記錄、監(jiān)測和決策系統(tǒng)的API。可以高效的運行分布式微服務架構,并提供保護、連接和服務監(jiān)控。
公共服務層是將各業(yè)務領域都可能用到的服務進行抽象獨立,開放接口,由其他服務進行調用。在每個服務中,均集成Istio的Envoy,進行服務注冊。其中,面向用戶的服務使用Oauth2進行無狀態(tài)的令牌授權,而服務間的請求均采用雙向TLS進行認證,確保服務調用的安全可靠。同時提供公共的日志服務、LCN分布式事務服務、服務監(jiān)控、數(shù)據索引、消息中間件等服務,平臺中運行的各個服務模塊均可調用。
圖1
圖2
在業(yè)務服務體系中,根據業(yè)務領域的不同,劃分為讀者服務、圖書服務、借還服務、借閱記錄服務、圖書館服務、系統(tǒng)管理服務、數(shù)據分析服務等。各業(yè)務服務獨立部署,降低耦合,同時也可根據實際需求相互調用,形成業(yè)務鏈條。在涉及多個業(yè)務服務的業(yè)務過程中,使用Tx-lcn進行分布式事務管理,保證了數(shù)據的完整和一致。
服務平臺運行過程中,需要建立本地數(shù)據服務體系,不僅是提供關系型數(shù)據,還包含為搜索和日志服務提供的Lucene索引文件。為提供系統(tǒng)響應效率和吞吐量,采用了高性能高容量高可用的Redis作為數(shù)據緩存技術。
由于原圖書館系統(tǒng)存在異構性,與原廠商協(xié)商數(shù)據接口并不現(xiàn)實,因此,需要針對不同管理系統(tǒng)的情況提供不同的解決方案。采用適配器模式,將不同類型的數(shù)據輸入,如數(shù)據庫直連、WebService接口、SIP2接口的數(shù)據以相同格式進行輸出。每個子館的管理系統(tǒng)均對應一個數(shù)據適配服務(同構系統(tǒng)可多對一),由數(shù)據適配服務負責從數(shù)據庫或數(shù)據接口獲取并輸出統(tǒng)一標準的數(shù)據及將業(yè)務數(shù)據寫入相應管理系統(tǒng)。
為保證服務平臺的上線時間,同時兼顧業(yè)務的擴展需求,采用持續(xù)開發(fā)部署是必然的選擇。DevOps是通過自動化的“業(yè)務變更”與“軟件交付”的管理流程,使得軟件的開發(fā)、構建、測試、發(fā)布能夠更加敏捷可靠的實現(xiàn)。統(tǒng)一服務平臺是在現(xiàn)有成熟業(yè)務系統(tǒng)基礎上建立的新型服務平臺,要求能夠滿足快速擴展、業(yè)務迭代的需求。本系統(tǒng)的建設計劃以三個圖書館的作為試點,先期實現(xiàn)與三館的數(shù)據適配與通訊,并對外提供最重要的讀者、圖書、借還等服務。
技術上使用Kubernetes、Docker、Git、Jekins相結合的方式實現(xiàn),實現(xiàn)過程如下:(1)開發(fā)人員從鏡像庫中獲取Docker基礎鏡像,對應用進行開發(fā);(2)開發(fā)人員將代碼提交到Git;(3)Git收到代碼后通過hook觸發(fā)Jenkins master;(4)Jenkins master收到請求后在Kubernetes平臺上動態(tài)生成相應的業(yè)務節(jié)點slave;(5)在slave上對源碼進行編譯打包并生成新的Docker鏡像;(6)將新Docker鏡像上傳到registry倉庫;(7)通過Jenkins拉取鏡像,自動部署應用;(8)對應用進行測試,通過后在Kubernetes生產環(huán)境進行應用部署上線。
容器化的DevOps解決方案,實現(xiàn)了開發(fā)人員在代碼提供后的自動化編譯打包、自動化部署測試、自動化交付上線。優(yōu)化了整個系統(tǒng)開發(fā)、測試、運維之間的交互流程,極大的提高了生產效率,也使得整個平臺得以快速的橫向擴展和功能迭代。
平臺主要的功能已經完成,三個圖書館的業(yè)務整合也進入了試運行階段。共計為170余萬冊圖書建立目錄索引,為19萬余讀者建立了便捷服務通道,在9個新華書店實現(xiàn)了售書借閱服務以及圖書代還點。讀者通過移動客戶端,可快速定位圖書的館藏情況及借閱情況,還可以直接通過掃碼傳閱圖書。一是方便了讀者借還圖書,二是為圖書館提供了集中的數(shù)據可視化服務,三是提高了圖書采購途徑和效率,四是擴充了讀者流量入口和用戶粘性,五是具備了開展圖書館互聯(lián)網+業(yè)務的基礎條件。
通過對Z市圖書館業(yè)務系統(tǒng)的升級改造,從頂層設計出發(fā),以各館原有業(yè)務系統(tǒng)作為底層支撐,通過新技術、新架構的應用,可以實現(xiàn)以低成本、零中斷的方式進行模式升級。對全國各地開展智慧城市項目具有一定的借鑒意義,也有助于各地圖書館業(yè)務系統(tǒng)的全面升級,建立一個可快速進行業(yè)務擴展和數(shù)據聚合的基礎服務平臺。