拆解 | SAAS系統(tǒng)的底層架構(gòu)設(shè)計(jì)
作者對SaaS系統(tǒng)的底層架構(gòu)的設(shè)計(jì)進(jìn)行了拆解并梳理了需求邏輯,供大家一同參考和學(xué)習(xí)。
SaaS系統(tǒng)在建設(shè)過程中,因面向的用戶群體業(yè)務(wù)靈活性變化,許多同仁在做系統(tǒng)時,基于公司/市場等多方面壓力,往往在建設(shè)初期忽略最為重要的底層架構(gòu)設(shè)計(jì),將更多的視角精力投入至業(yè)務(wù)場景的支撐。
但是每當(dāng)系統(tǒng)支撐需求到達(dá)一定階段的時候,才會將產(chǎn)品視角回顧至底層架構(gòu)及公有業(yè)務(wù)模塊,這時基本面臨底層重構(gòu)的窘境。(接下里正應(yīng)對那句:人在家中坐,鍋從天上來。經(jīng)典語錄有多少同仁正在經(jīng)歷/經(jīng)歷過?)
在過往的SaaS系統(tǒng)架構(gòu)設(shè)計(jì)中,個人看好基于OA協(xié)同辦公的工具型SaaS系統(tǒng)的架構(gòu)模式。在參考了市面多項(xiàng)產(chǎn)品后,我花了2個月的時間去進(jìn)行底層架構(gòu)的設(shè)計(jì)。(多數(shù)的產(chǎn)品同仁觀念里,這樣是不存在事情。開發(fā)和老板會打死你!但是你要去用不要臉的精神去說服他們。)在經(jīng)歷2個系統(tǒng)的開發(fā)過程及運(yùn)行后,認(rèn)證了這種設(shè)計(jì)方法的通用性。希望這種設(shè)計(jì)方法能夠獲得諸位同仁的認(rèn)可,并且能在你們建設(shè)系統(tǒng)的過程中起到一定的案例參考作用。
整個底層功能結(jié)構(gòu)的建設(shè),個人入手時并沒有將用戶權(quán)限,人員管理,組織結(jié)構(gòu)放到第一視角。而是意識到SAAS-軟件即服務(wù)的租戶觀念。整個系統(tǒng)的建設(shè)前提是滿足租戶使用的需求,解決租戶業(yè)務(wù)場景上的痛點(diǎn)。那么第一視角是考慮租戶來了系統(tǒng)需要做什么?)租戶怎么來產(chǎn)品運(yùn)營考慮的事兒。
為此將底層拆分了如下圖的功能類型,并且大致說下需求邏輯。
一、注冊環(huán)節(jié)
SaaS系統(tǒng)面向用戶注冊與傳統(tǒng)注冊策略區(qū)別在于,字段多用性,字段變化多發(fā)性。
例如:現(xiàn)在一款面向企業(yè)操作工具的租戶注冊。需要用戶輸入用戶名稱、手機(jī)號碼、圖形驗(yàn)證碼、短信驗(yàn)證碼、密碼及二次確認(rèn)密碼等數(shù)據(jù)。那么這些字段信息,在傳統(tǒng)系統(tǒng)中的運(yùn)用,多在于查詢注冊用戶USER-ID相關(guān)數(shù)據(jù),數(shù)據(jù)維度多以外鍵映射多張的數(shù)據(jù)表,不存在因其他數(shù)據(jù)表變化而影響該部分?jǐn)?shù)據(jù)留存。
而基于租戶模式的SaaS系統(tǒng)中,上述數(shù)據(jù)作用不僅僅是用于傳統(tǒng)數(shù)據(jù)查詢,獲取。更多在于字段書多張業(yè)務(wù)數(shù)據(jù)表之間分離結(jié)耦,
二、低概率異常場景
因租戶注冊的手機(jī)號,可能會掛失/注銷,而影響整個操作系統(tǒng)的運(yùn)用、(這種低概率業(yè)務(wù)事件,若系統(tǒng)底層設(shè)計(jì)時若未考慮進(jìn)入,基于SaaS安全性承諾、我們是無法查詢租戶登錄密碼的)那么為了避免該類實(shí)現(xiàn)發(fā)生,從產(chǎn)品維度,是否可以將租戶注冊的手機(jī)號當(dāng)做賬號處理,將賬號植入密保手機(jī)概念。
租戶手機(jī)號碼不可登錄系統(tǒng)的時候,我們一則可以協(xié)助租戶更換密保手機(jī)。二則可以培養(yǎng)租戶對于系統(tǒng)靈活安全的平臺意識。
三、租戶注冊功能需求明細(xì)說明
- PC端賬號注冊,視為注冊租戶-【即根機(jī)構(gòu)】-且視為注冊企業(yè)租戶的人員為admin角色。當(dāng)且僅admin角色下僅有1人。
- 移動端注冊時,不做根機(jī)構(gòu)注冊,視為C端流量用戶流入企業(yè)系統(tǒng)。可被根機(jī)構(gòu)邀請加入租戶,或者主動申請加入租戶。
注冊時,字段說明及注重邏輯事項(xiàng)明細(xì)如下:
1. 賬號
必填項(xiàng)、11位手機(jī)號碼、號段驗(yàn)證。錯誤提示語【請輸入11位未注冊的手機(jī)號、】
(1)若點(diǎn)擊【確認(rèn)注冊】校驗(yàn)賬號已注冊、給與提示語【請輸入11位未注冊的手機(jī)號】提示語定時界面3s、自動隱藏【注:短信驗(yàn)證碼費(fèi)用由***網(wǎng)進(jìn)行承擔(dān)】
(2)企業(yè)注冊的手機(jī)號做2類邏輯:
- 視作手機(jī)號為賬號;
- 視作手機(jī)號為聯(lián)系方式-以防注冊企業(yè)租戶的人員手機(jī)丟失,手機(jī)號注銷等不可控因素。
(3)且注冊的賬號允許以:賬號+密碼的形式進(jìn)行登錄。且注冊的手機(jī)號允許視為聯(lián)系電話在(個人信息詳情頁-聯(lián)系電話)被更換,更換的時候需要提示為:該手機(jī)號為賬號密保手機(jī),請確認(rèn)是本人操作,并且輸入手機(jī)驗(yàn)證碼。
2. 企業(yè)名
必填項(xiàng)、輸入企業(yè)名后,校驗(yàn)該企業(yè)名是否已注冊,對應(yīng)錯誤提示語:該企業(yè)已注冊,請換個企業(yè)名稱再注冊,提示語定時3s后自動隱藏。
注:企業(yè)名稱輸入后,該字段自動存儲至【企業(yè)信息-企業(yè)名稱中】、且系統(tǒng)左上角的名稱顯示注冊時輸入的名稱。
此字段邏輯為:
(1)注冊時,企業(yè)ID下的企業(yè)信息詳情表、該字段數(shù)據(jù)字段為insert動作,在企業(yè)信息中,編輯此字段名稱后,做updata。 除非注冊企業(yè)租戶的admin角色,申請注銷企業(yè)賬號,此時做邏輯刪除?!疽苑榔髽I(yè)人員誤操作。故在注冊時控制只有admin角色下成員有此權(quán)限,且admin只有1人,以此控制風(fēng)險(xiǎn)】
(2)企業(yè)注冊時,不做OCR營業(yè)執(zhí)照認(rèn)證,注冊進(jìn)入之后,根據(jù)租戶的付費(fèi)詳情,所開通的功能模塊,強(qiáng)制邀請企業(yè)營業(yè)執(zhí)照認(rèn)證,且認(rèn)證時調(diào)用企信寶/天眼查做認(rèn)證審核【企業(yè)認(rèn)證審核的接口費(fèi)用,由金柚網(wǎng)免費(fèi)承擔(dān)】
3. 驗(yàn)證碼
有效期60s,重復(fù)獲取間隔60s,輸入錯誤驗(yàn)證碼,在輸入框提示:請輸入正確驗(yàn)證,或請重新獲取驗(yàn)證碼。
短信下發(fā)驗(yàn)證碼模板內(nèi)容例如:金柚網(wǎng)歡迎你的加入,您的驗(yàn)證碼為56554【6位】有效期為60s,請注意保密。
4. 密碼
6-20位任意純屬數(shù)字/純英文/數(shù)字英文組合【錯誤提示語:請輸入6-20位密碼】
密碼確認(rèn):兩次密碼輸入需一致。若不一致提示語【請保持2個密碼一致】
5. 勾選【我同意服務(wù)條款】、未勾提示語
請勾選服務(wù)條款。點(diǎn)擊服務(wù)條款,則進(jìn)入【服務(wù)條款詳情滾動頁】-注冊條款詳情頁,先由PM提供自造文件,后續(xù)由法務(wù)提供注冊服務(wù)條款明細(xì)協(xié)議。
6. 點(diǎn)擊確認(rèn)注冊后,前端給與loding加載界面,此階段為向后臺傳數(shù)據(jù)過程
加載過程中如遇【斷網(wǎng)、接口異常、服務(wù)器崩潰、、】不可控因素導(dǎo)致注冊失敗。給與404報(bào)錯界面。–loding加載界面及404報(bào)錯界面,請UI自行設(shè)計(jì)/前端自行提供。
7. 服務(wù)協(xié)議條款展示
注冊企業(yè)租戶賬號后,進(jìn)入添加團(tuán)隊(duì)/申請加入團(tuán)隊(duì)業(yè)務(wù)功能模塊。
前提:視為租戶申請加入其他根機(jī)構(gòu)/創(chuàng)建根機(jī)構(gòu)【出于業(yè)務(wù)角度考慮、當(dāng)前租戶賬號加入的根機(jī)構(gòu)+自主創(chuàng)建的根機(jī)構(gòu),不得超過6個,即檢測一個賬號是否屬于6個根機(jī)構(gòu)范圍】
如圖:創(chuàng)建或加入根機(jī)構(gòu)界面
通過點(diǎn)擊:創(chuàng)建團(tuán)隊(duì)、進(jìn)入創(chuàng)建團(tuán)隊(duì)詳情操作頁面、如下圖
其中聯(lián)系電話:為注冊時所 使用的手機(jī)號碼,前端自行拉取,回填至輸入框即可。
團(tuán)隊(duì)名稱為注冊時,所填寫的企業(yè)名稱即可。前端自行拉取。回填至輸入框即可
四、場景考慮
若租戶不想使用注冊時需要使用的手機(jī)號/租戶不方便使用該號碼。
用戶可點(diǎn)擊【*聯(lián)系電話】輸入框進(jìn)行輸入新的手機(jī)號、用戶可點(diǎn)擊團(tuán)隊(duì)名稱輸入新的團(tuán)隊(duì)名稱。點(diǎn)擊創(chuàng)建團(tuán)隊(duì)時。需要校驗(yàn)如下內(nèi)容。
1. 新輸入的手機(jī)號、是否已屬于6個團(tuán)隊(duì)?
若不屬于:可被使用,并且將注冊時所使用的手機(jī)號,存儲在個人信息-聯(lián)系方式的字段,uodata成為新的手機(jī)號碼。觸發(fā)節(jié)點(diǎn)為創(chuàng)建團(tuán)隊(duì)最后一步操作,即加載loding成功時做觸發(fā)。
若屬于:輸入框內(nèi),給與提示語【該手機(jī)號已加入6個團(tuán)隊(duì),請更換手機(jī)號】定時3s、自動隱藏,并且清空新輸入的手機(jī)號,輸入框內(nèi)為待輸入狀態(tài)
且需校驗(yàn)輸入的是否為11位手機(jī)號,如非手機(jī)號:提示語【請輸入11位正確手機(jī)號碼,定時1.5s、自動隱藏】
2. 輸入的團(tuán)隊(duì)名稱是否已使用?
若使用:輸入框內(nèi)給與提示語?!驹搱F(tuán)隊(duì)名稱已被使用,請換個團(tuán)隊(duì)名稱試試、】定時3s、自動隱藏,并且清空新輸入的手機(jī)號,輸入框內(nèi)為待輸入狀態(tài)
若未使用:原注冊時輸入的企業(yè)名稱,存儲在企業(yè)信息的-企業(yè)名稱做updata操作,觸發(fā)節(jié)點(diǎn)為創(chuàng)建團(tuán)隊(duì)最后一步操作,即加載loding成功時做觸發(fā)。
3. 聯(lián)系方式及團(tuán)隊(duì)名稱查詢觸發(fā)為輸入完畢,且換輸入框時觸發(fā)
如圖:點(diǎn)擊創(chuàng)建團(tuán)隊(duì),loding的加載界面及過程。
點(diǎn)擊【創(chuàng)建團(tuán)隊(duì)】后進(jìn)入創(chuàng)建加載頁面,加載過程中可能會遇到各種因素導(dǎo)致創(chuàng)建失敗(例:此時服務(wù)器崩潰,等未知因素)若創(chuàng)建失敗,則跳轉(zhuǎn)至創(chuàng)建失敗提示頁面、創(chuàng)建失敗給與404報(bào)錯界面。
404界面固定報(bào)錯提示語:柚子君走丟了,請重新嘗試創(chuàng)建。此時數(shù)據(jù)中,個人信息-聯(lián)系電話 及企業(yè)信息-企業(yè)名稱字段做updata的操作。且記錄之前注冊時的電話及名稱。
創(chuàng)建后先給與當(dāng)前頁面提示語[創(chuàng)建成功]定時1.5s,自動隱藏。隱藏后進(jìn)入初始化團(tuán)隊(duì)賬號頁面,現(xiàn)在暫時不做浮層指引教學(xué)。前端預(yù)留,此時數(shù)據(jù)庫記錄該賬號對應(yīng)的企業(yè)ID。手機(jī)號對應(yīng)的團(tuán)隊(duì)名稱
注冊企業(yè)租戶賬號后,申請加入團(tuán)隊(duì)業(yè)務(wù)功能模塊。
如圖:點(diǎn)擊申請加入團(tuán)隊(duì),進(jìn)入該頁面。
輸入框內(nèi)輸入用戶需要加入的根機(jī)構(gòu)名稱。
場景:輸入的團(tuán)隊(duì)名稱已加入場景下,給與錯誤提示語
輸入的團(tuán)隊(duì)名稱系統(tǒng)內(nèi)無名稱,給與錯誤提示語。且搜索無果的場景下
提示語內(nèi)容為【沒有與您搜索項(xiàng)類似的團(tuán)隊(duì),您可以換個名稱試試】
點(diǎn)擊搜索,進(jìn)入加載搜索loding,加載max5s,超時給與404報(bào)錯界面,
所搜結(jié)果呈現(xiàn)界面,如圖:
①結(jié)果呈現(xiàn),以表單形式給與,表單最多顯示5行,排序無規(guī)則,以5個結(jié)果/頁進(jìn)行翻頁處理。
表單字段:團(tuán)隊(duì)名稱+團(tuán)隊(duì)聯(lián)系人【即租戶個人中心-昵稱字段】
根機(jī)構(gòu)搜索范圍:數(shù)據(jù)庫全局。搜索內(nèi)容組合【包含字符串】
②點(diǎn)擊其中的某個團(tuán)隊(duì),申請加入,交互跳轉(zhuǎn)頁面。
備注輸入框長度限制:50文字、備注輸入,點(diǎn)擊確定按鈕,會向被加入的根機(jī)構(gòu)admin發(fā)起一條消息:消息內(nèi)容:【hr名稱】您好,【雇員姓名】于【申請加入時間】申請加入團(tuán)隊(duì),請?zhí)幚怼?/p>
五、找回密碼功能需求說明
賬號:11位手機(jī)號校驗(yàn)【提示語:請輸入11位手機(jī)號,定時器3s,自動隱藏,】
若手機(jī)號未注冊【該手機(jī)號未注冊-定時器3s,自動隱藏】
驗(yàn)證碼:有效期60s,重復(fù)獲取間隔60s,輸入錯誤驗(yàn)證碼,在輸入框提示:請輸入正確驗(yàn)證,或請重新獲取驗(yàn)證碼。
短信下發(fā)驗(yàn)證碼模板內(nèi)容例如:金柚網(wǎng)提示您,您找回密碼的驗(yàn)證碼為565641【六位】驗(yàn)證碼模板配置時,設(shè)置有效期為5分鐘,防止用戶無聊,隨意申請驗(yàn)證碼,這樣會增加我們企業(yè)驗(yàn)證碼的費(fèi)用。
密碼:6-20位任意純屬數(shù)字/純英文/數(shù)字英文組合【錯誤提示語:請輸入6-20位密碼】
密碼確認(rèn):兩次密碼輸入需一致。若不一致提示語【請保持2個密碼一致】
六、登錄需求說明文檔
賬號輸入:11位手機(jī)號,輸入錯誤提示語【請輸入11位已注冊的手機(jī)號】
密碼輸入錯誤提示語:輸入正確密碼
記住密碼時效為:7天,7天內(nèi)登錄無需再次輸入密碼
登錄前需注意如下場景不可登錄系統(tǒng):
- 賬號未經(jīng)注冊—提示語:您暫未注冊賬號,請注冊后再登錄?!咎崾菊Z定時1.5s、自動隱藏】
- 賬號被后臺管理員拉黑–提示語:您暫時無法登錄系統(tǒng)賬戶,請聯(lián)系客服人員??头娫挒?00-0000-000?!敬颂柎a系統(tǒng)正式投入租戶開放時,換成真實(shí)人工客服電話/機(jī)器人電話、提示語為固定在登錄頁面。不做定時隱藏?!?/li>
- 賬號已注冊、但其賬號不是admin賬號。并且該賬號未啟用狀態(tài)?!灸馁~號暫未啟用,請聯(lián)系企業(yè)管理員修改賬號狀態(tài)。–不顯示企業(yè)租戶管理員聯(lián)系方式。出于隱私維度考慮】
- 租戶/員工賬號被禁用?!灸馁~號當(dāng)前處于禁用狀態(tài)、請聯(lián)系管理員。固定在提示頁面,】
- 租戶/員工所屬角色被禁用?!灸?dāng)前所屬的角色已被管理員禁用,請聯(lián)系管理員】
- 租戶/員工所在部門被禁用?!究傻顷?、進(jìn)入系統(tǒng)后僅顯示菜單tab,右側(cè)提示語:您當(dāng)前所在部門屬于停用狀態(tài),請聯(lián)系系統(tǒng)管理員】
需要跳轉(zhuǎn)至選擇團(tuán)隊(duì)頁面后,才能進(jìn)入系統(tǒng)。
第三方掃碼登錄,可往后合理排至3/4期。做第三方登錄時、請架構(gòu)師提前自行查詢對應(yīng)各方平臺的開放API。
第一次在平臺上發(fā)布文章,沒寫好的地方歡迎諸位客官點(diǎn)評,文章對您有價值的話,點(diǎn)個贊唄(也可以用打賞來羞辱我)。下期文章《電子簽章通應(yīng)性功能建設(shè)》
本文由 @最靚的仔 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
標(biāo)題黨
架構(gòu)何在?
大神可以要一份這個架構(gòu)的PRD么,978174898@qq.com 最近正面臨一個多租戶的項(xiàng)目沒有思路
還是有一定的學(xué)到,謝謝大神??
標(biāo)題起的有點(diǎn)大
不做一點(diǎn)夸大標(biāo)題,能吸引您進(jìn)來么
底層架構(gòu)設(shè)計(jì)確實(shí)需要較長時間,反復(fù)打磨調(diào)整完善。
個人感覺:前半部分的導(dǎo)圖比較全面,后半部分有點(diǎn)細(xì),類PRD文檔了。
堅(jiān)持,加油
謝謝,這篇文章確實(shí)是用PRD改的。
同感