オープンソース開発者がDeNAを選ぶ理由

54
オープンソース開発者が ディー・エヌ・エーを選ぶ理由 株式会社ディー・エヌ・エー 一穂

description

 

Transcript of オープンソース開発者がDeNAを選ぶ理由

Page 1: オープンソース開発者がDeNAを選ぶ理由

オープンソース開発者が ディー・エヌ・エーを選ぶ理由

株式会社ディー・エヌ・エー

奥 一穂

Page 2: オープンソース開発者がDeNAを選ぶ理由

自己紹介

 氏名: 奥 一穂  所属: 株式会社ディー・エヌ・エー       CTO室

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 2

Page 3: オープンソース開発者がDeNAを選ぶ理由

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 3

主な仕事

 Palmscape  1997年~ 後に Xiino に改名  Palm OS 用ウェブブラウザ (実質世界初)

 IBM WorkPad, Sony CLIE 等にバンドル  NTT DoCoMo にライセンス

 M.I.T. TR100/2002 受賞  オフラインコンテンツの配信プラットフォームを兼ねる

 Webアプリケーション統合開発環境の開発  IPA 未踏 2004 – スーパークリエータ

Page 4: オープンソース開発者がDeNAを選ぶ理由

主な仕事 (2)

 前職: サイボウズ・ラボ株式会社  2005年8月~2010年11月  Japanize

 Web UI の日本語化サービス

 パストラック  リアルタイムアクセス解析/データマイニングサービス

 Q4M  メッセージキュー (MySQLの拡張)

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 4

Page 5: オープンソース開発者がDeNAを選ぶ理由

主な仕事 (3)

 現職: 株式会社ディー・エヌ・エー  2010年11月入社

 システム統轄本部IT基盤部

 2011年5月より CTO室

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 5

Page 6: オープンソース開発者がDeNAを選ぶ理由

アジェンダ

 どうして DeNA に入ろうと思ったか  前職で開発した OSS の話と絡めて

 DeNA に入ったあと、どのように OSS と関わっているか

 一般論は難しいと思うので、自分の話になります

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 6

Page 7: オープンソース開発者がDeNAを選ぶ理由

入社前の話 (ビフォー)

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 7

Page 8: オープンソース開発者がDeNAを選ぶ理由

Q4M

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 8

Page 9: オープンソース開発者がDeNAを選ぶ理由

What is Q4M?

 A message queue  runs as a storage plugin of MySQL 5.1

 Why is it a MySQL plugin?  accessible by using existing MySQL clients

 no need for a new client library

 administrable by using SQL  friendly to DB admins

 First release: Jan 2008

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 9

Page 10: オープンソース開発者がDeNAを選ぶ理由

Design Goals of Q4M

 Robust  Does not lose data on OS crash or power failure

 necessary for Tokyo wo. nuclear power plants… orz

 Fast  Transfer thousands of messages per second

 Easy to Use  Use SQL for access / maintenance  Integration into MySQL

 no more separate daemons to take care of

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 10

Page 11: オープンソース開発者がDeNAを選ぶ理由

Users of Q4M

 Many leading web services in Japan  DeNA Co., Ltd.  livedoor Co., Ltd.  mixi, Inc.  Zynga Japan (formerly Unoh, Inc.)

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 11

Page 12: オープンソース開発者がDeNAを選ぶ理由

What is a Message Queue?

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 12

Page 13: オープンソース開発者がDeNAを選ぶ理由

What is a Message Queue?

 Middleware for persistent asynchronous communication  communicate between fixed pairs (parties)  a.k.a. Message Oriented Middleware

 MQ is intermediate storage  RDBMS is persistent storage

 Senders / receivers may go down

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 13

Page 14: オープンソース開発者がDeNAを選ぶ理由

Minimal Configuration of a Message Queue

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 14

 Senders and receivers access a single queue

Sender Receiver

Queue

