second60 20180409
提到登陸,離不開計費系統。計費系統,是除業務系統外,最重要的系統。計費系統最主要的兩大部份為賬戶體系和交易體系兩大塊。
賬戶體系,包括:玩家的union id(名字很多,可能為
aid,
unionid
)和玩家的重要資訊。
idopenid),
如果想多個不同專案對應同乙個id,那麼就用
unionid.
opendid/aid
unionid
玩家賬號
openid
unionid
openid00000001
unionid00000001
openid00000002
unionid00000001
openid00000003
unionid00000002
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專...