conbu api の開発

Post on 22-Jan-2018

5.926 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

CONBU API の開発2015-08-22

@ YAPC::Asia 2015 TAKANO Mitsuhiro a.k.a. @takano32

お前、誰よ

@takano32

高野光弘 / TAKANO Mitsuhiro

Ruby committer ???

最近コミットしてないけどいまもコミット権あります…

日本UNIXユーザ会 理事

CONBU Core Team Member

今日の帽子はこれ ↑

興味分野とか

半田ごてとかマイコンは友だち

ネイティブアプリケーション楽しい

バイトで Windows 向けビデオチャットとか作成してた

OS とか 仮想化機構

前職で仮想化機構を作ってた

言語処理系オタク

分散オブジェクトの研究

電子商取引サイトで小遣い稼ぎ

Javaェ・・・

大規模インフラ管理

国内大手サービスプロバイダ

+ NETWORKBGP オペレーションとか

侵入検知システムとか

CONBU での立ち位置は ネットワークもよくわかる プログラミングおじさん

WEB系のみなさん こんにちは!!!

ネットワークの話をします

うっそっぴょん~ ここからは

HTTP REST API の話ですみんな大好き Web 2.0 (^−^)

CONBU API の紹介

CONBU API の発端

YAPC スタッフとネットワークの話になった

ネットワークの情報提供できたら面白いよね

CONBU でも API があれば面白いかもと話題になる

カンファレンスのネットワーク利用者が自分の利用しているネットワークについての状況を調べることができるアプリケーション作ったりとかできるんじゃね?

CONBU API の要求仕様

接続数公開すればよくね?すみませんすみませんすみません

まだ他の情報については整理できてません \(^O^)/

CONBU API V0.9

7月末の土日で作成

8月2日にクラブイベントで結合テスト

YAPC に向けてのテストフライト

いろいろ問題が起こった・・・

後ほど解説

CONBU API の基本構成

API サーバ

HTTP リクエストに応答してネットワーク情報を返却

返却する情報の生成は既存の死活監視ソフトウェア

死活監視ソフトウェア

Zabbix が JSON-RPC で接続数を取得できたのでそれを利用

CONBU API の基本構成

ZabbixAPI Serverthe Internet

JSON-RPC で情報取得

JSON 形式でデータ提供

CONBU API の 機能仕様

無線LANアクセスポイントの 接続数が取得できる

続きは WEB でhttp://conbu.net/doc/conbu-api/

読めば分かるし、説明するの面倒くせぇ

発生したトラブルと対応Web系のみんなは深夜にアラートが鳴って

電話に起こされるのとか好きでしょう!!!

CONBU API 初期構成

ZabbixAPI Serverthe Internet

リクエストごとに叩きまくり!!!

HTTPJSON-RPC

富豪的!ナウい!!!趣味プログラミングの醍醐味

実装イメージ

API は死んだ。何故だ!坊やだからさ

成果物イメージ

頓死例 突然 JSON-RPC が 502

[Sun Aug 02 14:35:17 2015] [error] [client 10.255.254.101] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 7899804 bytes) in /usr/share/zabbix/include/classes/json/CJson.php on line 142

犯人はこいつか?

原因はすぐに判明

PHP の memory_limit が低すぎる

/etc/php.ini を書き換えてみる

php -i や <? phpinfo(); でサイズアップ確認

謎のトラブル

ZABBIX のメモリだけ 増えない!!!

パッケージの設定だった

パッケージで入る ZABBIXの設定

狂ってるだろ!!!

共犯者はこいつ

まだ続きます

ZABBIX API が挙動不審

グラフに対応したデータを取れる

グラフにプロットされているのはアイテム

グラフを指定してアイテムを取得できるはずが…

なぜかすべてのグラフのアイテムを取得してくる

ZABBIX がいつの間にか ガッツリとメモリを喰ってる!!!

油断してるとやんちゃする

普通の男の子に戻りたい

システム構成を改善ガンガン Zabbix の API を叩くのを止めよう

富豪的にヤリ過ぎた

CONBU API V1.0 の構成

ZabbixAPI Serverthe Internet

API Daemon

定期的に取得

データを分散オブジェクトにキャッシュ

分散オブジェクトを共有

バックエンドの負荷が リクエスト数に依存しない

結果

驚くほど安定して 動くようになってしまった

特に話すことなくなったのでコードでも読むとよい

https://github.com/conbu/conbu-api-server https://github.com/conbu/conbu-api-daemon

活用事例

ヒートマップ

http://ikosin.github.io/conbu-api-server/

ヒートマップ

GitHub Pages でホスト

API では Access Control Allow Origin ヘッダで他のド

メインからの参照を許可した状態の JSON がきます

Canvas で描画

はい

ヒートマップ

まとめ

CONBU で提供しているネットワークについて、部屋ごとなどの単位で接続数を提供できるようにした

PHP は読みたくない

PHP は読みたくない

今後の展望夢ってやつですよ

言うだけなら何でも言える

今後の展望

あのセッションに興味があるひとはこのセッションにも興味がありますリコメンド

MACアドレスを識別子に使ってセッションごとに接続の遷移をトレースすればできそう

休憩室はこちらです機能みたいなの

空いているセッションなら座るくらいは許してくれるでしょ

CONBU API Daemon の複数バックエンド対応

Zabbix 以外からも集約した情報があればさらに API で提供できる情報が増える

最後に

API を使って何か作ったりすると CONBU によるネットワークの品質が 上がったりするかもしれないです

ご静聴ありがとうございましたMay the Internet be with you

top related