pyfes/201311.rst at develop · pyspa/pyfes
Python Developers Festa 2013.11 - connpass
Pyfesに行ってきました。土日に昼まで寝ている自分としては9時45分の開場期限に間に合っただけで快挙でしたが、Go, HTTP2.0, ストレージ, 構成管理と、今個人的に興味のある分野の話が聞けて有益な一日でした。会場のオラクル青山センターはトイレがオシャレでした。以下、発表内容メモ(聞き漏らし聞き間違いあり)
Go ハンズオン @ymotongpoo
教材:Talks - The Go Programming Language
P2Pチャットシステムを実装するハンズオン。自分は参加資格であるA Tour of Goが半分までしか終わらなかったので、参加するでもなく話を聴いてました。A Tour〜終わらせてから改めて挑戦したいです。Goは書けるようになりたいですね。
LT
原稿募集のお知らせ(Sphinx可)@turky氏(オライリー・ジャパン)
- オライリー・ジャパンがあなたの原稿を電子書籍にします。
- 達人出版会だけじゃないんですよ!
- 数十ページから200ページ位の分量でOK
- テーマ選択や構成案から相談に乗ります
- 今ならAuthorキャップが貰える!
- ReVIEW でやってるけどSphinxでおk
- 編集者がアドバイス/サポートします
- 連絡ください
Pythonistaもlsを読むべきか? @flyingfoozy
- os.path.isdir()とかはシステムコールのコスト高い
- ファイル名解決の直接コスト、間接的なコスト
- readdir使おう
- fstatatシステムコール使おう
- 起点ディレクトリからの相対的名前解決
- lsを読まずにプログラマを名乗るなを読もう!
PyConJP2014 開催に関するお知らせ @shkumagai
- PyCon JP 2014スタッフ・メディアチーム
- 座長が変わり、動き始めたところ
- 小さな組織で動いていく
- スタッフ募集中!
HTTP2.0 概要 @jxck_
HTTP2 & HPACK #pyfes 2013-11-30
- 2013年11月にdraft-08策定。今日はその話
- HPACK(ヘッダ圧縮)が途中から別のRFCに分かた
- HTTP/1.1はドキュメントベースだった。ステートレス。
- pipelining/keep-aliveで延命してきたよね
- HTTP2は今は割とSPDYとは違う感じになってる
- 2014年春に決まる予定だが無理なのでもっと先になる
- Google的にはどこかでSPDYを切ってHTTP2.0にしていきたい
- HTTP2.0のRFCはGithubで管理されてる。議論はML
- ネゴシエーション、ALPN/Update
- HTTP/2.0始め方
- http:// の場合 Upgrade Header
- https:// の場合 ALPN (application layer protocol negotiation)
- 対応が自明な場合は最初なからhttp2.0でしゃべってもいい
- TLS-ALPN、クライアントが喋れるプロトコルのリストを提出し、サーバーが選ぶ。(Accept-*みたいな?)
- 虚偽申告なクライアントを叩き落とすMagic Octetsを使う
- サーバープッシュ、必要になるリソースをクライアントのキャッシュに突っ込んでおく
- 以前送ったヘッダーとのdiffだけ送る。スタティックなテーブルが定義されておりインデックスで送る(ハフマン圧縮)
- ヘッダ、63byte→16byteに
- HTTP2.0実装
- 日本は世界で1番か2番目に実装の多い国に
- wireshark + TCP dumpで実装しよう
- nghttp2
- 世界標準のCインプリ
- HTTP2Cat
- Webツールで試せるようにしたもの
- オライリー High Performance Browser Networking
- By Ilia Grigorik(Google)
HTTP2.0 クライアント nghttp2プロジェクト @tatsuhiro_t
http2client-pyfes2013 - Google ドライブ
- draft-06/07/08対応
- libnghttp2はフレーミングの実装
- HTTPセマンティクスやネットワークIOはアプリケーションの仕事
- src/nghttp -nv http://twitter.com
- ダイレクト接続
- クライアント接続ヘッダー(24バイトのマジックオクテット)を送信。
- NPNはALPNの逆。標準化されない
- HTTP2におけるリクエスト/レスポンスの1トランザクションはストリームと呼ばれる
- HTTPヘッダー → HEADERSフレーム
- HTTPボディ → DATAフレーム
- フレームにはサイズ16383バイト制限
- 複数のフレームに分割して送れる
- HTTPリクエストの多重化(これがHTTP2.0の本領)
- 2では1サーバーに対して原則1接続。
- リクエスト順にレスポンスを返す必要がない
- クライアントはリクエストの優先度を設定できる(無視可)
- プロキシ
- CONNECTも問題なく多重化
- フローコントロールの考慮
- Firefox(try-build)がお手軽なクライアント実装
- node-http2, http2(ruby)
nginx + mruby @cubicdaiya
mruby_nginx_module at pyfes 2013.11
- https://github.com/cubicdaiya/mruby_nginx_module
- mruby_nginx_module
- ngx_mrubyとの違い
- (mod|ngx)_mrubyはApacheとNginxと同じように書くのが目的
- mruby
- ngx_luaと のちがい
- ngx_lua
- mruby_nginx_module
- まだまだ発展途上。とりあえずノンブロッキングにしたい
- 今のところ使える機能
- コードキャッシュ
- ハンドラフック
- nginxの各種機能へのアクセス
- 記述例
- 各処理フェーズでデータを共有できる
- (mod|ngx)_access_token
pixiv を支えるインフラの技術 @harukasan
- PixivではGoがプロダクションに投入されました→拍手
- 拠点、オフィスとIDCF+新DCに画像クラスタを
- オフィス拠点ではベニアサーバーをラックにマウントしてる
pixiv Image Cluster
pixivのログ解析基板
- PHPアプリケーションのログ、MySQL/neoagentのスロークエリログ、Front ServerのAccess Log→Fluentd→File System/MongoDB/ElasticSearch(kibana使いたいので)
- Error Viewr
- Slow Query Viewer
- Kibana 3
- エラー時にログがバーストしてFluentdが死ぬ対策でログをJSONにしてからFluentd ?
- Munin/Nagios/Monit/Cron
- Cluster Admin
- Capistrano/Subversion
- /etc/以下の設定ファイルがそのままSubversionの管理下のディレクトリに。
- / 設定反映はCapistranoを使用して全台にデプロイ
- LVS管理画面
- MySQLの遅延監視
- 「尖ったことはせず、無理せず運用出来る状態にもっていく」
「git-flow は死んだ」@troter
- git-flow = A successful Git branching model
- git-flowはブランチの命名規則、マージ方法を決めて管理するブランチ戦略の名前
- masterはタグ専用、developは統合用…
- メインラインモデルより「安定trunkパターン」に近い
- git-flowはgit-flowをサポートするgit用のコマンド群
- git flow master develop finish ← master,developにマージする
- でも…git-flow使ってる?
- git-flowの辛いところ
- 操作が抽象化されてる、gitが上達しない
- 実装上の制限、2つのブランチにしか同時にマージできない
- ちょっとおおげさ
- みんなはブランチ管理したくない。コードに集中したい。
- ブランチを増やさないGithub-flow的な運用が流行ってるらしい
- Github-flow
- masterは常にデプロイ可能、開発はmasterからブランチを切る
- 開発が進んだらmasterにPR
- git-flowが発表された当時、GithubはPRをサポートしていなかった。git-flowはPR出現以前の開発フロー
- PRでもっと軽量に
- git-flowは死んだの?
- もともと特定のプロジェクト用の運用方法だった
- 運用できるかはプロジェクト次第
- 巨大リポジトリの復権
- 巨大リポジトリといえばSubversion!
- Subversionは今も絶え間なく進化している!→会場困惑
- svn 1.8ではA successful git branching modelが可能!
nginx+Lua @moriyoshi
nginx_luaモジュールの技術解説/モジュール紹介
- rewrite_by_lua
- 認証のかかったS3コンテンツを転送
- access_by_lua
- 日本時間の9時〜21時以外のアクセスを禁止する
- header_filter_by_lua
- X-Powered-Byを強制付加して、PHPで書かれているように演出したい時に便利
組み込み関数
- nginx.location.capture
- 内部的にHTTPリクエストしてその結果でハンドリングできる
- ngx.shared
- 共有メモリで簡単なキャッシュで
- Lua文法解説
Ansible入門 @r_rudi
- ロゴがかっこ悪いのは誤解
- Chef/Puppet/Salt/cfengine/jujuとかと同じ構成管理ツール、プロビジョニングツール
- 例のvelocity 2010のLee Thompsonの図
- Ansibleはオーケストレーション・コンフィギュレーションをカバー
- 本日の前提知識
- Ansibleはタスクを実行する
- Playbook == Taskのセット
- 必ず上から順に実行される
- % ansible-playbook hoge.yml
- -i inventry file -u username -k ssh pass -C check mode -D diff表示
- モジュール
- deployのしかた
- wait_for = 「8080ポートが立ち上がるまでまつ」みたいな指定ができる。10秒くらいスリープしとこうみたいな感じじゃない。
- rolling update
- serial: 1 ←1台ずつ実行できる。10にすれば10台ずつ。
- Python API
- Ansible + Flask
- AnsibleWorks AWX
- きれいな画面でリリースできたり、権限管理とかできる。
- 10台まで無料。
- demo
- 何台くらい扱えるの?
- 5000台のサーバーに使ってるユーザーがいる
- Accelarated mode
- Arista networks
- DBを扱うモジュールも多い。
- Notification
- まとめ
- 自動実行ツールとしても使えるよ
- moduleたくさん
- 簡単に作れる
- python不要
- 実行速度も十分速い
- 最近Ansible本が出た
- 100ページくらいの平易な英語の本
- Ansible Configuration Management
業界団体の運営について @aishimau
- OEM Device Sales for Consumer market
- 「だれが」「なんの」「なにを」「どうする」組織か
- PC業界の マーケットの 拡大を 目指す
- スポット的な季節労働
- 会社のゴール設定を理解することが大切
- サポート切れるXPどうするのか、とか
- 業界団体の問題は、人が少ないので人がいなくなると回らない
- 何にしても大事なのはこれら。これができればなんの仕事でもできる
- 話を聞く
- 理解する、傾聴する
- 整理する
- 考える
- 説明する
- さらに何を言われてもブレない心が大事。
- 硬軟取り混ぜる。
定期プレゼン
Python 3.4 @torufurukawa
- 構文/文法の追加無いけどライブラリいろいろ追加
- asyncio
- シングルスレッドで並行処理する。未ドキュメント
- enum
- 列挙型。定数を安全に評価できる。name,valueもてる
- ensurepip
- pipがインストールされた状態にする
- pathlib
- パス/ディレクトリ/ファイルをオブジェクトっぽく操作する
- p = Path(file).parent.resolve()
- dirname / filename ←でjoinするという… (エー)
- selectors
- selectモジュールは低レベル
- selectのファクトリっぽい
- statistics
- 簡単な統計計算
- tracemalloc