クックパッド×サイバーエージェント合同勉強会

行ってきました。

入るとまずはキッチンどーん!

後ろから始終調理音が聞こえてくる勉強会は初めてでした。


内容

OpenStack

無知だったので勉強になりました。

AWSとの差異や利点はあまり分からなかったけれど、AWSが最大公約数的な形で機能拡張していくとのことなので、色々面白そうな機能を独自路線で作っていってくれれば面白いかも?

あとPython触ってる端くれとしてはGUIがDjangoで出来てるってのもいい感じ。

以下、メモ。

プライベートクラウドをやってみたかった。

Cactusが現行バージョン

AWSとの機能比較

ロードバランシングはない

Cloud ControllerによってNovaプロセスを動かす。

デフォルトのハイパーバイザーはKVM

NW構成

FlatManaget

FlatDHCPManager

VLANManeger

novaコマンド

インスタンス起動・停止

スナップショットの作成

とか

euca2oolコマンド

Pythonで出来てる

novaコマンドとほとんど々ことができる

CloundControllerが停止してもComputeNOでとインスタンスに影響はない

ComputeNodeが停止すると稼働状況が伝わらない

デフォルトではvirtioを有効にして起動される

DjangoベースのGUIが付属している

ElasticFoxでも管理できる

WebAPIはある

CloudControllerは冗長化できる?

→出来るはず

スケールアウトする?

→多分。Eucalyptusがスケールしないから作ったという話なので

AmebaPicoとAWSについて

AmebaPiggの海外版?のAmebaPicoでのAWS運用のお話。

ZooKeeperを触ったことがないのでちょっと調べたところ、以下のページが勉強になりました。(日本語

Hadoop本読書会 - 13章 ZooKeeper

MongoDB、ちゃんと勉強しないとな…と思いました。

以下、メモ。

サーバ構成(全部AWS

キャッシュが効く静的データはCloudFront(CDN

細かい大量のコマンド独自のバイナリプロトコル(Socketサーバで受ける

分散Lockサーバ(ZooKeeper

キャッシュサーバ(memcached

DB(MongoDB

ログ集計サーバ(ElasticMapReduce

とかとか

EBSにバックアップ

Socketサーバ

ノンブロッキングIO

ID管理サーバ

ユーザIDの発行

UIDと認証機関でのIDの対を管理

Point管理サーバ

ユーザIDにひもづくポイント(サービス内通貨)を管理

ID管理サーバが発行したトークン付きのリクエストで処理

DB

エンティティはバイナリ形式でKeyValueストア可能なインターフェイスを持たせて定義

3台構成のレプリカセットを6シャード

プライマリ・セカンダリ・セカンダリ(on EBS)

Flashについて

クライアントで最初にメインモジュールを読み込み

→必要におうじてサブモジュールをロード

サーバとのイベント部分にはデリゲートインターフェイスを用意

Flashとサーバ側との分業体制をきちんと整備

EC2について

60個ぐらい運用していて、2、3ヶ月に一回くらいで落ちる(バージニアだから?

落ちたり特定ポートが死んだらリブート

落ちやすいので、冗長性をきちんと確保する

MongoDB

コネクションプールが枯渇する

シャードを増やした

スペックの高いインスタンスを利用

オートバランシングの挙動

そもそもバランシングのされ方が微妙

レプリカセットのコンフィグ情報未反映問題

コンフィグ反映には全台再起動が必要

画像配信システム

ここからはクックパッドの方の発表。

画像変換あたりの技術とかはやったこともなければ聞いたこともないという感じなので知らない単語が多かったす。

発表途中のアンケートでは、Apacheモジュールを書いている人が結構多かったのかな?一番前に座っていたので分かりませんでしたが。

今だとmod_wsgiだし開発止まっちゃったけど、mod_pythonの勉強でもしようかな…と思ったり。

以下、メモ

以前

ユーザの画像をAPサーバでコピー・リサイズしてストレージにぶっこむ

そしてそれを配信

どの画像サイズ、形が適切か?

→新サイズを試すたびに画像を800万枚リサイズ

iPhoneアプリとかに対応するためにまたリサイズ?

リリースも遅くなる

画像800万枚

秒間7000枚のリクエスト

クラウド移行を検討中(EC2へ

NFSをやめたい

現行(TOFUシステム

ストレージには1枚だけ溜め込む

リクエストのたびにリサイズする

URLにサイズと画質をぶっこむ

実装

Apache Module(mod_tofu.so

画像変換

ImageMagick

ストレージ

S3

AKAMAI(CDN)の後ろにELBでバランスしてApache

S3での苦労

APIが変になった

Akamai OR CloudFront?

EC2をオリジンに使用できるようになった(CloudFrontが)けど、

Akamaiの方が速い。

Akamaiのキャッシュ率はそんなに良くない。

昔はVarnishをELBの後ろに置いていたけど、値段が高い。

tofuを増やした方が安いので、今はそうしていて、Varnishは使っていない。

AWS移行にむけて(分散DNS

非常に色々と網羅された内容で素晴らしいお話が聞けました。

あまり深い内容ではなかったけれど、全体像を伝え、そして現行の問題点とそれを改善するために分散DNSを作ったという話の流れは非常によくわかった。

メモを取らずに聴き入っちゃってました。

クックパッドのインフラは今回発表された方がリーダとしてまとめてるのかなぁと思った。

Heartbeatのバージョンが古かったので、そこは上げた方が…とは思いました。

まとめ

今回も色々なお話が聴けて非常に勉強になりました。

僕は仕事的にはこんな大規模Webサービスに関わっていないので、負荷分散やDB周り以外のキャッシュシステム導入みたいなことをやったことがなかった。

で、Squidはやったんですが、Varnishはやったことないのでnginxと組み合わせたWebサイト構築をやってみたいと思います。

あと、LTで聞いたtmpfsは今まであまり気にしたことがありませんでしたが、永続性を必要としないところには使ってみるのもいいかなと思いました。

最後に、クックパッドさん、サイバーエージェントさんありがとうございました!