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

Preview:

Citation preview

Solaris 用 Twitter ファイルシステム

Kazuyoshi Aizawa (@kaizawa2)

�2

•名前:相澤一賀 @kaizawa2 •お仕事:ソフトウェア開発 •趣味:プログラミング •普段使っている言語:

•Java、C •好きなもの

•Solaris:特にカーネル周り。ネットワークモジュール、

ドライバ、ファイルシステムなどが好き •Java: 最近 JavaFX 始めました

自己紹介

※この発表内容と私が所属する会社とは関係ありません

Twitter ファイルシステムって何すんの?

「ツイッターのタイムラインを tail コマンドで見たい」

ってことです

一言で言うと

つまり。。。

http://youtu.be/4pUrlR4g8eA

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 ファイルシステムの

アカウント管理ができますよ!!

オートマウントでアカウント設定

http://youtu.be/ijnePVWDiB0

もちろん マニュアルでのマウントもできます。

# /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 ファイルシステム

ご清聴ありがとうございました

Recommended