社交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上,可以應對高併發訪問
總體架構
-
後臺總體架構
Android通過網路,到達伺服器後,經過nginx反向代理到後臺服務。
呼叫後臺介面的時候, 一部分介面是進行了許可權驗證的,許可權驗證使用userId+token
參考我的另外一個框架
點選後可以訪問github
其中使用了Redis存放userId和token的對應關係。提高了系統的響應速度。
由於app裡後面會加上電商功能,對於下單功能。訂單數量是商品數量的很多倍。
採用了分表的架構。分表原理採用一致性Hash。 -
微服務採用了Spring Cloud
Spring Cloud是採用HTTP協議, Dubbo採用RPC方案,採用TCP協議通訊。
效能方面Spring Cloud略差一點。 但是影響不大。兩種框架各有利弊。我採用了自己熟悉的Spring Cloud -
資料庫分表操作
基於一致性hash,見github原始碼 -
前後端分離,動靜分離
Java動態網站比較吃記憶體,作業系統允許的執行緒數也是一定的。 最多幾千個執行緒。
而且一個執行緒一般就要佔用512KB的記憶體。 光這些HTTP連線就至少佔用1G記憶體。
還有其他的CPU計算,也要佔用1G以上的記憶體。
動靜分離後。 頁面的每次請求不需要經過後端渲染,減少了Java Http連線數,減小了記憶體開銷。
nginx部署靜態網站後。不做優化,nginx本身就能承受上萬個併發連線,很適合做靜態資源的服務。
- 推送服務,即時通訊
使用了小米的推送服務,我自己也自主研發了一個推送服務基於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