#pyfes 2013.11に遊びに行ってきました。

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氏(オライリー・ジャパン)

原稿募集のお知らせ // Speaker Deck

  • オライリー・ジャパンがあなたの原稿を電子書籍にします。
  • 達人出版会だけじゃないんですよ!
  • 数十ページから200ページ位の分量でOK
  • テーマ選択や構成案から相談に乗ります
  • 今ならAuthorキャップが貰える!
  • ReVIEW でやってるけどSphinxでおk
  • 編集者がアドバイス/サポートします
  • 連絡ください

Pythonistaもlsを読むべきか? @flyingfoozy

Pythonista も ls を読むべきか?

PythonでのファイルシステムAPIの性能の話

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

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
    • 軽量Ruby、組み込み向け
    • Luaから見るとCとの連携が非常に楽
      • Luaのスタック操作と比べると直感的
      • Luaはtableしかなくてつらい。
  • ngx_luaと のちがい
  • ngx_lua
    • nginxの設定ファイルをLuaで書く
    • nonblockingアーキテクチャと親和性が高い
    • lua-jitと比べると強い
    • 色んな物をまとめたものがOpenResty
  • mruby_nginx_module
    • まだまだ発展途上。とりあえずノンブロッキングにしたい
    • 今のところ使える機能
      • コードキャッシュ
      • ハンドラフック
      • nginxの各種機能へのアクセス
  • 記述例
    • 各処理フェーズでデータを共有できる
  • (mod|ngx)_access_token
    • S3のクエリ文字列認証っぽ機能を提供
    • 特定のアクセストークンにも基づいた認証
    • リソースの有効期限設定
    • 認証方式
    • Text = Method + Uri + Expires + AccessKey
    • hmac_sha1 = hmac_sha1(text, secretkey)
    • *_access_tokenと比べて10行で書けた

pixiv を支えるインフラの技術 @harukasan

  • PixivではGoがプロダクションに投入されました→拍手
  • 拠点、オフィスとIDCF+新DCに画像クラスタ
  • オフィス拠点ではベニアサーバーをラックにマウントしてる
  • pixiv Image Cluster

    • 画像配信クラスタ
    • 2010年から運用開始
    • メインコンテンツであるイラストを超高速に処理するために最適化
    • 2,30台、二段キャッシュ
      • 表がnginx、裏がATS
    • ユーザーIDベースでサーバーを分散
      • img1xx.pixiv.net
      • 40-60回のDNSリクエストが発生して家庭用ルータがDNS解決できなくなっていた
    • キャッシュ戦略
      • メモリキャッシュ + ディスクキャッシュ
      • スイッチ間トラフィックを削減するため
      • メモリ価格の定価
      • ioDrive2とか高いけど1/5、1/6の性能で良ければ安いSSDでいい -新イメージストア
    • 作成日 + IDベースのシーケンシャルなURI
    • nginx_luaがkyototycoonにオブジェクトのステータスを聞く
  • 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は死んだ - Google ドライブ

  • 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は死んだの?
    • もともと特定のプロジェクト用の運用方法だった
    • 運用できるかはプロジェクト次第
  • 巨大リポジトリの復権

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

Ansible入門...?

  • ロゴがかっこ悪いのは誤解
  • 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表示
  • モジュール
    • unarchive
      • untarする
    • shell module
      • ローカルのfoo.shをリモートにコピーして実行
      • fabricとかは、pythonで書く必要が。
    • 起動モジュールたくさん
    • 全部のモジュールが冪等性があるわけではない。
  • 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
    • スイッチ製品
    • SSH/Python ready。スイッチもAnsibleで制御可能。かっこいい。
  • 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