非要實現的話,可以有幾種方式吧:
1。 使用資料庫的主鍵遞增來實現,優點是穩定可靠,缺點是存在單點問題,一旦資料庫出現問題,那個分散式序列服務將不可用。
2。 使用阿里巴巴推出的DRDS服務(分散式關係型資料庫服務_DRDS_詳情介紹),其提供全域性唯一數字id服務,幫助您在分散式環境下,繼續保持類似唯一鍵、主鍵等資料的全域性(所有節點)唯一性。
3。 使用ZooKeeper ZNode的順序性特點來生成全域性序列。
固定主機數K的系統中,主機編號為i,以i為初始值,以K為步長自增。缺點,不能動態擴充套件
id生成服務啊,可以看看twitter開源的snowflake演算法
alisql新增引擎支援id持久化遞增
最方便的,自己搞一個適用於所在公司所有服務的發號器。
對外協議搞成redis或者memcache的,任何語言只要支援socket都能拿號,並且不會重號,程式碼本身抄 snowflag 過來就可以。
時間戳+分割槽ID+自增數 三個欄位每個欄位多少位元組看自己需求定。
如果有專職DBA, alisql 的儲存引擎可以試試,或者每秒發號不超過1000的話,可以用MySQL的自增列。
回答中說ZK的,生產環節ZK作為發號器效能很值得商量的,分散式服務沒必要往發號器上使,效能非常受限制的。
或者可以搞redis。