打造基于大并发通信技术及大数据技术的O2O系统
2019獨角獸企業重金招聘Python工程師標準>>>
本文來自于個推CTO葉新江在2015Qcon的分享整理。
截止2015年6月,個推SDK累計接入總用戶數達50億 (其中海外近5億),接入應用超過35萬,開發者人數近20萬,覆蓋獨立終端超過8億(其中海外超過1億),日均活躍用戶近6億,日分發消息20億條。
這么龐大的數據,是如何做到的呢?2011年公司做的是小規模IM產品,發展思路偏向于拿來主義,和很多開發者一樣會選擇MySQL來作為網站數據庫。到了2011年,重新設計了系統架構,選擇了更為開源的大并發通信系統;直至去年,多地協同、流式處理的理念應運而生,形成了大分布及大數據的處理系統。從單點的數據庫到點與點的通訊,再到網絡結構系統,不僅需要克服思維上的局限,更需要挑戰服務器的極限。
例如:延遲和吞吐量,用戶多了之后如何在保證延遲可接受的情況下達到想要的吞吐?關于這點大家可以回想下Java虛擬機的垃圾回收算法。
以下是開發大并發通信系統的相關經驗:
1.內部服務調用方式
關于調用方式,異步非侵入式是首選。無需等待返回值的函數調用絕對擁有最高的收益,輔以非侵入調用就能最大程度上減少對目標程序的占用。
2.JVM及線程調優
個推選擇CMS(Concurrent Mark-Sweep)作為GC(Garbage Collection),默認了92%的回收觸發條件。另外要注意的是Linux下的性能調優,如MAT的使用,利用 top-p-H 來查看CPU占用情況,利用jstack,jmap命令定位問題所在等。
3.TCP 闌尾
TCP是全雙工的,因此關閉連接必須要在兩個方向上分別進行,反復的通道開啟和關閉很容易帶來問題。起初TW(Time Wait)就是為了克服不穩定的網絡帶來的丟包等問題,如今隨著網絡技術的發展,TW已經成了雞肋。另外,雖然說TW狀態的連接既可以被回收(Recycle)又可以被重用(Reuse),但沒有人愿意冒這雙重風險。在二者選其一時,能在時間戳上滿足接入規律的Reuse有著明顯的優勢。
4.健壯保障
需要重點關注:關鍵詞,如流控、維穩、異常隔離、分降級、斷續處理等。就流控而言,有可能出現SDK發送數據存在邏輯問題而導致浪涌現象的情況。
5.分布式事務
如何在分布式情況下實現將100元錢從A轉到B?傳統思維是按照A.C.I.D原則進行操作。A.C.I.D指數據庫事務正確執行的四個基本要素。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。這里我詳細討論下另一種替代方案——B.A.S.E,Basic Availability:基本可用;Soft-state :軟狀態/柔性事務,可以理解為”無連接”的, 而 “Hard state” 是”面向連接”的;Eventual consistency:最終一致性,最終整個系統(時間和系統的要求有關)看到的數據是一致的。在B.A.S.E中,強調可用性的同時,引入了最終一致性這個概念,不像A.C.I.D,并不需要每個事務都是一致的,只需要整個系統經過一定時間后最終達到是一致的。首先確定考慮因素,即用什么方式來分割交易事務,資源方面有哪些要求,如何保證冪等性。
接下來是具體實現方式,流程如下:
1.設置業務交易記錄表 T, 并建立一套和 T 相同存儲的隊列 Q
2.記錄交易到 T, 同時放入隊列 Q, 兩個動作一個事務
3.A設置一個已處理交易記錄表TA
4.監測 Q, 如果有給 A 的交易請求,則
開始事務
查看 TA 中是否有處理過此交易
If沒有處理過 then
更新 A 記錄
把處理痕跡寫入 TA
end if
結束事務
If 上面的事務處理成功 then
Q出列
end if
1. B也按上述方式處理
使用分布式事務有助于簡化應用開發,使用消息隊列明顯需要更多的工作量,兩者各有優劣。
總結:對于時間緊迫或者對性能要求不高的系統,應采用分布式事務加快開發效率,對于時間需求不是很緊,對性能要求很高的系統,應考慮使用消息隊列方案。對于原使用分布式事務,且系統已趨于穩定,性能要求高的系統,則可以使用消息隊列方案進行重構來優化性能。
6.關于前瞻和成本
舉個簡單的例子——數據分區。實施前確定需要的資源,事先規劃和分割,看到資源的限制后安排后期數據搬遷,最后利用redis內存分配占用。
最后談一點我們理解的O2O下的推送。我們的核心為5W,即在合適的時間(When)、合適的地點(Where)、合適的場景(Which)把合適的內容(What)推送給合適的人(Who)。比如中午12點,用戶來到了到中關村附近,日常比較喜歡粵菜,自然希望收到有關粵菜館的一些優惠信息或者位置信息。在推送依據上,個推依賴于用戶畫像,并且根據場景進行高效的信息推送。
轉載于:https://my.oschina.net/u/1782938/blog/475007
總結
以上是生活随笔為你收集整理的打造基于大并发通信技术及大数据技术的O2O系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android开发(五)——计时器
- 下一篇: Windows10 ISO下载