框架 登陸服設計

2021-08-18 11:25:48 字數 2947 閱讀 1535

second60  20180409

提到登陸,離不開計費系統。計費系統,是除業務系統外,最重要的系統。計費系統最主要的兩大部份為賬戶體系和交易體系兩大塊。

賬戶體系,包括:玩家的union id(名字很多,可能為

aid,

unionid

)和玩家的重要資訊。

idopenid),

如果想多個不同專案對應同乙個id,那麼就用

unionid.

opendid/aid

unionid

玩家賬號

openid

unionid

[email protected]

openid00000001

unionid00000001

[email protected]

openid00000002

unionid00000001

[email protected]

openid00000003

unionid00000002

[email protected]

openid00000004

unionid00000003

總結:大部份計費系統,大同小異,在賬戶體系中,會有唯一的unionid,對應不同渠道

不同,會有不同的

openid/aid

。計費系統太龐大,不可幾句話說完,我這裡只是簡介下賬戶中的唯一id,分兩種:

openid

unionid

言歸正轉,簡介完計費的賬戶體系的id,再說說本地賬戶體系。

通常情況下,很多專案都系統都是對接其他平台或專案的計費系統。如乙個大公司,專門有乙個計費系統部門,其他部門的專案都是對接計費部門,但賬戶的生成管理,就完全由專案決定,如上面所示,有兩種方式實現:

a) 賬戶體系完全由計費統一生成管理,也就是賬戶體系在計費系統。

優點:不用專案自已維護賬戶體系,只需從計費獲取賬戶資訊即可(包括唯一id)

缺點:如果要查資料,或找問題,要對接不同部門,比較麻煩,如果計費部門有需求變更影響,統一要協調看本專案是否有影響

b) 賬戶體系由本地專案統一生成管理

優點:計費只提供唯一id和賬戶資訊即可,由本專案來生成並維護自已的賬戶體系,對溝通,查詢問題,維護都可很快速地解決問題。

缺點:多了設計和維護成本(可忽略)

總上所述,b方案是比較可好的方法,即由計費提供唯一id(

aid)和基本資訊,但專案內部自已也有賬戶體系,會有自已的唯一

id(如

uid)

登陸服,目的只有乙個,就是登陸。所以設計登陸服,其實功能是比較單一的。所以設計登陸服,有簡單,通用,可無限擴充套件的特點:

a) 簡單性:只做登陸功能和賬戶生成和獲取功能

c) 無限擴充套件:登陸服務可以乙個也可以多個,可以單台機佈署,也可以布到多台機器

d) 無狀態:當乙個登陸服沒啟動或不存在時,可以切換到另乙個登陸服務進行登陸

以賬戶體系在專案內部為例,登陸的流程為:

a) 使用者請求登陸,攜帶賬號(如:***@xx.com)

b) 登陸服拿使用者請求資訊,請求計費(通常以http方式請求)

c) 計費返回唯一aid和使用者基本資訊

d) 登陸服拿計費返回aid和使用者基資訊,請求

db**

e) 如果db裡沒有使用者,

db**會生成使用者並返回資訊

(uid)

f) 如果db有使用者,

db**返使用者資訊

如上圖所示,登陸服的基本功能有:

a) 計費請求和處理

b) db服務請求和處理

c) 通知其他服務玩家登陸

d) 登陸返回

異常處理功能:

a) 登陸快取,防止同一賬戶在未返回前重複登陸

b) 多全登陸服,同一賬戶重複登陸問題處理

計費請求,一般都是http方式實現。

+其他資訊

=***&

其他=***x

這裡可能是json或加密的

返回處理,解析返回的json,獲得請求資訊,失敗,直接返回客戶端。成功,繼續下一步

.拿計費成功返回的使用者aid/unionid/openid和使用者資訊,請求

db服務。目的有兩個:

a) 如果本地賬戶體系中沒有此使用者,則註冊和建立使用者資訊

b) 如果本地賬戶體系中有此使用者,則更新使用者資訊(或不更新)

c) 返回使用者資訊給其他服務用

db返回成功後,通用登陸服要通知其他服務,讓其他服務初始化玩家。

無論成功或失敗,都會返回資訊給客戶端

同一賬戶,可能會頻繁請求登陸,但第一次登陸並未返回,所以要做處理。

方法是:快取登陸資料,如果同一賬戶在未返回前再次登陸,會提示客戶使用者在登陸中;當登陸計費/db服務返回後,再返回結果給客戶端。

同一賬戶,請求登陸到不同login。即兩個

login

同時登陸,這種情況是要避免的,方法有很多種。如:

a) 玩家只能登陸乙個login (比較狹隘

)b) 玩家登陸時,把狀態記到redis中,不同登陸服先到

redis

檢視使用者登陸狀態,登陸成功清除狀態

(產生問題,如果登陸的服宕機了,要清掉

redis

狀態,可設超時等

)上面整體介紹了登陸服的設計和實現,當然還有其他的問題,如多個登陸服時,怎麼樣來選乙個登陸服,怎麼來負載均衡登陸服。這個就留給大家思考了。

上面是小人陋見,歡迎吐槽~~

(注:順便噴一句,

second60

~)

單點登陸 單點登陸設計

1單點登入基本流程場景1 使用者未登入情況下訪問受限資源 例如 使用者在站點a 登入成功了,這時候使用者再去訪問站點 下的受限資源。private a.do 由於使用者在站點a登入了,那麼在 x.com 域下一定存在authid的cookie,並且redis中一定儲存了使用者的登入資訊。當使用者訪問...

SolrCloud SSH免密碼登陸遠端伺服器

背景 搭建hadoop環境需要設定無密碼登陸,所謂無密碼登陸其實是指通過證書認證的方式登陸,使用一種被稱為 公私鑰 認證的方式來進行ssh登入。在linux系統中,ssh是遠端登入的預設工具,因為該工具的協議使用了rsa dsa的加密演算法.該工具做linux系統的遠端管理是非常安全的。telnet...

登陸模組設計

環境 node v8.9.4 npm 5.6.0 框架 koa 技術 orm sequelize 資料庫 mysql 建立koa專案 1.開啟命令列視窗。安裝koa generator,安裝命令為 npm install g koa generator2.使用koa generator生成koa2專...