問題的出發點:
最近公司為了發展需要,要擴大對用戶的信息采集,每個用戶的采集量估計約3W。如果用戶量增加的話,將會大量照成采集量成3W倍的增長,但是又要滿足日常業務需要,特別是報表數據必要在規定的時間內完成。
技術障礙:
1. 面對用戶量的增長,記錄數3W倍的增長,如何保證這些記錄能夠在比較快的時間內進入存儲介質。
2. 應對用戶量的增長,如何在規定的時間內完成采集,增加硬件設備處理能力還是使用更多的服務器來處理請求。
3. 服務器的增長,是否能夠支持現有的擴展能力。
架構實現:
使用到的技術項:
1. 面向服務開發思維
2. 隊列服務
3. 多任務並發執行
4. 分布式服務管理
5. Redis的應用
6. 數據分表(分區)的實現和應用
7. Redis異步延遲同步到數據庫
架構圖如下:
具體實現:
1. 隊列服務可以采用HttpsQs
2. 多任務並發執行,PHP版可采用ParallelCurl,可控制並發數量
3. 可使用PHP Redis實現對Redis的操作
4. 數據表分表或者分區,可自行動手寫個,原理很簡單,需要指導的可以發私密信
總結:
整個方案不是很復雜,在處理大數據方向這塊,基本的原理都是一樣,把不可控的因素要把握住,所以在多任務並發這塊一定要控制到合理的數量,另外Redis緩存也支持分布式集群,增加Redis服務器並不會影響上層代碼的改變,相對來說擴容能力還是相對不錯。