1. 程式人生 > >社交App系統架構--自己親手寫的App系統(含github原始碼)

社交App系統架構--自己親手寫的App系統(含github原始碼)

社交App系統架構

目前社交類應用有App,小程式,網站,微信公眾號等,其中最普遍有效的客戶端還是App。
本人利用空餘時間開發了一款Android版App–星座空間(英文名star-zone)

原始碼在開源到了github上https://github.com/flylib/star-zone
Android客戶端https://github.com/flylib/star-zone-android

專案地址是星座空間App

星座空間圖示

大家可以下載後用下用用看。

技術選型

下面列舉技術棧,並說明選擇的原因:
軟體分為以下幾塊:(全部都是我一個人開發的,很辛苦的_,全棧工程師+架構師)
1.Android
採用原生Android開發

很多人以為用React Native開發App就不需要處理相容性問題。其實使用React Native開發,也會遇到類似於原生開發裡的gradle jar包依賴的衝突的問題。 而且,比如需要用到一些第三方廠商的硬體驅動程式jni等,或者原生android的庫。 這種情況下React Native來呼叫這些庫,就異常艱難。以國際大廠Airbnb為例,該公司曾是比較早採用React Native來在生產環境開發App的公司,極力推進React Native。結果後來還是放棄了。
Airbnb 在 Medium 上發博文宣佈,“由於許多技術上和組織上的問題,我們決定放棄 React Native,將所有精力投入到原生應用上。”
另外一個原因:我是一個Java架構師,對Java語言比較熟悉,也會Android開發,於是就採用了原生開發

2.後臺服務
基於Java,Spring Boot, Spring Cloud
資料庫MySQL
快取Redis

3.後臺管理網站(純靜態網站)
做了前後端分離,動態和靜態分離,靜態網站放在nginx上,可以應對高併發訪問
前端使用ES6語法,
框架採用vue.js,
外掛使用babel,
樣式使用element-ui

4.App的推廣官網(純靜態網站)
做了前後端分離,動態和靜態分離,靜態網站放在nginx上,可以應對高併發訪問

總體架構

  1. 後臺總體架構
    Android通過網路,到達伺服器後,經過nginx反向代理到後臺服務。
    呼叫後臺介面的時候, 一部分介面是進行了許可權驗證的,許可權驗證使用userId+token
    參考我的另外一個框架

    fpassport

    點選後可以訪問github

    其中使用了Redis存放userId和token的對應關係。提高了系統的響應速度。
    由於app裡後面會加上電商功能,對於下單功能。訂單數量是商品數量的很多倍。
    採用了分表的架構。分表原理採用一致性Hash。

  2. 微服務採用了Spring Cloud
    Spring Cloud是採用HTTP協議, Dubbo採用RPC方案,採用TCP協議通訊。
    效能方面Spring Cloud略差一點。 但是影響不大。兩種框架各有利弊。我採用了自己熟悉的Spring Cloud

  3. 資料庫分表操作
    基於一致性hash,見github原始碼

  4. 前後端分離,動靜分離
    Java動態網站比較吃記憶體,作業系統允許的執行緒數也是一定的。 最多幾千個執行緒。
    而且一個執行緒一般就要佔用512KB的記憶體。 光這些HTTP連線就至少佔用1G記憶體。
    還有其他的CPU計算,也要佔用1G以上的記憶體。

動靜分離後。 頁面的每次請求不需要經過後端渲染,減少了Java Http連線數,減小了記憶體開銷。
nginx部署靜態網站後。不做優化,nginx本身就能承受上萬個併發連線,很適合做靜態資源的服務。

  1. 推送服務,即時通訊
    使用了小米的推送服務,我自己也自主研發了一個推送服務基於netty,專案地址
    ttps://github.com/flylib/fpush

5.前端方案
vue,雙向資料繫結,提高程式設計效率。
element-ui介面簡潔,使用簡單,適合後臺管理系統開發,跟vue結合有天然的便利。
有餓了麼公司強大後盾。
使用es6或者js都行。

上班比較忙。暫時寫這麼多。
本文後面還會繼續編輯更新。把更多內容分享給大家。

專案地址是星座空間App

原始碼在開源到了github上https://github.com/flylib/star-zone
Android客戶端https://github.com/flylib/star-zone-android

個人主頁是appjishu.com