




摘要:隨著互聯網的飛速發展,網絡用戶量呈現爆炸式增長,各應用系統的數據量正在急劇增加。海量的數據對于批處理程序的效率提出了更高的要求,原始的基于單實例數據庫單節點應用部署的處理方式已經無法滿足需求。因此,在底層數據存儲方面,技術人員可以根據業務特點,使用分布式數據庫并按照特定字段進行分片存儲;在應用程序的算法設計方面,技術人員則可以利用分布式服務多節點多線程并發處理優勢,并基于生產者消費者模型優化異步處理模式。
關鍵詞:大數據;分布式數據庫;分布式服務;批處理
一、引言
近年來,隨著信息化的不斷發展,應用軟件積累下來的數據總量呈指數級增長,數據資產越來越被重視,并構建出了基于大數據的批處理程序進行數據挖掘分析。然而,互聯網領域數據挖掘從某些方面來說仍然處于萌芽起步階段,依然存在制約和深化數據挖掘應用的困境和瓶頸問題[1]。在初期,對數據量估算以及技術架構滯后會導致批處理程序運行時間過長,而長期占用數據庫連接會導致數據庫對外服務能力降低。因此,如何整體優化批處理,以提高運行效率,并降低運行時間,就顯得尤為重要。
本文利用分布式的MySQL數據庫替代單實例的Oracle數據庫,在充分梳理業務邏輯的基礎上,根據關鍵字段進行分庫分片處理,以提高SQL執行的并發性。同時,考慮到單節點服務器的劣勢,本文使用多節點多進程的處理模式,形成了一個批處理計算集群,同時引入了消息隊列機制,對批處理任務進行拆分,以便更好地發揮分布式處理的優勢。
二、系統設計
(一)數據庫設計
在關系型數據庫中,Oracle憑借其較好的性能和多樣的功能得到了眾多軟件開發者的認可。曾經IT部署大多依靠EMC高端存儲、Oracle數據庫以及IBM服務器,只能通過提高服務器單機性能的方式來提升服務能力。然而,在數據規模驟增后,IOE模式具有的成本高、反應遲鈍、靈活性差等缺點也愈發明顯。
MySQL既是一款開源的數據庫,也是一個穩定可靠的數據管理系統,經常被定制來管理數據庫[2],作為一個比較成熟的DBMS,其底層的實現是比較完善的[3]。MySQL的存儲引擎和數據庫是分離的,提供了多種存儲引擎供用戶選擇,以實現不同的功能需求[4],同時低耦合性使得開發者可以根據需要選擇合適的存儲引擎。MySQL Cluster是專門為分布式集群環境所提供的解決方案,MySQL NDB Cluster能夠讓多個MySQL服務器以集群模式同時運行。MySQL Cluster的無共享體系結構降低了對硬件的要求,每個節點有獨立的內存和磁盤,提高了系統的容災性。MySQL所提供的replication技術可以滿足各種集群化應用的需求,典型的有:雙機熱備、垂直或者水平拆分表、讀寫分離集群。通過使用該技術,人們可以提高數據庫的服務性能和安全性、方便進行數據分析等[5]。
本文所研究的案例是在IOE的模式下對多個地市用戶數據進行分析的批處理服務,數據量也由前期的以萬計增長到如今的以億計,因此批處理程序亟待優化。在數據存儲方面,需要在MySQL集群分庫存儲的基礎上進行水平拆分并形成分片表,以最大限度地降低單表數據量。在可靠性方面,依托MySQL提供的replication技術保障數據庫集群的高可用性以及高并發。在SEDA架構下,整合多個MySQL數據庫對外提供統一的服務,并結合zookeeper中間件進行集群同步,以全面提升數據庫的存儲和運算能力。
(二)應用層設計
大數據的批處理是讓有界源數據(如本文中使用到的分布式MySQL數據庫)進行大批量數據的處理任務。大數據下的批處理涉及的數據量大,傳統的單進程模式難以在短時間內完成。
隨著數據量的增加,前期曾引入過多線程模式,雖然在一定程度上緩解了處理效率低下的問題,但是受限于單機性能瓶頸,急需拓寬優化思路。因此,如何將大任務拆分成多個小任務,并分配到多個機器上實現并行處理,同時考慮到數據同步各任務間互不干擾,成為批處理優化的重點。
當前,隨著網絡的發展以及其在大數據處理方面的深入研究,分布式計算開始與計算理論相融合。例如,云計算和網格計算的核心思想是利用好網絡中的計算資源,分攤大數據的處理工作,從而發揮分布式計算的長處。當前關注的科研轉化率需要將理論應用到生產實踐中,從而為社會創造價值。在軟件的實際應用中,并行計算和分布式計算的優點是能夠充分發揮“集體的力量”,將大任務分解成小任務,并分配給多個計算節點同時計算[6]。
分布式計算的優勢主要體現在以下幾個方面:
面向服務:分布式處理集群對用戶透明,用戶只需要提交任務請求,平臺就可以在處理完成后將結果返回給用戶。
降低成本:在單機處理模式下,運行大數據量的批處理需要相當高的服務器配置,推高了軟件使用的成本。而分布式集群模式降低了對單個服務器的性能要求,可以根據實際需求平衡好成本和性能。
提高可用性:在單機處理模式下,單臺服務器的故障會導致系統直接宕機,給用戶帶來不良的體驗。在分布式集群模式下,多個計算節點可以互為熱備,單個服務器異常可以自動將其移除集群,并且不影響任務的繼續執行。
在服務器集群分布式計算模式下,還需要考慮利用好每一個單機。因此,本文設計了多進程和多線程并發的模型,如圖1所示。在單進程多線程模式下,線程間共享主進程資源,當線程數量超過合適的閾值后,會加劇資源的占用,造成系統性能的下降。而在多進程模式下,進程間的資源是獨立的,減少了資源爭用帶來的損耗。
在并發處理模型中使用了基于Kafka架構的分布式消息中間件,其主要優勢特點包括解耦、異步、削峰[7],其重要組成部分有:
Topic(主題):可以對消息進行區分,農民畫按照批處理任務類型劃分Topic。
Producer(生產者):生產者即消息的創建者,在接收到任務后,生產者需要對任務進行拆分,隨后將子任務根據Topic放入對應的消息隊列中。在消費者集群完成業務處理后,生產者則需要對結果數據進行整合并返回給客戶端。
Consummer(消費者):Kafka集群管理所有的消費者節點,而消費者節點監聽訂閱的主題,在有任務到來時,從對應的消息隊列中拉取子任務信息,以完成子業務邏輯處理。
三、技術實現
(一)數據庫層面的優化
本文所研究的案例中,舊系統是基于Oracle的單實例數據庫,數據采用了集中式存儲,批處理的查詢處理速度非常緩慢。在業務方面,系統涉及的用戶數據的核心字段為地市(City_ID)和用戶ID(Acct_id),根據主鍵字段用戶ID統計有幾億用戶量。按照業務特點,可以根據City_ID進行分片。
由于各個城市用戶量分布極其不均衡,對于數據量大的城市(如:一線城市),規劃一個或多個片區,再根據主鍵Acct_ID進行二次的水平拆分;對于數據量小的城市(如:縣級市),可以多地市合并到一個片區。此外,依托MySQL Cluster組合成MySQL集群可以為應用層提供統一的服務。在拆分任務時,生產者需要充分利用分片數據庫特性,按照分片維度劃分子任務,任務表結構如表1所示。
(二)應用層優化
該系統舊批處理程序受限于單次處理的數據量,需要人為控制批處理的參數,以減少單次處理的用戶量。例如,單次只處理一個地市的部分用戶,程序效率低下耗費了大量的人力。而經過優化后,可以采用分布式集群處理模式,處理方式如下:
1.在生產者進程接收到命令之后,完成任務的拆分入庫如圖2所示。首先,獲取用戶表的分片信息;其次,根據分片拆分子任務,再次將子任務入庫后發送任務消息通知消費者;最后,等待消費者處理完畢后進行結果匯總。
2.在監聽的主題上被喚醒后,消費者拉取子任務信息進行多線程處理并更新任務狀態,如圖3所示。
(三)結果展示
為了驗證優化方案的效率,本實驗采用了MySQL集群,按照每個分片表賬戶信息不超過10000條的原則進行水平拆分,共拆分了500個分片表。
實驗選用的環境為32核CPU、128G內存的Linux服務器,使用JAVA語言進行代碼層實現;利用ZooKeeper分布式調度框架,部署了1個生產者節點和8個消費者節點,每個消費者節點2個進程,每個進程包含12個并發線程。
當client端發起批處理服務時,根據入侵命令處理了200個片區約60萬用戶的數據,各節點的處理用戶量和處理時長如圖4所示。在舊有的單節點的批處理模式下,60萬用戶量需要人為控制拆分成多個串行批次,并執行2個多小時。而經過優化后,60萬用戶的處理時長可以降低到15分鐘以內。由此可見,通過分布式架構優化數據庫和應用程序的方式是可行的,并且效果顯著。
四、結束語
在大數據背景下,通過數據庫集群化以及應用系統處理的并行化,使得分布式架構得到了更好地利用,不僅壓縮了批處理的處理時長,還能夠充分地利用已有服務器資源,以節約成本。在實際應用中,本實驗可以根據情況調整生產者和消費者部署的節點個數以及單節點的并發線程數,系統的靈活性、穩定性得到了很好地驗證,因此以上方案在生產實踐中是完全可行的。
作者單位:郭俊 武漢工程大學網絡信息中心
參考文獻
[1]李建明.數據挖掘技術在互聯網中的應用[J].集成電路應用,2021,38(09):198-199.
[2]SIYOMVO SYLDIE.基于MySQL分布式數據庫系統同步分析與實現[J].微型電腦應用,2015,31(02):61-64.
[3]張飛,姜進磊,李慶虎.利用MySQL構建分布式應用[J].計算機工程與應用,2001(18):102-104,112.
[4]高見斌.基于MYSQL數據庫存儲引擎的研究[J].數字通信世界,2018(05):41,56.
[5]MySQL5.1Reference Manual:Chapter16[EB/OL].http://dev.mysql.com/doc/refman/5.1/en/replication.html.
[6]段孝國.分布式計算技術介紹[J].電腦知識與技術,2011,7(22):5463-5465.
[7]Neha Narkhede,Gwen Shapira等著,薛命燈譯.Kafka權威指南[M].北京:人民郵電出版社,2018:12-54.