有時我們需要能夠?成類似 MySQL 自增 ID 這樣不斷增大,同時又不會重複的 ID。以支援業務中的?並行場景。比較典型的是電商促銷時短時間內會有大量的訂單湧入到系統,比如每秒 10w+。明星出軌時會有大量熱情的粉絲發微博以表心意,同樣會在短時間內產生大量的訊息。
在插入資料庫之前,我們需要給這些訊息、訂單先打上一個 ID,然後再插?到我們的資料庫。對這個 ID 的要求是希望其中能帶有一些時間資訊,這樣即使我們後端的系統對訊息進行了分庫分表,也能夠以時間順序對這些訊息進?排序。
Twitter 的 snowflake 演算法是這種場景下的一個典型解法。先來看看 snowflake 是怎麼回事,如下圖所示:
圖:snowflake 中的位元位分布