Page 15: オープンソース開発者がDeNAを選ぶ理由

Using MQ as a Relay

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 15

 Separate queue for sender and receiver  Messages relayed between queues

Sender

Queue

Receiver

Queue

Relay

Page 16: オープンソース開発者がDeNAを選ぶ理由

Merits of using Message Relays

 Destination can be changed easily  Relays may transfer messages to different

locations depending on their headers

 Robustness against network failure  no loss or duplicates when the relay fails

 Logging and Multicasting, etc.

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 16

Page 17: オープンソース開発者がDeNAを選ぶ理由

Message Brokers

 Publish / subscribe model  Separation between components and their

integration  Components read / write to predefined queues  Integration is definition of routing rules between

the message queues  Messages are often transformed (filtered) within

the relay agent

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 17

Page 18: オープンソース開発者がDeNAを選ぶ理由

What about Q4M?

 Q4M itself is a message queue  Can connect Q4M instances to create a

message relay  Provides API for creating message relays

and brokers

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 18

Page 19: オープンソース開発者がDeNAを選ぶ理由

Performance of Q4M

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 19

 over 7,000 mess/sec.  message size: avg. 512 bytes  syncing to disk

 Outperforming most needs  if you need more, just scale out  Can coexist with other storage engines without

sacrificing their performance

see http://labs.cybozu.co.jp/blog/kazuhoatwork/2008/06/q4m_06_release_and_benchmarks.php

Page 20: オープンソース開発者がDeNAを選ぶ理由

Q4M in DeNA

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 20

 uses Q4M for sending notifications asynchronously

http://engineer.dena.jp/2010/03/dena-technical-seminar-1-2.html

Page 21: オープンソース開発者がDeNAを選ぶ理由

Q4M in DeNA

 Q4M のユーザーとして、おそらく最大  2,000万通/日以上の通知を処理

 バグ報告のかなりの割合は DeNA から  バグの切り分けや修正版のテストをいっしょに行う  入社前から

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 21

Page 22: オープンソース開発者がDeNAを選ぶ理由

HandlerSocket Plugin

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 22

Page 23: オープンソース開発者がDeNAを選ぶ理由

Memcached の利点と欠点

 利点  RDBMS の読込負荷低減 / 同時接続数が足りない  スケールアウトするキャッシュ

 欠点  RDBMS との一貫性維持が不可能

 クライアントがキャッシュを変更する限りは不可避

 問い合わせが複雑  Memcached に聞いて、なかったら RDBMS に問い合わせ

 データが溢れる  primary storage として使えない

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 23

Page 24: オープンソース開発者がDeNAを選ぶ理由

「Memcached の利点」の前提

 RDBMS がスケールアウトしない  だから、読込負荷低減が必要  だから、別途「スケールアウトするキャッシュ」が必要

↓   シャーディング + スレーブ増設で解決可能

 解決不可能な問題:  同時接続数  あと、やっぱり SQL は遅い

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 24

Page 25: オープンソース開発者がDeNAを選ぶ理由

遅いなら 捨ててしまえ SQLパーサー (字余り)

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 25

Page 26: オープンソース開発者がDeNAを選ぶ理由

Mycached

 2009年8月に公開  mysqld が memcached プロトコルを話せるようにする拡張  テーブルの中身を memcached プロトコルで get  ただしプライマリキーによる get 専用

 書き込みは SQL で

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 26

Page 27: オープンソース開発者がDeNAを選ぶ理由

Mycached – 図説

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 27 http://dev.mysql.com/doc/refman/5.1/en/pluggable-storage-overview.html を改変

mycached

Page 28: オープンソース開発者がDeNAを選ぶ理由

Mycached – 実装

 1,200行くらい  JSON, msgpack, 独自形式によるレスポンス

 Picoev を使用 (I/O イベント駆動ライブラリ)  MySQL の内部構造は、多数のスレッドによる並行アクセスにむいていない (というのが定説)

 イベント駆動ライブラリで同時アクセス数を低減  get は軽いので、データ読込中に他の接続がブロックしても問題ない

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 28

