:date: 2010-06-30 20:15:00 :tags: Event, python =============================================================== BPStudy#34 に参加しました キャバクラとErlangについて =============================================================== `BPStudy#34`_ に参加してきました。 いままで3回くらい申込みだけして全然参加出来てませんでした。 ということで、今回初参加。ネタは"AWS+Tornado+Django+AS3"と"Erlang"。 # pyspaのネタも書かないとなー? 第一部「Amazon Web Service+Tornado+Django+AS3によるリアルチャットサービスの裏側」 --------------------------------------------------------------------------------- * 発表 * @torufurukawa * @akisutesama * @wozozo * https://xacariva.jp/ * 特徴: アバター, チャット, 内緒話チャット, キャバクラ 導入 by @torufurukawa ~~~~~~~~~~~~~~~~~~~~~~ * チャットのレスポンスは大事だよね * EC2の応答性悪いかも知れないよね? * 国内のサーバーよりはやはり重い * staticについてはクラウドフロントを使うのでなんとか * スケーラビリティーを考慮してEC2に決めた * 構成 * nginx: フロント * django: アバターの着替えなど * CloudFront: 静的データ(画像/SWF) * Tornado: チャット, ロングポーリング * nginx * ロードバランシング * 静的コンテンツ * SSL SWF by @akisutesama ~~~~~~~~~~~~~~~~~~~~ SWFの話。開発中のswfファイルの分割などについての苦労話。 Flashは開発者向けじゃない感じがトークから伝わってきました(笑) * SWCはマジ使えない http://akisute.com/2010/02/flash-swc.html * 通信リクエストキューの独自実装 * シリアル通信 * パラレル通信 * 排他的通信 * デザイナーさんがデザインを自由に決められる * クローゼット、部屋、歩行領域など。 * レイヤーがたくさん、たくさんあります * アバター * 1つのアバターを表示するのに120個のswfをとってきて合成 * 遅そうに聞こえるがかなり実用的な速度で実現している * アニメーション、着せ替え(重ね着)、表上アニメーション * 重ね着の順番は自由。スーツの上にシャツとか * 10人くらい出すとパーツが1000を超える * アバターを歩かせる * A*アルゴリズムを使う。経路探索。(清水川の大学の時の研究課題でした。なつかしい) * 目標近傍72ピクセルまで近づく、などもA*の拡張でできた * イスに回り込んで正しい角度で座る、という鬼門 * 成功した点(プログラム) * Trnadoのパフォーマンスがすさまじく強力, 25人同時スパムも難なく処理 * 通信制御のキューは比較的うまくいった * リリースとテストのビルド環境を分けた * ASUnitとかあるけど非同期通信のテストなどは諦めた * 環境を分けたメリットはリリース回数に比例して出てきた * 成功した点(デザイナー) * デザイナーさんにFlashの知識があると断然楽! * デザイナーさん、ディレクターさん向け確認ツールを用意した * アバターをAIRですぐ確認できる * ローカルファイルを読めるのでデザイナーさんが更新してすぐ確認できる * 失敗した点 * 全面Flashで作っていた方が良かったかも * HTTPリクエストが多すぎる * API実行がX本 * チャットが常時1,2本 * アバター読み込み時に100本以上の通信 * IEは同時に2本しかできない * サブドメイン切って対処した * 椅子はやめとけ * アバターとの重ね合わせ、アニメーションとの整合性など、とにかく大変 * flaファイルはできるだけ分割しとけ うーん、Flashの話は難しいというか、Flashでとても難しいことを実現している。 結論、 **椅子はやめとけ** 。 Tornado by @wozozo ~~~~~~~~~~~~~~~~~~~~ @wozozo 本人を初めて見ました。 * チャット以外は全てDjangoでやっています * 10000コネクションくらいいけた * Tornadoのデモコードからインスパイア(笑)されたコード * 自宅サーバーでデモ(笑) * 自宅サーバー程度のスペックでも20人くらいじゃ全然落ちない * デバッグが大変。稼働中のオンメモリの内容を確認する * タイムゾーンがハードコーディングで'+0:00'になってた 資料公開希望。シーケンス図とかメモれへんねん。 第二部 Erlang/OTP ------------------ 発表 @voluntas Erlangプロダクト ~~~~~~~~~~~~~~~~~ * RabbitMQ * AMQPサーバ * VMWareに買収された * オープンソース * ejabberd * XMPPサーバ * eXtensible messaging and Presence Protocol * GoogleTalkが採用しているプロトコル * オープンソース * MochiWeb * Webサーバ * MochiMediaで開発 * FacebookやCouchDBで採用 * CouchDB * ドキュメント指向DBサーバ * IBMが投資 * T-MobileやBBCで採用 * オープンソース * Ubuntu 10.0.4に最初っから入ってます * ErlyVideo * RTMPサーバ * 1台で数千クライアントを処理可能...らしい(ロシア語資料しかない) * ロシア製 * オープンソース * パケット可視化 * WebSocket Server(Erlang)(HTML5) * WebGL (HTML5) * アクセンステクノロジーでDEMO用に開発 * @MiCHiLU + @webos_godies * この組み合わせは世界初! * AppEngineで作った * サーバーからクライアントにJSONデータを送り続ける * ブラウザはJSONをWebGLで描画し続ける * ErlangサーバーなのでTornadoには負けません Erlangってなに? ~~~~~~~~~~~~~~~~ * 並列指向言語 * 関数型って言ったら怒られたので並列指向って言うことにします * spawn(Moduke, Function, Args)で別プロセスを生成可能 * 軽量プロセス(fibre?) * プロセス生成が2,3マイクロ秒 * コンテキストスイッチはVMがうまいことやってくれる。高速 * メッセージパッシング * 再代入禁止 * A=10の後にA=20と書けません * Aという箱に10を入れているのではなく、10という数字をAに束縛している * グローバル変数禁止 * 関数単位でしか値が存在できない * グローバル変数という概念がそもそもない * パターンマッチ * パターンマッチがあればifは要らない * ifは1万行のうち1回使うかどうか * 関数の引数でパターンマッチ * 関数の評価結果はcase ofでパターンマッチ * ビット列でパターンマッチ * <> = <<255>>. でA=1,B=3になる * ネットワークパケットをパターンマッチで処理分岐する * これをCでやることを考えると泣けてくる OTP ~~~~ * Open Telecom Platform * 名前は負の遺産じゃない? * OTPがあることが重要。Erlangそのものより重要 * サーバーが簡単に立てられる * そのサーバーを監視するSuperVisorも用意されている * gen_server, supervisr, applicationの3つが基本 ErlangのDB ~~~~~~~~~~~ * Mnesia * Erlang標準の分散DB * メモリとファイルの二方式 * 障害にも強い * 同期はTCP * トランザクション処理すれば同期先まで保証 * 2GBまでしか入らないという制限も。 * QLCというSQLっぽいものもあるけどそんなに使えない * [ A || A <= [1,2,3,4] ]. * << A:8 || A<- [1,2,3,4] >>. (書き方忘れたvoluntas) * [ A || A <= mnesia:table(Schema), B <- mnesia:table(Schema2), A =:= B] * mnesiaの使い方 * mnesia:write(Table, A). * mnesia:read(Table, Key). * activity いいよ! CouchDBは自前のBTreeで作っている R14A ~~~~~ * 末尾のAはアルファリリース, Bはベータ * 2010/6/16 にR14Aがリリースされた * けっこう大きく更新された * 9月にR14Bが公開される予定 その他 ~~~~~~~ * こぼれ話 * ErlangはJavaより遅くてPythonより早いです * 超簡単に負荷ツールを作れるのでTornadoくらい簡単に落とせます * でも経験上、先に送信元のルーターが落ちます(笑) * Erlangはすごい簡単。覚えること少ないのでPythonより簡単 * パターンマッチ覚えたらPythonに戻れない * 将来載せたい機能は"取りあえず載せて置いて、アンドキュメント&自己責任" * Erlangはネットワークサーバーを書くための言語 * 文字列処理は本気でいけてない。OSSのサードパーティー製も放置が多い * XMLパーサはひどい (xmerl) * やるなら自社または個人で開発してGitHubなどに公開して採用する方がよほどよい * ScalaはXMLのパターンマッチが出来る(@methane) * Erlang陣営はXMLイケテナイと思っているので期待しない * C拡張するには * SEGV覚悟で内部に結合するか(速いけど落ちる) * 別プロセスにして通信するか(遅い) * ASN.1を食わせるとパーサーをはき出してくれる * LDAPのを食わせるとLDAPのプロトコルパーサーをすぐ作れる * Q and A * プロセスの優先度設定などは? -> 出来ません * escriptがR14Aで良い感じ * OMakeいいよ * OCamlで作られたMake * 1台に幾つのErlangを立ち上げるのがよいか? -> 1台1つが良いと思います -> 1つ落ちても死なない構成にするのがよい * GCの停止時間はありますか? -> 無いです * TCPコネクション開きすぎでボトルネックにならない? -> fdは100万くらいいけるので大丈夫 * デバッガは無いんですか? -> printfです(笑) * UnitTestは? -> あります。ゴリゴリテスト書きましょう * (voluntas) 本音を言ってしまえば、Erlangに使い道は無いです * Erlangベースのプロダクトを使う、というのはあり。 * MochiWebは現実的 第三部 懇親会 -------------- 13人申込み http://atnd.org/events/5202 .. _`BPStudy#34`: http://atnd.org/events/5201 .. :extend type: text/x-rst .. :extend: .. image:: 20100630_bpstudy34_1.* :width: 33% .. image:: 20100630_bpstudy34_2.* :width: 33% .. image:: 20100630_bpstudy34_3.* :width: 33% .. image:: 20100630_bpstudy34_4.* :width: 33% .. image:: 20100630_bpstudy34_5.* :width: 33% .. image:: 20100630_bpstudy34_6.* :width: 33% .. image:: 20100630_bpstudy34_7.* :width: 33% .. image:: 20100630_bpstudy34_8.* :width: 33% .. image:: 20100630_bpstudy34_9.* :width: 33%