請教各位大神,我SSO系統存了用戶資訊,子系統業務只保存了用戶ID,批量如何進行用戶資訊關聯?
比如我子系統A,里有個訂單表,如下:

當管理者去后臺查看訂單的時候,如何把用戶資訊(如姓名、年齡)和訂單資訊整合起來?
我的想法是SSO系統寫一個介面,用來批量獲取用戶資訊,只要傳入要獲取的用戶ID集合即可,
例如8,11117,10.....這樣子,當子系統A第一頁加載10條資料,那么就后臺請求介面就把這10個人
的ID傳過去,然后獲取到用戶詳細資訊后回傳給子系統A,A系統在進行整合回傳給前端頁面,
這樣做,感覺很LOW,性能也不一定好,請問各位大神有何解決方法?
還是說子系統換一種架構,不單單存用戶ID?請指教,萬分感謝
uj5u.com熱心網友回復:
可以將兩個資料庫的 user表同步uj5u.com熱心網友回復:
創建 Token 機制。單點回呼uj5u.com熱心網友回復:
跨庫?如果是mssql,資料庫里加鏈接服務器試試
uj5u.com熱心網友回復:
1.把子系統用戶按“一致性hash”的散列分庫存2.構建中間處理流體系,比如spark的批次理。讓把一些報表需要的冗余索引,放到spark批處里,分批次到一致性hash管理的群集資料庫查
ps:有關一致性hash,你自己百度。我只簡單說一下,比如一個機構假設hash是2001,你資料庫記錄這是2001機構的資訊,假設你有服務器一個服務器能管1w個機構,那么很明顯2001歸第一個服務器管,你去第一個服務器查詢,這個程序在基于一致性hash的群集里其實是自動的,不需要你管。
有關離線流Stream 批處理你也可以自己百度。我不多做解釋
uj5u.com熱心網友回復:
實際上報表和聚合作業都是底下離線“偷偷”做的,這個就是幾年前火的一筆的“Hadoop”的核心(分布+分步--偷偷在底下把N臺機器的資料,按步驟一步一步重新聚合,話說不是net垃圾,而是因為天朝的net傳道者,就喜歡跟名詞打交道,不喜歡正兒八經做實事,他們覺著這種在底下偷偷摸摸聚合的作業體現不了高大上的感覺,太low)
uj5u.com熱心網友回復:
感謝您的回答,一開始是考慮同步,但是萬一用戶在SSO系統中修改資料,那么就需要子系統有個介面來更新用戶資料,或者子系統要定期同步更新SSO的用戶資料,這樣的話,子系統就多了很多作業,主要是子系統還和SSO用的不是一直語言,子系統可能是PHP、或者JAVA哈
uj5u.com熱心網友回復:
感謝您的回答,您說的是單個用戶回呼,現在是很多用戶哈
uj5u.com熱心網友回復:
感謝您的回答,有些子系統用的開發語言和SSO不是一個,資料庫也有可能不一樣,比如PHP+MYSQL這種的哈
uj5u.com熱心網友回復:
你的想法一點問題都沒有。不要覺得很low。
不然也不會流行微服務了。
uj5u.com熱心網友回復:
感謝您的回答,我現在就去了解下“一致性hash”及其解決方案,沒用過哈,再次感謝您uj5u.com熱心網友回復:
感謝您的回答,因為以前沒有做過這樣的架構,全靠自己經驗來設想出來的架構,擔心經不起業務的考驗哈
uj5u.com熱心網友回復:
SSO是子系統有自己的用戶權限控制,如果你子系統不存在用戶資訊,那么就需要對應的SSO系統提供介面供你呼叫uj5u.com熱心網友回復:
感謝您的回答,為了保證用戶資料的一致性,我把用戶資訊都存在了SSO系統中了,子系統只需要記錄業務對應的用戶ID,這樣子系統就不用再維護一個用戶表,降低了系統的復雜性
uj5u.com熱心網友回復:
兄弟,請問解決了嗎?uj5u.com熱心網友回復:
其實可以在各個子系統建立冗余表,各個子系統提供三個介面,用戶新增,修改,洗掉。每加一個子系統,sso將該子系統的介面進行注冊。
當sso注冊時,會呼叫各個子系統的新增介面進行同步,同理當sso進行修改與洗掉時,sso也呼叫子系統的介面進行修改與洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/106086.html
標籤:ASP.NET
下一篇:求指點迷津
