關鍵詞:高校;移動應用;Flutter框架;本地化存儲;協(xié)同平臺
中圖分類號:G642 文獻標識碼:A
文章編號:1009-3044(2024)28-0037-03
0 引言
近年來信息化技術不斷革新,移動辦公也迅速地融入人們的日常生活中,隨著網絡技術的發(fā)展,個人隱私數(shù)據(jù)泄露事件也日漸增多。高校作為技術創(chuàng)新和人才培養(yǎng)的聚集地,同時也是學生接觸社會的橋梁,國家也對高校信息化建設提出了更高的要求。如何更好地利用信息化技術為師生提供便利,同時保證師生的信息安全[1],是高校下一步信息化工作的重點。
1 研究背景
隨著智能手機的普及和移動互聯(lián)網的快速發(fā)展,人們的習慣在悄悄發(fā)生改變,傳統(tǒng)的辦公方式已無法滿足人們的日常需求,而移動應用具有即時性、便捷性等優(yōu)點,用戶通過移動應用可以隨時隨地獲取信息、溝通交流和處理工作。同時隨著數(shù)字化轉型工作的提速,人們更希望借助新的平臺或工具,快速、持續(xù)地生產各種應用,并對已生產的各類業(yè)務應用統(tǒng)一入口,實現(xiàn)無縫連接,讓各類應用不再是“信息孤島”[2]。
目前主流的移動辦公軟件有企業(yè)微信、釘釘?shù)萚3],它們的基本功能相對簡單,同時存在數(shù)據(jù)泄露的風險,無法完全滿足高校現(xiàn)有需求,所以構建一個安全、便捷、智能的高校師生移動協(xié)同平臺十分有必要。
在移動端開發(fā)方面,由于原生App可以直接訪問底層操作系統(tǒng),具有速度快、性能高等特點,為了保證應用性能和用戶體驗,基于原生操作系統(tǒng)開發(fā)移動端應用成為首選。由于目前主流操作系統(tǒng)主要是An?droid和iOS,如果直接基于原生應用開發(fā),需要編寫多套代碼,開發(fā)成本較高,隨著跨平臺開發(fā)框架快速發(fā)展,運用跨平臺開發(fā)框架進行移動端開發(fā)[4],可以提高開發(fā)效率,減輕運維成本,同時程序易擴展,能夠更好地滿足業(yè)務需求。
2 功能設計
基于Flutter框架的高校師生協(xié)同平臺建設的主要目的是整合學?,F(xiàn)有的教學資源,簡化工作流程,構建一個便捷、高效、智能的數(shù)字化校園。平臺以濟南大學已建成的數(shù)據(jù)中心作為數(shù)據(jù)支撐,通過接口的形式獲取師生人員信息,進行用戶同步,用戶首次進入應用無須注冊可直接登錄。由于平臺對用戶信息、溝通記錄、文檔傳輸?shù)葍热葸M行本地化存儲,充分保障了信息安全。
平臺主要功能包括協(xié)同溝通工作、協(xié)同開放和協(xié)同管理三大部分。系統(tǒng)功能模塊如圖1所示。
協(xié)同溝通工作平臺為移動端應用,主要包含首頁、溝通、通訊錄、應用和個人中心。1) 首頁:主要展示了校園一卡通、常用應用列表以及相關校園新聞,用戶進入校園一卡通界面可以查看自己的個人信息、校園卡消費記錄,還可以對校園卡進行掛失/解掛等操作。2) 溝通:展示了用戶接收到的所有通知公告和聊天信息,用戶可以查看歷史聊天記錄,還可以對列表中的用戶再次發(fā)起聊天(包括語音、視頻、文字)或進行文件傳輸?shù)炔僮?。為了給用戶提供便捷的訴求渠道,在溝通列表中添加了服務號,每個服務號對應不同職能部門,用戶關注服務號后即可發(fā)送消息反饋遇到的問題,發(fā)送的消息只有管理員可見,其余關注該服務號的用戶無感知,這么設計是為了保護用戶隱私。3) 通訊錄:展示用戶當前可見的所有人員信息,本平臺為了保證溝通安全,同時最大程度為師生提供便利,特別設置了同一部門(班級)內所有成員都可以通過通訊錄查看,不在同一部門(班級)內的用戶需要通過關鍵詞搜索。若想與非通訊錄用戶進行聊天,首次聊天時需要發(fā)起好友申請。4) 應用:展示當前登錄用戶有權限訪問的應用,用戶通過不同應用可以隨時隨地完成相關工作。5) 個人中心:展示用戶部門(班級)、姓名、頭像等個人信息,并允許用戶進行密碼修改、版本更新、字體大小設置等。
協(xié)同開放平臺是面向應用開發(fā)者的對接平臺,支持校園內部應用、第三方企業(yè)應用和第三方個人應用的接入。開發(fā)者登錄應用后,通過創(chuàng)建應用獲取該應用的授權信息(AppKey和AppSecret) ,然后根據(jù)平臺提供的對接流程完成應用對接。
協(xié)同管理平臺為管理端,只允許管理者登錄,該平臺提供組織管理、標簽管理、應用管理、配置管理、服務號管理等功能。管理者可以通過平臺設置用戶通訊錄可見范圍以及修改已接入的應用信息(包括應用是否上架、應用的可見范圍以及應用展示在協(xié)同溝通工作平臺上的所在的分組與順序等)。為了更好地輔助教學,協(xié)同管理平臺還設計了快速建群功能,該功能可以為群聊添加特殊屬性,比如禁止群成員退出群聊、禁止群主解散群聊、禁止所有成員添加或移除群成員等,不同于用戶通過移動端自主創(chuàng)建的群聊,使用管理端創(chuàng)建的群聊主要用于班級群、課程群等不允許隨意更改的重要群聊。同時該功能還開放了API 接口,學校教務系統(tǒng)每學期通過遍歷學生的課表信息完成相關課程群的創(chuàng)建與解散。平臺還提供數(shù)據(jù)與統(tǒng)計分析功能,從登錄方式占比、用戶在線次數(shù)、用戶活躍度分析、應用訪問詳情等多個維度進行分析,方便管理者更好地掌握平臺運行情況。
3 架構設計
為構建一個便捷、高效、智能的數(shù)字化校園,本文結合現(xiàn)有流行技術,設計出了一款基于Flutter框架的高校師生協(xié)同平臺。該平臺具有以下特點:1) 跨平臺Flutter開發(fā)框架,融合Android和iOS雙端原生服務,使應用程序可以直接與底層平臺服務進行交互,具有一套代碼多端運行的跨平臺特性;2) 采用基于Kafka分布式流處理平臺和MQTT即時通信協(xié)議的消息推送引擎,具有高吞吐量、低開銷、高并發(fā)、靈活性高等特性;3) 使用微服務技術,使平臺具備高內聚松耦合的特性。
3.1 Flutter開發(fā)框架
Flutter是一個跨平臺的UI工具集,可以復用同樣的代碼在不同的操作系統(tǒng)(Android和iOS) 上構建高質量原生的用戶界面,使開發(fā)者能夠快速構建擁有原生體驗的高性能應用。
Flutter具有高性能、開發(fā)效率高等優(yōu)點,從上到下可以分為三層,分別為框架層、引擎層和嵌入層[5],F(xiàn)lutter架構圖如圖2所示。
框架層:Flutter框架層主要使用Dart語言編寫,為用戶提供編程接口,位于該框架最下方的是Foun?dation底層框架,定義了各類基礎API,F(xiàn)oundation底層框架主要為上層應用提供工具類和方法接口。Animation、Painting 和Gestures 分別為Flutter 提供動畫、繪圖及手勢識別能力,與Foundation底層框架一起構成了Dart UI層。Rendering渲染層是Flutter框架層中最核心的部分,它依賴于下面的Dart UI層,渲染層會構建一棵由可渲染對象組成的渲染樹,當這些對象更新時,渲染樹會對比出變化的部分,然后進行更新渲染。Widgets組件層是Flutter提供的基礎組件庫,在Widgets 組件層的基礎上Flutter 也提供了Material 和Cupertino 兩種組件庫,分別實現(xiàn)了Android 和iOS 設計規(guī)范,開發(fā)者可以通過這些組件構建出不同功能的界面。
引擎層:Flutter引擎層是Flutter的整個框架的核心部分之一,包括Skia、文字排版引擎、Dart虛擬機、通信通道、事件通知等。Skia是一個用C++開發(fā)的開源的2D圖形引擎,負責在屏幕上繪制Flutter的Widget,種類豐富包括各種圖形、特效、文本段落、動畫等。在這一層中還提供了Dart虛擬機,用于將Dart代碼轉換為本地平臺可執(zhí)行的代碼。由于Flutter引擎層的存在,程序才能運行在不同的平臺上,實現(xiàn)跨平臺運行。
嵌入層:Flutter嵌入層是操作系統(tǒng)適配層,主要負責實現(xiàn)渲染Surface設置、線程設置以及平臺插件等平臺相關特性的適配。通過Flutter 嵌入層,F(xiàn)lutter 能夠與操作系統(tǒng)進行緊密集成,實現(xiàn)跨平臺的運行和適配。
3.2 消息推送引擎
本平臺的消息推送引擎基于Kafka分布式流處理平臺和MQTT即時通信協(xié)議,平臺消息推送流程圖如圖3所示。
消息推送引擎使用Redis服務緩存正在推送的消息,Redis(Remote Dictionary Server) 是基于內存的可持久化的Key-Value數(shù)據(jù)庫,具有性能高、讀取速度快等特點[6]。用戶通過協(xié)同溝通工作平臺發(fā)送消息,后端微服務接收到用戶發(fā)送的消息后,會將接收到的消息發(fā)送時間、發(fā)送人、接收人以及消息內容作為Key值,查詢Redis緩存中是否存在。如果存在,即判定為重發(fā)信息,重發(fā)消息需要判斷之前發(fā)送的消息是否已經成功送達到接收方,如果已送達,則此條消息會被丟棄不做處理。對于非重發(fā)消息和消息發(fā)送失敗后需再次發(fā)送的情況,微服務會將消息處理后存入Redis 緩存中。消息發(fā)送成功后微服務會將此條消息對應的信息從Redis緩存中刪除,保證Redis緩存中只存儲正在推送的消息。
使用Redis緩存服務的目的為:1) 可以有效避免因網絡波動等不良因素導致的消息重發(fā);2) 如果服務因異常需要重啟,存儲在Redis緩存中的消息不會丟失,這些緩存的消息在重啟服務后會被繼續(xù)推送。這樣設計既可以提高系統(tǒng)性能,又能有效防止因系統(tǒng)故障導致的數(shù)據(jù)重發(fā)、數(shù)據(jù)丟失等現(xiàn)象。
微服務如果判定當前接收到的消息需要被推送,則將消息存入Redis緩存后會再將消息推送至Kafka 消息隊列集群。Kafka消息隊列集群是一種分布式消息系統(tǒng),由多個Kafka節(jié)點組成,可以同時處理大量數(shù)據(jù),節(jié)點跨越多個服務器,保證平臺消息推送具有高可用性、穩(wěn)定性和高性能[7]。Kafka消息隊列集群會根據(jù)消息推送人數(shù),將推送壓力平分到每個Kafka節(jié)點,最終將消息發(fā)布出去,發(fā)布出去的消息都會被推送通道訂閱。
推送通道使用MQTT(Message Queuing TelemetryTransport) 消息傳輸協(xié)議實現(xiàn)與消息接收端的通信,推送通道獲取到訂閱的消息后,會通過MQTT的心跳機制來判斷客戶端是否在線。MQTT是一個基于發(fā)布/訂閱模式的輕量級通信協(xié)議,具有輕量、簡單、低功耗等特點,如果用戶在線,通過MQTT長連接保證持續(xù)通信和實時消息傳遞,有效地降低網絡請求和提高通信效率,消息推送引擎為保證通信安全會對所有通信內容進行AES加密[8]。如果消息接收用戶離線,推送通道會調用手機廠商推送通道給用戶發(fā)送離線消息,目前平臺的消息推送引擎可以滿足海量消息推送、高吞吐、可靠重試等要求。
3.3 微服務技術
本平臺采用微服務技術架構設計,在該架構下,平臺功能被拆分成多個相對獨立的微服務模塊,每個微服務都可以獨立開發(fā)和部署,不受技術語言的影響,降低系統(tǒng)復雜性的同時能夠很好地適應不同業(yè)務場景需求。在該架構下微服務模塊可以按需擴展,如果某個服務出現(xiàn)故障,也不會影響其他服務,極大地提高了平臺的可靠性。
4 上線部署
由于平臺前后端分離,后端采用微服務架構多實例部署,前端App通過工信部備案后,上架各大應用市場。在數(shù)據(jù)存儲方面,用戶及溝通等數(shù)據(jù)信息存儲在MySQL數(shù)據(jù)庫中,并設置定時備份,Redis緩存做持久化處理,保證應用重啟后數(shù)據(jù)不丟失。同時為確保數(shù)據(jù)安全,所有數(shù)據(jù)傳輸都進行了加密處理,平臺重要的服務均部署在學校內網環(huán)境。
平臺上線試運行兩個月,用戶日均訪問量在11 000次左右,截至目前,平臺共搭載了教務、迎新等40余個應用服務,整體運行良好,好評超過預期。
5 結論
為保障學校信息傳輸安全,加強師生溝通,提高教學質量和工作效率,本文設計的基于Flutter框架的高校師生協(xié)同平臺,自上線以來獲得了一致好評,通過該平臺學校整合了現(xiàn)有教學資源,簡化了辦公流程,為師生搭建了一個便捷、高效、智能的數(shù)字化校園,加速了濟南大學數(shù)字化轉型。