在即時通信網常常能看到各類高大上的高併發、分佈式、高性能架構設計方面的文章,平時你們參加的衆多開發者大會,主題也都是各類高大上的話題——什麼5G啦、AI人工智能啦、什麼阿里雙11分分鐘多少萬QPS高併發等等。html
但實際上,對於普通的開發者(包括IM開發人員)來講,多數公司、多數團隊也都是幹着默默無聞、平淡無奇的產品開發,並無那麼多高併發、高大上的事情能夠作。前端
就拿一個IM系統來講,不管你的架構設計考慮了多少分佈式、高吞吐、高可用,全部這些事情只要落地,那編碼的第一件事情就是要實現幾乎全部信息系統都要面對的任務——如何設計帳號登陸功能?程序員
本文將分享幾種典型的移動端帳號登錄方式的技術原理,以及設計思路,理解後,徹底能夠快速實施於你的各類應用系統(並不限於IM系統)中。本文閱讀對像主要爲剛入門的開發人員,請程序老司機們嘴下留情哦。redis
經過本篇文章, 你能夠學到:數據庫
1)主流帳號登陋技術方案細節;服務器
2)相應的表設計;微信
3)相應的流程設計。架構
經過本篇文章, 你沒法學到:併發
與其餘原理性的文章同樣,本篇不涉及具體代碼實現細節(對於程序員來講,只要思路搞通,代碼咋寫都不會太爛,你們應該都有體會)。app
一個典型的用戶名密碼註冊登錄功能相似於下面這樣:
這種帳號登錄方式很經典也很經常使用,先註冊、再進行登陸,尤爲在老一點的CMS系統、網站系統、聊天應用中都能找到這個影子。
它的技術原理流程圖以下:
如上圖所示,詳細的流程說明以下:
這種經典的註冊登錄方式,具體怎麼設計就不在這裏贅述了,誰都懂。
典型的手機號註冊登錄功能相似於下圖:
典型的手機號註冊技術原理流程圖以下:
如上圖所示,詳細的流程說明以下:
這裏看起來沒有明確的註冊登陸操做,其實在發送手機號碼就能夠認爲是一個常規的註冊,而後後面的驗證碼輸入就是一個登錄操做。
但這種區別於常見的用戶名密碼註冊方式,是沒有密碼的的。
問: 那我要密碼咋辦?
答: 在後續產品裏面增長一個手機號碼密碼補錄的功能便可,這也是如今很常規的手法,可是如今移動互聯網大爆炸時代,密碼已經顯得不是那麼重要了,反正我歷來記不住密碼,若是手機號碼能操做的app,絕對不用密碼來操做。
表結構:
說明:
這裏只是單純說明須要用到的數據,沒有擴展具體場景,這個表結構可以知足上面兩個方案的設計。
如今不少應用爲了下降新用戶的使用門檻,都會對接第3方帳號進行登錄(好比:用微信號登錄、QQ號登錄、微博帳號登錄等)。
這裏我以QQ的開放平臺登陸邏輯爲例進行講解。
某團外賣的QQ帳號登錄功能以下圖:
咱們先來一波時序圖:
時序流程詳細說明:
想要深刻了解第3方帳號登錄,能夠讀讀這兩篇:《第三方登陸:QQ登陸接入指南》、《第三方帳號登陸功能接入徹底流程》。
表結構:
對於讀者的建議,我這裏作一下數據庫的整理。
用戶基礎表(users):
用戶驗證關聯表(user_auth_rel):
本地用戶表(user_local_auth):
第三方用戶表(user_third_auth):
表結說明:
總的來說,帳號註冊登陸功能在通常的系統裏都是入口功能,通常狀況下都不會太複雜。
對於第三方用戶的接入技術,也一樣比較簡單,我文章裏設計多一個user_thirds是能夠支持足夠多的第三方接入,固然通常咱們也就兩三個登陸就好,太多登陸方不只自身維護成本,界面擺盤也很差看不是。
但願你們可以經過以上學習,可以對於帳戶註冊登陸有一個比較好的認知,文章裏設計方案不包含分表分庫、沒有服務化,就是簡單直接的設計,固然用戶量和須要的不同,在這個基礎上還要加不少東西,謝謝你們閱讀。(本文同步發佈於:http://www.52im.net/thread-2863-1-1.html)