ShareSDK,顧名思義,分享的SDK組件,公司基於互聯網,早期主要以ShareSDK起家。今日思來,很幸運,能陪着ShareSDK一塊兒成長。前端
如圖
經典的單體應用架構, 和不少初創企業同樣,當時採用這種架構。用redis等緩存擋住併發,用MySQL來存儲數據。
前端的報表分析直接操做MySQL便可。
我並不反對單體架構,反而我以爲很合適,因爲初創企業業務形態並不穩定,單體架構其實很容易調整,殺雞焉用牛刀。redis
公司是國內第一家作移動端分享SDK的企業,隨着業務發展,因爲幾乎每一個APP都會有分享功能的需求,業務發展飛快。
我記得當時一個「魔漫相機」App就佔據了咱們半壁帶寬。算法
在業務請求的入口並未根據業務作輕重之分,致使數據交互類的接口以及日誌數據上報的接口共享網關。緩存
早期數據直接落地MySQL,經過MySQL作統計分析。架構
因爲整個架構比較簡單,對於複雜的業務以及大數據分析支持基本上談不上併發
基於單體應用,咱們基本上看不到將來,這除了單體應用自己的侷限性以外,在架構上自己也跑不動。這樣就造就了成本以及資源的重度浪費。異步
梳理後的整個服務架構,從請求端到網關API再到具體的業務處理,流量上能夠隨意切割以及合併,很方便的作擴容以及縮容操做。微服務
數據分爲基礎數據以及統計分析數據。
將核心關鍵的基礎數據,好比配置信息等提取出來,分庫存儲,將全部的統計分析數據以及可異步存儲數據落地本地磁盤,再由flume實時拉走。這樣帶來的好處有不少:工具
上述簡單講到了服務架構以及數據架構的演化,可是細緻各個環節能夠有不少道道。包括服務的自動化部署,DI/DC以及鏈路監控等並未細說說起。
對於我的,最深入的理解有兩點:性能
充分理解各個軟件工具自己適合的領域,讓專業的軟件工具對付它們擅長的業務,而不是一招拍死
架構基於業務,好很差的架構要看什麼樣的業務,若是換成公司的IMSDK,顯然這個架構徹底不合適。
數據每一次流動,均可能伴隨必定的異常。那麼架構簡單如何體現?
能用一兩層服務解決的事情絕對不使用三層服務,方便數據追蹤跟進以及業務排錯。
其次,服務業務儘量簡單,ShareSDK的配置服務以及社交信息服務等都是各自獨立,這在團隊分工優化上也顯得簡單。
誠然,整個服務架構能夠輕鬆應對千萬級併發。可是,我認爲能夠優化的空間還有不少。指望,整個ShareSDK服務架構能伴隨公司繼續成長壯大。