O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Twitterのsnowflakeに
ついて
DSIRNLP #4
@just_do_neet
DSIRNLP #4 / Twitterのsnowflakeについて
今日話す内容
•snowflake
•Twitter社がOSSとして提供しているID生成器
•なぜこのようなツールが必要なのか
•仕組みについて
•etc,etc...
2
DSIRNLP #4 / Twitterのsnowflakeについて
ID生成は結構大事(小並感)
•たいていの処理の際にIDの生成は必要になる
•例1:クローリングした各Webサイト群それぞ
れにIDを割り振る
•例2:n-gramで分かち書き...
DSIRNLP #4 / Twitterのsnowflakeについて
ID生成の性能も結構大事
•例:1つのID生成に1msかかるとした場合、ID生
成処理にどれくらい時間がかかる?
•Webサイト10億ページ
the number of ind...
DSIRNLP #4 / Twitterのsnowflakeについて
どんな風にIDを生成する?
•数値のカウントアップ
•各RDBMSの number increment 機能を使って
•例:Oracle の sequence
•例:MySQL...
DSIRNLP #4 / Twitterのsnowflakeについて
どんな風にIDを生成する?
•数値のカウントアップ
•順序の保証、一意性の保証を何かしらの手段で
行う必要がある。
•ナイーブには「IDを発行する人は1人だけ」
という形で保証...
DSIRNLP #4 / Twitterのsnowflakeについて
どんな風にIDを生成する?
•RFC 4122 “A Universally Unique IDentifier(UUID)”
•http://www.ietf.org/rfc/...
DSIRNLP #4 / Twitterのsnowflakeについて
どんな風にIDを生成する?
•RFC 4122 “A Universally Unique IDentifier(UUID)”
8
ver. description
1 The ...
DSIRNLP #4 / Twitterのsnowflakeについて
どんな風にIDを生成する?
•RFC 4122 “A Universally Unique IDentifier(UUID)”
•version 1 (time-based)
9
DSIRNLP #4 / Twitterのsnowflakeについて
どんな風にIDを生成する?
•RFC 4122 “A Universally Unique IDentifier(UUID)”
•Pros : 複数のマシンで並列動作させても一意...
DSIRNLP #4 / Twitterのsnowflakeについて
どんな風にIDを生成する?
•ID生成器に求められるもの
•並列に一意なIDの生成が行える。
•できる限り小さいサイズでIDの生成が行える。
11
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
12
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
•
•TwitterがOSSとして公開しているID生成器
https://github.com/twitter/snowflake/
•Time-basedなI...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
14
DSIRNLP #4 / Twitterのsnowflakeについて
参考:New Tweets per second record, and how!
15
•https://blog.twitter.com/2013/new-tweets-p...
DSIRNLP #4 / Twitterのsnowflakeについて
参考:New Tweets per second record, and how!
16
•https://blog.twitter.com/2013/new-tweets-p...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
•64bitのlong値でIDを表現 (※先頭1bitは0)
•3つの要素で構成
•timestamp (41 bit) :
現在のunixtime(ms)か...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
•Q: timestampは41 bitで大丈夫?
•A: WebサービスのIDとして用いる分には大丈夫
では
•snowflakeでは
「現在のunixtim...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
19
•ID生成部のソース
https://github.com/twitter/snowflake/blob/master/src/main/scala/co...
DSIRNLP #4 / Twitterのsnowflakeについて
•ID生成部のソース
https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/se...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
21
1回前に取得したunixtimeより今の
unixtimeが古い場合はthrow exception
(OSの時刻ズレが起きた可能性)
•ID生成部のソ...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
22
sequence番号のカウントアップ
同じtimestamp値の中で12bit分
(0-4095)まで採番できる
•ID生成部のソース
https://...
DSIRNLP #4 / Twitterのsnowflakeについて
•ID生成部のソース
https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/se...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
24
今回使用したunixtimeを保存
•ID生成部のソース
https://github.com/twitter/snowflake/blob/master...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
25
ID生成
(timestamp << 22 + datacenterId <<
17 + workerId << 12 + sequence)
•ID生...
DSIRNLP #4 / Twitterのsnowflakeについて
•ID生成部のソース
https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/se...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
•利点
•IDソート ≒ 時系列ソート
ID情報だけでID生成時のtimestamp値に基づい
た時系列ソートが可能
•ID値からID生成時のtimestam...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
28
(369070365764354048 >> 22 + 1288834974657)
= 1376828206851 (2013/8/18 21:16:...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
•利点
•整数列圧縮を用いた効率的な情報圧縮が容易
(Variable Byte Code , PFor Delta , Simple9,
etc...)
29
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
•弱点
•OSの時刻ズレに弱い
•運用面で工夫が多少必要
30
https://github.com/twitter/snowflake/#system-clo...
DSIRNLP #4 / Twitterのsnowflakeについて
snowflake
•弱点?
•ID採番時にsnowflakeサーバーにthrift 経由で接
続するようになっている。
•小∼中規模で運用するには若干重厚な気が
31
DSIRNLP #4 / Twitterのsnowflakeについて
shakeflake(仮称)
•snowflakeを模して社内で作成した軽量なID生成器
•redis 2.6 + lua scripting版
•JavaVM版
32
DSIRNLP #4 / Twitterのsnowflakeについて
shakeflake(仮称)
•参考:
http://developer.smartnews.be/blog/2013/07/31/
shakeflake-is-a-tool-fo...
DSIRNLP #4 / Twitterのsnowflakeについて
shakeflake(仮称)
•参考:
http://developer.smartnews.be/blog/2013/07/31/
shakeflake-is-a-tool-fo...
まとめ
DSIRNLP #4 / Twitterのsnowflakeについて
•Twitter社がOSSとして提供しているID生成器
”snowflake”のご紹介
•こういうツールが必要とされる背景
•仕組み
•etc, etc...
•何かのご参考にな...
Thanks for your listening :)
Próximos SlideShares
Carregando em…5
×

