Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Solaris 用 Twitterファイルシステムのご紹介

1,768 views

Published on

  • Be the first to comment

Solaris 用 Twitterファイルシステムのご紹介

  1. 1. Solaris 用 
 Twitter ファイルシステム Kazuyoshi Aizawa (@kaizawa2)
  2. 2. 自己紹介 •名前:相澤一賀 @kaizawa2 •お仕事:ソフトウェア開発 •趣味:プログラミング •普段使っている言語: •Java、C •好きなもの •Solaris:特にカーネル周り。ネットワークモジュール、
 ドライバ、ファイルシステムなどが好き •Java: 最近 JavaFX 始めました ※この発表内容と私が所属する会社とは関係ありません 2
  3. 3. Twitter ファイルシステムって何すんの?
  4. 4. 一言で言うと 「ツイッターのタイムラインを tail コマンドで見たい」 ってことです
  5. 5. つまり。。。 http://youtu.be/4pUrlR4g8eA
  6. 6. Twitter FS の構成 tiwitterfsd • • • ユーザ・プログラム twitter4j を使ってTwitterと の通信を行う 擬似ファイルのデータ生成 ユーザ空間 /dev/iumfscntl • • カーネル空間 IUMFS カーネル・モジュール ファイルシステムの動作を エミュレート • VFSとユーザ・プログラム の仲介 実際の動作はユーザ・プロ グラムに投げる •
  7. 7. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ Solaris 仮想ファイルシステム (VFS) | ネ IUMFS ファイルシステム ル 空 iumfs_lookup() iumfs_read() 間 iumfs_getpage() IUMFS ドライバ iumfscntl_read() iumfs_request_read()
  8. 8. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ FD#0 から 512バイトちょ Solaris 仮想ファイルシステム (VFS) | ネ IUMFS ファイルシステム ル 空 iumfs_lookup() iumfs_read() 間 iumfs_getpage() うだい IUMFS ドライバ iumfscntl_read() iumfs_request_read()
  9. 9. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ “/kaizawa2test/home” の Solaris 仮想ファイルシステム (VFS) | vnode 教えて! ネ IUMFS ファイルシステム IUMFS ドライバ ル 空 iumfs_lookup() iumfscntl_read() iumfs_read() 間 iumfs_request_read() iumfs_getpage()
  10. 10. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ Solaris 仮想ファイルシステム (VFS) この vnode の offset 0 から | ネ 512 バイトちょうだい! ドライバ IUMFS ファイルシステム IUMFS ル 空 iumfs_lookup() iumfscntl_read() iumfs_read() 間 iumfs_request_read() iumfs_getpage()
  11. 11. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ Solaris 仮想ファイルシステム (VFS) | ネ この vnode の offset 0 の IUMFS ファイルシステム IUMFS ドライバ ル ページのデータ読んで! 空 iumfs_lookup() iumfscntl_read() iumfs_read() 間 iumfs_request_read() iumfs_getpage()
  12. 12. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ Solaris 仮想ファイルシステム (VFS) | ネ readリクエスト置いとくか IUMFS ら読んで∼! ファイルシステム IUMFS ドライバ ル 空 iumfs_lookup() iumfscntl_read() iumfs_read() 間 iumfs_request_read() iumfs_getpage()
  13. 13. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() ドライバからリクエスト来た! カ /kaizawa2test/home の offset 0 Solaris 仮想ファイルシステム (VFS) | から 4KB ちょうだい! ネ IUMFS ファイルシステム IUMFS ドライバ ル 空 iumfs_lookup() iumfscntl_read() iumfs_read() 間 iumfs_request_read() iumfs_getpage()
  14. 14. $ > cat home ユ kaizawa2test の 
 | ザ Status データちょうだい! 空 open64("home", O_RDONLY) = 0 … 間 read(0, .., 512) = 512 twitter4j twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ Solaris 仮想ファイルシステム (VFS) | ネ IUMFS ファイルシステム ル 空 iumfs_lookup() iumfs_read() 間 iumfs_getpage() IUMFS ドライバ iumfscntl_read() iumfs_request_read()
  15. 15. $ > cat home ユ | ザ 空 間 twitter4j open64("home", O_RDONLY) = 0 … read(0, .., 512) = 512 twitterfsd AbstractTimelineFile.read() ReadRequestHandler.getResponse() カ 擬似ファイル作成! Solaris 仮想ファイルシステム (VFS) | ネ IUMFS ファイルシステム ル 空 iumfs_lookup() iumfs_read() 間 iumfs_getpage() IUMFS ドライバ iumfscntl_read() iumfs_request_read()
  16. 16. Solaris/illmosでしか動きません。 念のため。。。
  17. 17. 超簡単セットアップ • ファイルシステム・モジュール - • wget https://github.com/kaizawa/iumfs/archive/master.zip ./configure make sudo make install ! ユーザ・プログラム - wget https://github.com/kaizawa/iumfs-twitterfs/archive/master.zip - sudo ./setup_autofs - ./start-twitterfsd ※ 開発パッケージが入っていること前提です
 # pkg install gcc-45
  18. 18. オートマウントで簡単アカウント管理 オートマウントを使えば、
 管理者いらずで 
 Twitter ファイルシステムの
 アカウント管理ができますよ!!
  19. 19. オートマウントでアカウント設定 http://youtu.be/ijnePVWDiB0
  20. 20. もちろん マニュアルでのマウントもできます。 # /usr/sbin/mount -F iumfs -o user=kaizawa2test twitterfs://twitter.com /mnt ただし、root ユーザーで。
  21. 21. 余談ですが。。。 Solaris では ファイルシステム毎に専用の mount コマ ンドが用意されています。 /user/share/lib/<ファイルシステム名>/mount
  22. 22. 使い方 ー タイムラインを見る home user followers/<アカウント> ホームタイムライン・ファイル 自分の投稿のタイムライン・ファイル フォロワーのタイムライン・ファイルが格納されたデ ィレクトリ フォローしているアカウントのタイムライン・ファイ friends/<アカウント> ルが格納されたディレクトリ retweet_of_me リツイートされた自分の投稿のタイムライン
  23. 23. home タイムライン http://youtu.be/53NYTtGhwLw
  24. 24. friends/followers タイムライン http://youtu.be/OP6w0EJ3EKw
  25. 25. 使い方 ー ツイートする post 投稿用ファイル。 replies/<アカウント> リプライ専用投稿ファイル
  26. 26. ツイート投稿 http://youtu.be/Jh0ZrSHc9dg
  27. 27. リプライ投稿 http://youtu.be/Sej-fOZg5S8
  28. 28. 実装について
  29. 29. 実装について • タイムライン・ファイルの共有 • タイムライン・データのディスクへの書き出し
  30. 30. なぜタイムラインファイル の共有が必要なのか?
  31. 31. • 複数のユーザが同じTwitterアカウントをフォローし ている可能性がある • 自分がフォローしていて、かつ相手からもフォロー してもらっている(両思い) Twitterアカウントがある 可能性がある どちらの場合も、同一のTwitterアカウントの
 タイムラインデータを保持してしまう Java ヒープの無駄遣い!
  32. 32. さらに。。。 1ユーザの Twitter ログインアカウントだけで 全てのフォロワー/フォローのタイムラインを 取得するのは難しい・・・
  33. 33. https://dev.twitter.com/docs/rate-limiting/1.1/limits … 15分で180
 アカウント分取得 一万人フォローしている場合の更新間隔 
 (10,000 / 180) * 15 = 832分 = 約14時間!
  34. 34. でも、100人のログインユーザがいれば・・・ ・・・・ (10,000 / 180) * 15 / 100 = 8分 に1回更新される!! かも。(未検証)
  35. 35. ※ home タイムラインは Stream API を使っているので、ほぼリアルタイ ムにツイートを取得できます。
 
 念のため。
  36. 36. なぜタイムラインデータの ディスクへの書き出しが必要なのか?
  37. 37. ユーザモードデーモン Java VM twitterfsd Java Heap タイムラインデータ タイムラインデータ タイムラインデータ タイムラインデータ OutOfMemoryError タイムラインデータ
  38. 38. ユーザモードデーモン Java VM twitterfsd Java Heap タイムラインデータ タイムラインデータ タイムラインデータ タイムラインデータ タイムラインデータ
  39. 39. ユーザモードデーモン Java VM twitterfsd Java Heap タイムラインデータ タイムラインデータ タイムラインデータ タイムラインデータ タイムラインデータ
  40. 40. このバックアップによって、
 デーモン再起動時に 以前のタイムラインデータを ディスクから読み込むこともできます
  41. 41. 利用アイデア
  42. 42. 利用アイデア 1 • syslog 出力先 システム・エラーをメンションで通知 /etc/syslog.conf *.err /twitter/ichiga2test/replies/kaizawa2test!
  43. 43. 利用アイデア 2 • cron/at で通知 毎時0分に自分にメンション 0 * * * * echo "時間だよ" > ! /twitter/kaizawa2test/replies/kaizawa2test
  44. 44. ToDo • • • Twitter フォルダのアクセス権 アカのタイムラインの読み取り制限 フォロワーの追加 • echo コマンド、touch コマンド フォロワーの削除 • (つまりまだできない) rm コマンド タイムライン・ファイルのフォーマットの変更
  45. 45. ご興味いただけたら solaris + twitterfs で検索してみてください。 http://kaizawa2.hatenablog.jp/entry/2014/01/03/201222
  46. 46. Solaris 用 
 Twitter ファイルシステム ご清聴ありがとうございました

×