janogdon.net はじめました
2017/06/16
DMM.comラボ
佐々木 健
JPNIC総会講演会資料
2
時系列
●
4/13 マストドンがメディアに取り上げられ突然ブレイク
●
4/17 JANOG40プログラム募集締切日、エイヤでマストドンプログラム応募
●
5/1 janogdon.net のインスタンス立ち上げ
●
5/2 JANOG40スタッフからプログラム採用の連絡
●
5/2 janogdon.net 立ち上げを細々とアナウンス
●
5/10 JANOGのメーリングリストでアナウンス
●
5/10 IPv6対応
●
5/16 JPNIC総会での登壇依頼
●
6/5 バージョンアップ(1.3.2→1.4.1)
●
6/12 JPNIC総会向け資料提出締切
3
janogdon.net とは
https://janogdon.net/about の内容↓
注意書き↓
とりあえず立ててみただけ。気まぐれで落とすかもしれない。
JANOGer っぽい人用?、と思ってるけど、JANOG運営委員とは連係してな
いよ。
janogdon ≠ JANOG だよ、と。
自由に遊んでくれてOK。
でも mastodon はアカウント削除機能が未実装なので覚悟してアカウント登
録してね。(※バージョン1.4.2で実装されました)
裏側のこととかは、どこかのJANOGの発表で使わせてもらうかもしれない。
サーバはさくらのVPS、非力なスペックなので、あんまりいじめないでね。
4
janogdon.net とは
2017/6/12時点
5
本日のネタ
●
Mastodonの技術的概観
●
Mastodonの技術的問題点
●
Mastodonは今後どう発展するか?
(勝手な予測)
6
Mastodonの技術的概観
7
高機能なMastodon
●
Twitterに似たモダンなウェブインター
フェイス
●
Twitterに似たAPI
●
バックエンドにデータベース
●
インスタンス間通信のための仕組み
8
clocコマンドでMastodonを調べる
●
cloc(Count Lines of Code)
– https://github.com/AlDanial/cloc
9
clocコマンドでMastodonを調べる
% cloc mastodon
3281 text files.
3231 unique files.
2198 files ignored.
github.com/AlDanial/cloc v 1.70 T=6.77 s (191.3 files/s, 11428.1 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Ruby 632 5774 1369 20975
YAML 148 197 145 16042
JavaScript 216 2503 1862 12703
JSON 35 0 0 6496
SASS 23 938 5 5162
Haml 86 286 22 1421
ERB 115 369 0 617
Markdown 27 67 0 304
HTML 6 4 0 73
XML 2 0 0 11
Bourne Shell 1 4 3 7
CSS 4 0 11 4
-------------------------------------------------------------------------------
SUM: 1295 10142 3417 63815
-------------------------------------------------------------------------------
10
clocの出力結果からわかること
●
6万行程度のコンパクトなコード。
●
Ruby上の仕組みを使ったフレームワークで書かれてい
る。
●
JavaScriptのコードも多い
●
モダンな拡張言語も活用されている。
– SASS:スタイルシート言語
– Haml:HTMLテンプレート言語(Railsで良く使われる)
– ERB;HTMLへのRubyスクリプト埋めこみ技術
11
他のソフトウェアと比較
●
bind-9.11.0-P5 〜みんな大好き?
●
inn-2.6.1 〜NetNewsのソフトウェア
●
IRCD-Hybrid 〜IRCデーモン
12
bind-9.11.0-P5
% cloc bind-9.11.0-P5
4722 text files.
4434 unique files.
2568 files ignored.
github.com/AlDanial/cloc v 1.70 T=8.49 s (255.2 files/s, 102860.2 lines/s)
---------------------------------------------------------------------------------------
Language files blank comment code
---------------------------------------------------------------------------------------
C 768 66345 56380 363251
Bourne Shell 444 19049 20143 133091
HTML 116 548 795 44516
C/C++ Header 609 10477 42156 31248
XML 13 1258 138 21412
m4 32 1989 818 17860
C++ 74 3487 3129 17191
Perl 61 1571 1771 8472
XSLT 7 146 138 1588
Tcl/Tk 2 174 149 842
Windows Module Definition 9 20 52 513
Python 5 64 63 366
make 13 112 70 319
Windows Resource File 2 41 47 249
diff 1 31 74 240
awk 5 69 145 236
CSS 1 31 28 140
Markdown 1 22 0 64
Protocol Buffers 1 49 170 49
Windows Message File 1 8 1 29
DTD 1 8 33 20
TeX 1 3 6 8
---------------------------------------------------------------------------------------
SUM: 2167 105502 126306 641704
---------------------------------------------------------------------------------------
13
inn-2.6.1
% cloc inn-2.6.1
894 text files.
885 unique files.
406 files ignored.
github.com/AlDanial/cloc v 1.70 T=1.55 s (314.1 files/s, 138891.9 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 262 16751 20114 94598
Bourne Shell 28 6071 6476 35541
m4 37 1091 986 10219
C/C++ Header 94 1390 3311 4503
make 24 579 230 3556
Perl 22 343 1355 3107
Visual Basic 5 341 0 2588
yacc 1 212 19 842
Python 10 137 445 343
lex 1 46 12 197
CSS 1 3 7 79
XSLT 1 8 42 78
Korn Shell 1 26 81 18
Oracle Forms 1 3 0 15
-------------------------------------------------------------------------------
SUM: 488 27001 33078 155684
-------------------------------------------------------------------------------
14
IRCD-Hybrid
% cloc hopm-1.1.4
101 text files.
94 unique files.
14 files ignored.
github.com/AlDanial/cloc v 1.70 T=0.26 s (331.9 files/s, 230088.4 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Bourne Shell 10 4133 4547 24884
m4 16 1009 131 9678
C 23 1903 2632 8746
C/C++ Header 30 195 443 814
yacc 1 147 28 552
lex 1 60 26 285
make 5 6 0 70
YAML 1 5 1 19
-------------------------------------------------------------------------------
SUM: 87 7458 7808 45048
-------------------------------------------------------------------------------
15
比較結果
ソフトウェア 総code数 主な言語
Mastodon 63,815 Ruby,JavaScript
bind 641,704 C
inn 155,684 C
IRCD-Hybrid 45048 Shell + C
Mastodonは高機能な割にコンパクト
モダンな開発言語のパワー!!
16
Mastodonのコードの特徴
●
機能のわりには相当コンパクト
●
フレームワークをうまく使っている
●
複数のソフトウェアを連係動作させている
●
運用を楽にするために、Dockerのコードも
記述されている
●
Github上でメンテナンスされている。
●
進化がとても速い
17
Mastodonが利用するソフトウェア
●
Ruby on Rails
●
PostgreSQL
●
Sidekiq
●
Redis
●
Node.js
●
Docker(使わなくても良い)
18
運用上必要になる外部ソフトウェア等
●
Linux OS基盤
●
リバースプロキシ(Nginx)
●
メールサーバ(Postfix)
●
監視ツール
19
実装上の問題その1
●
インストールが大変
●
アップデートが大変
●
理解すべき技術要素が多い
●
トラブルシュートが難しい
→ちゃんと運用するのはハードルが高い
20
実装上の問題その2
●
アカウント削除機能がない
(※バージョン1.4.2で実装されました)
●
管理機能が弱い
●
外部認証が未実装
●
高負荷環境時にボトルネックになる箇所が存
在する
→商用サービスとして利用するには機能不足
21
インスタンス間通信に用いられる
OStatusの問題
●
まとまった仕様書がない
●
インスタンスをまたいだメッセージの削除が
できない?
●
URIをキーに用いてしまっている
●
安全なインターネットを前提にしている
→プロトコルとしてまだ発展途上?
22
耳にしたことがあるクレーム
●
PostgreSQLではなくMySQLを使っ
て欲しい
●
Reactを使ってるのはダサい
●
UIが絶望的に良くない
●
APIとUIは分離させるべきでは
23
Mastodonは今後どう発展するか
24
オイゲン・ロチコ氏かく語りき
at 「マストドン」ブリーフィング(6/7)
●
Rubyが好き。
●
PostgreSQLはRuby on Railsのdefaultチョイス。
●
最初はAPIだけを実装した。
●
元々Twitterのヘビーユーザであり、UIはそこからヒントを得て作った
もの
●
シングルサインオン等は実装予定。
●
プロトコルも変えていく。
●
最近のアップデートは変化が大きくて大変なのはごめんなさい。で
も必要なこと。
→確信を持って設計と実装をしている。今後も確実に進化する。
25
こうなると嬉しい?(インストール)
apt install mastodon
curl -fsSL https://****/ | sh
→やればできるはず
26
こうなると嬉しい?(インスタンス起動)
kubectl run mastodon --option...
→これもやればできそう
27
こうなると嬉しい?(運用しやすい実装)
●
コンポーネント毎にコード分離
– データストレージ
– バックエンドコード
– フロントエンドコード
– アプリコード
●
デプロイが楽な言語でリライト
– Go言語とか?
→別実装が出てくるんじゃないかと期待
28
こうなると嬉しい?(クラウドサービス)
●
SaaS
– さくっとインスタンスを構築
– アップデート等はおまかせ
●
BaaS
– アプリに特化し、APIだけを提供
– 良くできたアプリがあればWebUIは不要になる
→流行が続くなら、そういう動きもある?
29
こうなると嬉しい?(OStatus)
●
プロトコルを進化させる
– インスタンスをまたいだdeleteメッセージは多分必要
– URIに紐付かないUUIDがあったほうが便利?
– 大規模化した場合にスケールする仕組みが欲しい?
●
別のサービスがOStatusをサポート
– TwitterがOStatusをサポートして最大インスタンスになる未
来?
– mixiのリブート??
→流行が続くなら、そういう動きもある?
30
面白いソフトウェアなので
いじってみると楽しいですよ
終

janogdon.netはじめました