Twitterのsnowflakeについて

19.027 visualizações

Publicada em

Publicada em: Tecnologia
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2F90ZZC ❶❶❶
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Dating for everyone is here: ❶❶❶ http://bit.ly/2F90ZZC ❶❶❶
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

Twitterのsnowflakeについて

  1. 1. Twitterのsnowflakeに ついて DSIRNLP #4 @just_do_neet
  2. 2. DSIRNLP #4 / Twitterのsnowflakeについて 今日話す内容 •snowflake •Twitter社がOSSとして提供しているID生成器 •なぜこのようなツールが必要なのか •仕組みについて •etc,etc... 2
  3. 3. DSIRNLP #4 / Twitterのsnowflakeについて ID生成は結構大事(小並感) •たいていの処理の際にIDの生成は必要になる •例1:クローリングした各Webサイト群それぞ れにIDを割り振る •例2:n-gramで分かち書きをした各ワード群 それぞれにIDを割り振る •etc, etc... 3
  4. 4. DSIRNLP #4 / Twitterのsnowflakeについて ID生成の性能も結構大事 •例:1つのID生成に1msかかるとした場合、ID生 成処理にどれくらい時間がかかる? •Webサイト10億ページ the number of individual web pages out there is growing by several billion pages per day. (at 2008. via http://googleblog.blogspot.jp/2008/07/we-knew-web-was-big.html) →約11日 •Webサイト240万ページ 日本語wikipediaの総項目数. via http://ja.wikipedia.org/wiki/Wikipedia: %E5%85%A8%E8%A8%80%E8%AA%9E%E7%89%88%E3%81%AE %E7%B5%B1%E8%A8%88 →約40分 4
  5. 5. DSIRNLP #4 / Twitterのsnowflakeについて どんな風にIDを生成する? •数値のカウントアップ •各RDBMSの number increment 機能を使って •例:Oracle の sequence •例:MySQL のauto increment •Pros : 実装が簡単 •Cons : ID生成処理が1台のRDBMSに集中し 分散できない。スケールしない。 5
  6. 6. DSIRNLP #4 / Twitterのsnowflakeについて どんな風にIDを生成する? •数値のカウントアップ •順序の保証、一意性の保証を何かしらの手段で 行う必要がある。 •ナイーブには「IDを発行する人は1人だけ」 という形で保証。 •仕組み上、処理性能がスケールしにくい 6
  7. 7. DSIRNLP #4 / Twitterのsnowflakeについて どんな風にIDを生成する? •RFC 4122 “A Universally Unique IDentifier(UUID)” •http://www.ietf.org/rfc/rfc4122.txt • “UUIDは、分散システム上でどこかが統制を取らずとも、一意に特定可 能な識別子の作成を目的としており...” (wikipedia) •128bitのデータでIDを表現。 例:550e8400-e29b-41d4-a716-446655440000 7
  8. 8. DSIRNLP #4 / Twitterのsnowflakeについて どんな風にIDを生成する? •RFC 4122 “A Universally Unique IDentifier(UUID)” 8 ver. description 1 The time-based version specified in this document. 2 DCE Security version, with embedded POSIX UIDs. 3 The name-based version specified in this document that uses MD5 hashing. 4 The randomly or pseudo-randomly generated version specified in this document. 5 The name-based version specified in this document that uses SHA-1 hashing.
  9. 9. DSIRNLP #4 / Twitterのsnowflakeについて どんな風にIDを生成する? •RFC 4122 “A Universally Unique IDentifier(UUID)” •version 1 (time-based) 9
  10. 10. DSIRNLP #4 / Twitterのsnowflakeについて どんな風にIDを生成する? •RFC 4122 “A Universally Unique IDentifier(UUID)” •Pros : 複数のマシンで並列動作させても一意な IDを生成させる事ができる。 •Cons : しかし128bitはIDのサイズとしては大きい気 がする... 10
  11. 11. DSIRNLP #4 / Twitterのsnowflakeについて どんな風にIDを生成する? •ID生成器に求められるもの •並列に一意なIDの生成が行える。 •できる限り小さいサイズでIDの生成が行える。 11
  12. 12. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 12
  13. 13. DSIRNLP #4 / Twitterのsnowflakeについて snowflake • •TwitterがOSSとして公開しているID生成器 https://github.com/twitter/snowflake/ •Time-basedなID(timestampを基に生成) •64bitでIDを表現 •複数台のマシンを用いて並列に一意なIDの生成 が行える 13
  14. 14. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 14
  15. 15. DSIRNLP #4 / Twitterのsnowflakeについて 参考:New Tweets per second record, and how! 15 •https://blog.twitter.com/2013/new-tweets-per- second-record-and-how
  16. 16. DSIRNLP #4 / Twitterのsnowflakeについて 参考:New Tweets per second record, and how! 16 •https://blog.twitter.com/2013/new-tweets-per- second-record-and-how
  17. 17. DSIRNLP #4 / Twitterのsnowflakeについて snowflake •64bitのlong値でIDを表現 (※先頭1bitは0) •3つの要素で構成 •timestamp (41 bit) : 現在のunixtime(ms)から、ある時点のunixtimeを引いた値 •machine id (10 bit): 生成器に割り当てられたID。datacenter id + worker id。 •sequence (12 bit): 生成器ごとに採番するsequence番号 17
  18. 18. DSIRNLP #4 / Twitterのsnowflakeについて snowflake •Q: timestampは41 bitで大丈夫? •A: WebサービスのIDとして用いる分には大丈夫 では •snowflakeでは 「現在のunixtime - 採番開始時のunixtime」 をtimestamp値として使用 •timestampがオーバーフローするのは、採番 開始からおおよそ69年後 18
  19. 19. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 19 •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala
  20. 20. DSIRNLP #4 / Twitterのsnowflakeについて •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala snowflake 20 現在のunixtimeを取得
  21. 21. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 21 1回前に取得したunixtimeより今の unixtimeが古い場合はthrow exception (OSの時刻ズレが起きた可能性) •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala
  22. 22. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 22 sequence番号のカウントアップ 同じtimestamp値の中で12bit分 (0-4095)まで採番できる •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala
  23. 23. DSIRNLP #4 / Twitterのsnowflakeについて •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala snowflake 23 万が一sequence番号が枯渇した場合 は、unixtimeが新しくなる( 1ms経過 する)まで待つ
  24. 24. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 24 今回使用したunixtimeを保存 •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala
  25. 25. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 25 ID生成 (timestamp << 22 + datacenterId << 17 + workerId << 12 + sequence) •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala
  26. 26. DSIRNLP #4 / Twitterのsnowflakeについて •ID生成部のソース https://github.com/twitter/snowflake/blob/master/src/main/scala/com/twitter/service/snowflake/IdWorker.scala snowflake 26 twepoch が採番開始時のunixtime 1288834974657 = 2010/11/04 10:42:54
  27. 27. DSIRNLP #4 / Twitterのsnowflakeについて snowflake •利点 •IDソート ≒ 時系列ソート ID情報だけでID生成時のtimestamp値に基づい た時系列ソートが可能 •ID値からID生成時のtimestamp値が復元可能 27 timestamp = (id >> 22) + twepoch
  28. 28. DSIRNLP #4 / Twitterのsnowflakeについて snowflake 28 (369070365764354048 >> 22 + 1288834974657) = 1376828206851 (2013/8/18 21:16:46)
  29. 29. DSIRNLP #4 / Twitterのsnowflakeについて snowflake •利点 •整数列圧縮を用いた効率的な情報圧縮が容易 (Variable Byte Code , PFor Delta , Simple9, etc...) 29
  30. 30. DSIRNLP #4 / Twitterのsnowflakeについて snowflake •弱点 •OSの時刻ズレに弱い •運用面で工夫が多少必要 30 https://github.com/twitter/snowflake/#system-clock-dependency
  31. 31. DSIRNLP #4 / Twitterのsnowflakeについて snowflake •弱点? •ID採番時にsnowflakeサーバーにthrift 経由で接 続するようになっている。 •小∼中規模で運用するには若干重厚な気が 31
  32. 32. DSIRNLP #4 / Twitterのsnowflakeについて shakeflake(仮称) •snowflakeを模して社内で作成した軽量なID生成器 •redis 2.6 + lua scripting版 •JavaVM版 32
  33. 33. DSIRNLP #4 / Twitterのsnowflakeについて shakeflake(仮称) •参考: http://developer.smartnews.be/blog/2013/07/31/ shakeflake-is-a-tool-for-generating-unique-id- numbers/ 33
  34. 34. DSIRNLP #4 / Twitterのsnowflakeについて shakeflake(仮称) •参考: http://developer.smartnews.be/blog/2013/07/31/ shakeflake-is-a-tool-for-generating-unique-id- numbers/ 34
  35. 35. まとめ
  36. 36. DSIRNLP #4 / Twitterのsnowflakeについて •Twitter社がOSSとして提供しているID生成器 ”snowflake”のご紹介 •こういうツールが必要とされる背景 •仕組み •etc, etc... •何かのご参考になれば幸いです。 まとめ 36
  37. 37. Thanks for your listening :)

×