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