Page 29: オープンソース開発者がDeNAを選ぶ理由

Mycached – ベンチマーク

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 29

 SQL だと 40,000qps 程度

Page 30: オープンソース開発者がDeNAを選ぶ理由

Mycached の問題

 作ったものの、サイボウズ・ラボでは使いどころがなかった  自分で使わない → 放置プレイ

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 30

Page 31: オープンソース開発者がDeNAを選ぶ理由

HandlerSocket Plugin の登場

 DeNA樋口証が開発  2010年8月公開  モバゲーで実際に使用  MySQL Contributor Award 2011 受賞

 MySQL に非 SQL の高速インターフェイスを追加  同時接続数と qps の大幅向上  ぶっちゃけ mycached と同じ発想

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 31

Page 32: オープンソース開発者がDeNAを選ぶ理由

…なんということでしょう!

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 32

Page 33: オープンソース開発者がDeNAを選ぶ理由

僕のほうが先に作ってたもん…

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 33

Page 34: オープンソース開発者がDeNAを選ぶ理由

僕のほうが先に作ってたもん… 僕のほうが先に作ってたもん…

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 34

Page 35: オープンソース開発者がDeNAを選ぶ理由

僕のほうが先に作ってたもん… 僕のほうが先に作ってたもん… 僕のほうが先に作ってたもん…

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 35

Page 36: オープンソース開発者がDeNAを選ぶ理由

転職して、中の人になる!!

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 36

Page 37: オープンソース開発者がDeNAを選ぶ理由

教訓

 僕の価値観  アイデアをもっているだけでは不十分  ブログに書くだけでは不十分  実装するだけでは不十分  実際に使ってもらって、なんぼ

 そのためには、自分の書いたソフトウェアが実際に使われている(使われる可能性のある)現場に入るべき

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 37

Page 38: オープンソース開発者がDeNAを選ぶ理由

ちなみに HandlerSocket Plugin の良いところ

 mycached より高速  テーブルの開閉タイミングの最適化等

 コンパクトなバイナリプロトコル  FastEther 環境でも安心

 主キー以外でのクエリ発行や更新処理

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 38

Page 39: オープンソース開発者がDeNAを選ぶ理由

入社後の話 (アフター)

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 39

Page 40: オープンソース開発者がDeNAを選ぶ理由

ホットデプロイ

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 40

Page 41: オープンソース開発者がDeNAを選ぶ理由

ホットデプロイ – 背景

 大規模・高負荷の環境で、高速にウェブアプリケーションロジックを更新したい  ゲームのイベント等が頻繁にあるので重要

 アプリケーションサーバをロードバランサから切り離しては再起動するのは遅すぎる

 アプリケーションサーバをロードバランサにつないだまま、ロジックのバージョンアップを行うことはできないだろうか?

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 41

Page 42: オープンソース開発者がDeNAを選ぶ理由

ホットデプロイ – 解決策

 奥のモジュール群を使うことで解決しよう  Server::Starter – デーモン管理デーモン  Parallel::Prefork – プリフォーク型サーバのためのライブラリ

 Starlet – 上記モジュールを使う PSGI 互換のアプリケーションサーバ

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 42

Page 43: オープンソース開発者がDeNAを選ぶ理由

ホットデプロイ – プリフォーク型サーバの問題

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 43

 ワーカープロセスの起動コストが大きい  fork が多発するタイミングでパフォーマンスが劣化

 既存解決策: mod_bumpy_life (Apache)  by hirose31++  MaxRequestsPerChild をランダマイズ

 ワーカープロセスの終了時期を分散する効果 ⇒ ワーカープロセス再起動のタイミングが分散される

 同様の機能を Parallel::Prefork に実装

