46
Solaris Twitter ファイルシステム Kazuyoshi Aizawa (@kaizawa2)

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

Embed Size (px)

Citation preview

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

Solaris 用 Twitter ファイルシステム

Kazuyoshi Aizawa (@kaizawa2)

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

�2

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

•Java、C •好きなもの

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

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

自己紹介

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

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

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

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

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

ってことです

一言で言うと

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

つまり。。。

http://youtu.be/4pUrlR4g8eA

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

IUMFS

Twitter FS の構成

tiwitterfsd

ユーザ空間

カーネル空間/dev/iumfscntl

• ユーザ・プログラム • twitter4j を使ってTwitterとの通信を行う

• 擬似ファイルのデータ生成

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

• VFSとユーザ・プログラムの仲介

• 実際の動作はユーザ・プログラムに投げる

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

カ| ネル空間

ユ| ザ空間

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()

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

カ| ネル空間

ユ| ザ空間

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()

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

カ| ネル空間

ユ| ザ空間

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 教えて!

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

カ| ネル空間

ユ| ザ空間

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 バイトちょうだい!

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

カ| ネル空間

ユ| ザ空間

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 のページのデータ読んで!

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

カ| ネル空間

ユ| ザ空間

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リクエスト置いとくから読んで~!

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

カ| ネル空間

ユ| ザ空間

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 ちょうだい!

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

カ| ネル空間

ユ| ザ空間

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 データちょうだい!

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

カ| ネル空間

ユ| ザ空間

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()

擬似ファイル作成!

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

Solaris/illmosでしか動きません。

念のため。。。

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

超簡単セットアップ• ファイルシステム・モジュール

- 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

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

オートマウントで簡単アカウント管理

オートマウントを使えば、

管理者いらずで

Twitter ファイルシステムの

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

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

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

http://youtu.be/ijnePVWDiB0

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

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

# /usr/sbin/mount -F iumfs -o user=kaizawa2test twitterfs://twitter.com /mnt

ただし、root ユーザーで。

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

Solaris では ファイルシステム毎に専用の mount コマンドが用意されています。

余談ですが。。。

/user/share/lib/<ファイルシステム名>/mount

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

使い方 ー タイムラインを見る

home ホームタイムライン・ファイル

user 自分の投稿のタイムライン・ファイル

followers/<アカウント> フォロワーのタイムライン・ファイルが格納されたディレクトリ

friends/<アカウント>フォローしているアカウントのタイムライン・ファイ

ルが格納されたディレクトリ

retweet_of_me リツイートされた自分の投稿のタイムライン

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

home タイムライン

http://youtu.be/53NYTtGhwLw

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

friends/followers タイムライン

http://youtu.be/OP6w0EJ3EKw

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

使い方 ー ツイートする

post 投稿用ファイル。

replies/<アカウント> リプライ専用投稿ファイル

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

ツイート投稿

http://youtu.be/Jh0ZrSHc9dg

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

リプライ投稿

http://youtu.be/Sej-fOZg5S8

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

実装について

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

実装について

•タイムライン・ファイルの共有

•タイムライン・データのディスクへの書き出し

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

なぜタイムラインファイル

の共有が必要なのか?

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

• 複数のユーザが同じTwitterアカウントをフォローしている可能性がある

• 自分がフォローしていて、かつ相手からもフォローしてもらっている(両思い) Twitterアカウントがある可能性がある

どちらの場合も、同一のTwitterアカウントのタイムラインデータを保持してしまう

Java ヒープの無駄遣い!

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

1ユーザの Twitter ログインアカウントだけで

全てのフォロワー/フォローのタイムラインを

取得するのは難しい・・・

さらに。。。

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

15分で180 アカウント分取得

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

(10,000 / 180) * 15 = 832分 = 約14時間!

https://dev.twitter.com/docs/rate-limiting/1.1/limits

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

でも、100人のログインユーザがいれば・・・

(10,000 / 180) * 15 / 100 = 8分 に1回更新される!!

・・・・

かも。(未検証)

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

※ home タイムラインは Stream API を使っているので、ほぼリアルタイムにツイートを取得できます。

念のため。

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

なぜタイムラインデータの

ディスクへの書き出しが必要なのか?

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

Java VM

twitterfsd

ユーザモードデーモン

Java Heap

タイムラインデータ

タイムラインデータ

タイムラインデータ

タイムラインデータ

タイムラインデータOutOfMemoryError

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

Java VM

twitterfsd

ユーザモードデーモン

Java Heap

タイムラインデータ

タイムラインデータ

タイムラインデータ

タイムラインデータ

タイムラインデータ

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

Java VM

twitterfsd

ユーザモードデーモン

Java Heap

タイムラインデータ

タイムラインデータ

タイムラインデータ

タイムラインデータ

タイムラインデータ

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

このバックアップによって、

デーモン再起動時に

以前のタイムラインデータを

ディスクから読み込むこともできます

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

利用アイデア

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

利用アイデア 1• syslog 出力先

/etc/syslog.conf*.err /twitter/ichiga2test/replies/kaizawa2test!

システム・エラーをメンションで通知

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

利用アイデア 2• cron/at で通知

#*.err /twitter/ichiga2test/replies/kaizawa2test!

0 * * * * echo "時間だよ" > !/twitter/kaizawa2test/replies/kaizawa2test

毎時0分に自分にメンション

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

ToDo (つまりまだできない)

• Twitter フォルダのアクセス権 • 鍵アカのタイムラインの読み取り制限

• フォロワーの追加

- echo コマンド、touch コマンド • フォロワーの削除

- rm コマンド • タイムライン・ファイルのフォーマットの変更

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

ご興味いただけたら

solaris + twitterfs

で検索してみてください。

http://kaizawa2.hatenablog.jp/entry/2014/01/03/201222

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

Solaris 用 Twitter ファイルシステム

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