Solaris 用 

Twitter ファイルシステム
Kazuyoshi Aizawa (@kaizawa2)
自己紹介

•名前:相澤一賀 @kaizawa2
•お仕事:ソフトウェア開発
•趣味:プログラミング
•普段使っている言語:
•Java、C
•好きなもの
•Solaris:特にカーネル周り。ネットワークモジュール、

ドライバ、ファイルシステムなどが好き

•Java: 最近 JavaFX 始めました
※この発表内容と私が所属する会社とは関係ありません
2
Twitter ファイルシステムって何すんの?
一言で言うと

「ツイッターのタイムラインを
tail コマンドで見たい」
ってことです
つまり。。。

http://youtu.be/4pUrlR4g8eA
Twitter FS の構成
tiwitterfsd

•
•
•

ユーザ・プログラム
twitter4j を使ってTwitterと
の通信を行う
擬似ファイルのデータ生成

ユーザ空間
/dev/iumfscntl
•
•

カーネル空間
IUMFS

カーネル・モジュール
ファイルシステムの動作を
エミュレート

•

VFSとユーザ・プログラム
の仲介
実際の動作はユーザ・プロ
グラムに投げる

•
$ > 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()
$ > 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()
$ > 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()
$ > 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()
$ > 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()
$ > 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()
$ > 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()
$ > 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()
$ > 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()
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 ログインアカウントだけで
全てのフォロワー/フォローのタイムラインを
取得するのは難しい・・・
https://dev.twitter.com/docs/rate-limiting/1.1/limits

…

15分で180

アカウント分取得

一万人フォローしている場合の更新間隔 


(10,000 / 180) * 15 = 832分 = 約14時間!
でも、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 で通知

毎時0分に自分にメンション
0 * * * * echo "時間だよ" > !
/twitter/kaizawa2test/replies/kaizawa2test
ToDo
•
•
•

Twitter フォルダのアクセス権
アカのタイムラインの読み取り制限
フォロワーの追加

•

echo コマンド、touch コマンド

フォロワーの削除

•

(つまりまだできない)

rm コマンド

タイムライン・ファイルのフォーマットの変更
ご興味いただけたら

solaris + twitterfs
で検索してみてください。
http://kaizawa2.hatenablog.jp/entry/2014/01/03/201222
Solaris 用 

Twitter ファイルシステム
ご清聴ありがとうございました

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