社交App系統架構
目前社交類應用有App,小程序,網站,微信公衆號等,其中最普遍有效的客戶端還是App。
本人利用空餘時間開發了一款Android版App–星座空間(英文名star-zone)
源碼在開源到了github上https://github.com/bootsrc/star-zone
Android客戶端https://github.com/bootsrc/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
參考我的另外一個框架fpassport
點擊後可以訪問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/liushaoming/fpush
5.前端方案
vue,雙向數據綁定,提高編程效率。
element-ui界面簡潔,使用簡單,適合後臺管理系統開發,跟vue結合有天然的便利。
有餓了麼公司強大後盾。
使用es6或者js都行。
上班比較忙。暫時寫這麼多。
本文後面還會繼續編輯更新。把更多內容分享給大家。
項目地址是星座空間App
源碼在開源到了github上https://github.com/bootsrc/star-zone
Android客戶端https://github.com/bootsrc/star-zone-android
個人主頁是appjishu.com
加羣討論源碼