Page 44: オープンソース開発者がDeNAを選ぶ理由

ホットデプロイ – アップデート時のプロセス管理

 古いワーカープロセス回収時 ⇒ MaxRequestsPerChild のランダム化で対処済

 アプリケーションのアップデート時 ⇒ 一気に fork したらダメだし、どうしよう…

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 44

Page 45: オープンソース開発者がDeNAを選ぶ理由

ホットデプロイ – 解決策: Slow Restart

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 45

 「じわじわ起動/終了する機能  ワーカープロセスの数を保ちながらforkのタイミングを分散

listen

spawn app. servers

accept

app. logic

fork & exec accept

app. logic

SIGUSR1

fork & exec

accept

app. logic

SIGHUP

Page 46: オープンソース開発者がDeNAを選ぶ理由

ホットデプロイ – 成果は OSS に反映

 いずれの Perl モジュールも github 上で開発し、CPAN で配布  変更は反映済

 でもバグも発覚…

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 46

Page 47: オープンソース開発者がDeNAを選ぶ理由

非同期シグナルの、たったひとつの冴えた待ち方

 Q. コードの問題点は?

$SIG{HUP} = sub { $got_sig = 1 }; … while (! $got_sig) { sleep(1000); // シグナルを受信したら眠りから覚める }

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 47

Page 48: オープンソース開発者がDeNAを選ぶ理由

非同期シグナルの、たったひとつの冴えた待ち方

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 48

 Q. コードの問題点は?

$SIG{HUP} = sub { $got_sig = 1 }; … while (! $got_sig) { // このタイミングでシグナルを受信すると1000秒寝ちゃう! sleep(1000); // シグナルを受信したら眠りから覚める }

Page 49: オープンソース開発者がDeNAを選ぶ理由

非同期シグナルの、たったひとつの冴えた待ち方

 同様の問題が Parallel::Prefork にあった  負荷があがると、再起動が遅れるサーバが発生  ワーカープロセスの回収なんて滅多にないイベントなのに… ⇒ 大規模環境おもしろい

 解決策: 待機には pselect を使うこと  これ自体は FAQ  問題点: Perl には pselect がない!!!

 しかも XS (Perl のC拡張) としての実装が必要

 隣に座っている Perl XS のプロに、お♡ね♡が♡い♡

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 49

Page 50: オープンソース開発者がDeNAを選ぶ理由

OSS開発者としてDeNAで働くということ

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 50

Page 51: オープンソース開発者がDeNAを選ぶ理由

新しいものを使える企業文化

 Perl を例に…  2009年の段階で Plack を使用

 Perl における WSGI or Rack

 Furl (開発が進んでいる高速な HTTP クライアント)  最近のバグフィックス、機能追加は DeNA の id:xaicron が多い

 ハッカーが多いので、自分たちでリスクテイクできる  MySQL や他の分野についても同様

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 51

Page 52: オープンソース開発者がDeNAを選ぶ理由

層の厚さと勉強する文化

 社内外での勉強会  例: 社内勉強会の講師がMySQLエキスパートの松信  YAPC 等カンファレンスでの発表者多数  MySQL Conference での受賞を始め海外への派遣も

 層の厚さ  一部のエキスパートががんばる会社ではありません

 例: MySQL Casual

 パッチを送ったりしてる人多数  みんな結構個人ブログで技術ネタを書いてたりとか

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 52

Page 53: オープンソース開発者がDeNAを選ぶ理由

まとめ

2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 53

Page 54: オープンソース開発者がDeNAを選ぶ理由

まとめ

 OSSは、もう空気みたいなもの  当然のように使ってる

 自分たちが必要とするものを自分たちで作るのがOSSの基本。だから「現場」がおもしろい

 大規模で先進的なことができると、いろいろフィードバックできる

 社内外でいろいろ相談できると楽しい 2011年7月16日 オープンソース開発者がディー・エヌ・エーを選ぶ理由 54