ラベル インフラ の投稿を表示しています。 すべての投稿を表示
ラベル インフラ の投稿を表示しています。 すべての投稿を表示

2013年3月23日土曜日

JAWS DAYS 2013 セッションメモ

2013年3月16日に行われた JAWS DAYS に参加してきました。
色々なセッションを聞いて、良いなと思った部分の羅列です。



クライドソーシングサービスを支えるクラウドコンピューティングサービス
ランサーズ株式会社 木下さん


AWS って何ですか?とサポートに問い合わせると、本社まで説明に来てくれる。
さらにその説明が詳しくて助かる(初心者には良く分からない事もある)
電話対応でも丁寧にサポートしてくれるので、何かあったらサポートに問い合わせるべき。

EC2 で CentOS 使いたい時は、提供されている AMI から作ったほうが手っ取り早い。
CentOS を初めから入れようと思ったら思わぬエラーの連続で、CloudPack の AMI を使うことにした。

画像を多く扱うサービスなので、画像や成果物は S3 へ。
サムネイル画像は EC2 にあるけど、アップされた画像や成果物は圧縮して S3 で保存している。
S3 へのアップは、PHP 版の SDK を利用。

負荷テストはスポットインスタンスで。
同じ構成をスポットインスタンスで再現して負荷テストすると、本番に影響出ないうえに安く済む。
負荷テストは短期間なので、途中でインスタンスが利用できなくなることもない。

あらかじめ予想されている負荷であれば、ELB を pre-warming しておくと便利。
ELB は負荷に応じてスケールアップするけど、5分経過しないと反応してくれない。
TV 効果など瞬間爆発的な負荷には対応出来ないので、事前にスケールアップしておくこと。
サポートに連絡すると対応してくれた。

AWS の機能はブラックボックスな所が多い。
なので、随時サポートに問い合わせるか、EC2 で実装して解析をする。
でも、AWS では通常のwebサービス稼働に使う機能が充実しているので、EC2 で独自実装するよりもサービスを使った方がお得だし簡単なので、できるだけそちらを利用する予定。



EventRegist on AWS: イベントレジストにおけるCDP
イベントレジスト株式会社 池田さん


インスタンスに付けられるタグを利用してバックアップ世代を管理している。
バックアップスクリプト中で、自分に付けられているタグからバックアップ世代を取り出して判断。
これならスクリプト修正しなくてもいいし、適宜変更可能。

静的コンテンツは外(S3)に出す。
イベント毎のヘッダー画像やサービス共通のCSSなど、読み込まれる事が多くて静的なものは全てS3へ。

トラフィックの特性が違うので、ELB は分ける。
webとDBではアクセス数も頻度も違うので、用途別に分けた方が最適化されるのでトラフィックが安定する。

AutoScaling は利用してない。
負荷の波が来たら、手動でインスタンスを起動していた。
でも今まで落ちたこと無い。

AMI はミドルウェアがインストールされた状態のもので、設定を修正反映するのは Chef に任せている。
インスタンスをコピーする際も、最初の1台を作って、そのAMIから次を作る。



無限にスケールし続ける写真共有SNSを運用するケーススタディ「snappeee」
株式会社マインドパレット 神尾さん


なるべくメンテナンスをしないような設計にした。
メンテナンスに手をかけるのは大変とわかっているから。
100% SimpleDB で動くように設計した。

サービスに合わせてプログラム・インフラを変えていく。
AWS は作り直しが簡単なので、壊せるし移動しやすい。
運用していく中で、どうしても現状に合わせて変更しなければいけない時がある。
その時はえいやと変えてしまう。恐れていては機会を逃してしまうから。

SimpleDB にも制限があるので DynamoDB に変更した。
10GB の制限があったので。

AutoScaling はスポットインスタンスで起動。
利用料金が10分の1になった。
シンガポールの c1.medium はあんまり使われていないようで、最低単価で入札できて
いる。

1,2台つぶれても仕方ない。気にせずガンガン行こうぜ。
運用している段階で、インスタンスが何らかの負荷で使えなくなることはある。
想定済みだし、1,2台潰れたぐらいでサービス止められないので、止まらないようにイ
ンスタンス数を調整している。
負荷が来るのは一瞬なので、その一瞬を逃さないようにすることが大事。

ログはDBへ。
ログをファイルに書き込むと、I/O がボトルネックになりやすい。
なので、DynamoDB につっこんで、整形したものを RDB に吐き出している。
サービス側のユーザログは最終的に1ヶ所に集めるから SimpleDB に書き込んでいる。


クラウドな働き方

福岡支部 小室さん

雲(クラウド)を雲の上から操って、人間らしく生きよう。
便利なツールをただ使うだけじゃ何も変わらない。
自分が自分でいられる時間を作り出すために活用する。

札幌支部 田名部さん

そのためにも、信頼出来る関係が大事。
信頼がなければ、協力も得られないし理解してもらえない。
部分的でもいいので、ちょっとだけ試してみる。
だめだったら止めればいいだけの話。
問題なければ、すこしずつ広げていけばいい。

北陸支部 相羽さん

仕事をしている場所、環境が、本当に必要なのかを考えてみる。
常識を疑うと、人生が変わる。
今の方法ではない、他の方法が見えてくるはず。

2012年12月23日日曜日

負荷対策・負荷分散の勉強会に行ってきた

2012年12月20日(木) に渋谷 ヒカリエで行われた負荷分散の勉強会に行って来ました。
そのメモです。

勉強会の募集ページはこちら。
好評で超満員だったので、第2回が開催されるそうです。
【負荷対策・負荷分散】勉強会!! ~原因究明から、対処法、実例発表まで~ ロードバランサ、DBチューニング、NoSQLと幅広くお話します!

以下メモ。
----------------------------------------

自社のサービスで、リスティング広告のレポートをまとめるのが主な負荷。
サーバの基本構成は。CentOS + Apache + PHP + MySQL。
そこに追加するのが、Memcached。


----------------------------------------

■MySQL
MyISAM でやってたけど、テーブル単位でロックされるから管理画面の表示ができない!
→InnoDB に変更して解消。なお、InnoDB は行単位でロックする仕組み。

でも、InnoDB には罠が!
ログファイルが膨大になって、レコードを DELETE してもログが更新されない。
→ ibdata をテーブル単位にして解消。
=> innodb_file_per_table

さらに、ログファイルのサイズやログのファイル数を設定して使いやすく。
→ innodb_log_file_size = 1364M
→ 
innodb_log_files_in_group = 3

なぜ、ログファイルが膨大になって問題になったのか。
ログは30日分を insert or update していた。
でも、update するにも一回 select してみないとあるかどうか分からない。
→ じゃあ、全部 DELETE して 全部 INSERT したらいいよ!
→ SQL増えた!ログも増えた!ログが!!

insert or update を判断する MySQL の便利な機能があるよ
=> INSERT ... ON DUPLICATE KEY UPDATE
指定された PrimaryKey があれば、UPDATE。なければ INSERT をしてくれる。

インデックスをはろう!はるとすごい速度が上がる!
はっただけで満足せずに、
・良く Where で使うワードを調査
・遅いクエリが無いか slow-query-log で確認
・インデックスがきちんと使われているか explain で検証
を忘れずに。

発行するSQLにコメントを付けてデバッグしやすくしてみる。
コメントに、どのサーバから来てどのセッションで実行された SQL なのかを残すと、show processlist や slow-query-log でわかりやすくなるよ。
ただし、コメントが毎回違うからクエリキャッシュ出来ない。
※これは素晴らしいアイディア!気付かなかった!

無理に正規化しない。
JOIN すると遅くなることもあるので、それだったら欲しい情報が全て1レコードにあったほうがいい。


----------------------------------------

■Memcached
導入に手間がかかるけど、静的でかつ頻繁にデータが変わらない SELECT 結果なら、毎回クエリを実行するのではなく、Memcached にキャッシュさせておいた方がいい。
メモリ上に展開されるので、HDD へのアクセスが発生する方法より格段に速くなる。
----------------------------------------

■PHP
フレームワークや、大量のソースを読み込む必要がある PHP を使ったサービスなら、アクセラレーターは導入した方がいい。
PHP は、実行する時にバックでコンパイルしている。
コンパイルするファイルが多ければ多いほど処理完了までに時間がかかる。
アクセラレーターはコンパイル結果をキャッシュしておくものなので、表示までの速度が速くなる。

改善のための解析用にログを残すのも大切。
どのページ(URL)で、誰が、どのくらいのメモリーを使って、何秒で表示まで終了したかを記録すると、わかりやすいよ。
----------------------------------------

■いろいろパワーアップするために
HDD より高速化したいので、Fusion-io が気になる。
DB に SSD を使ってみたけど、書き込み制限ですぐにダメになってしまった。

MySQL5.6 は、まだ正式リリースではないのだけど、InnoDB まわりが進化しているので早く実戦投入したい!

2012年12月21日金曜日

Linux サーバ上でエンコードされたメールを PHP でデコードして確認する方法



Postfix 設定に失敗して、送信されるはずだったメールがローカルユーザと勘違いされ、
でもローカルユーザにそんなやつはいないから root 宛に転送されていた。
mail コマンドで確認したら、メールの内容が残ってた!助かった!でも文字化けしてる…

=E3=81=93=E3=81=AE=E3=83=A1=E3=83=BC=E3=83=AB=E3=81=AF=E3=80=81 ...


http://d.hatena.ne.jp/minesouta/touch/searchdiary?word=*%5BPerl%5D&of=10
これは文字化け?いいえ、Quoted Printable です。
エンコードされているんですよ。
Perl でデコード出来ます。


http://www.plus-a.net/tools/text_tool/
試しにデコードをしてみよう。
お!読める文字になった!


http://pentan.info/php/quoted_printable.html
php でも Quoted Printable 文字列の変換することができるんですよ。
quoted_printable_decode っていう関数があるんです。


php がインストールされているからデコードできそうだ!
早速やってみよう!


メールが記録されているファイルを確認
# less /var/spool/mail/root


あったあった!
これらを別のファイルに書き出す
# cp /var/spool/mail/root /root/mails.txt


書きだしたファイルをデコードして別に保存する
# php -r "echo quoted_printable_decode( file_get_contents('mails.txt') );" > decode_mails.txt


サーバからダウンロードしてきて確認。
subject に余計な文字が紛れていて、所々おかしいけど、これで読めるようになった!


2012年9月24日月曜日

qpstudy 2012.09 秋なのに怖い話 〜障害発生編〜 に行ってきた



9月22日に行われた「qpstudy 2012.09 秋なのに怖い話 〜障害発生編〜」に行って来ました。
参加された皆様におかれましては、参加のためにeverevo(イベレボ)の負荷テストにご協力頂きまして、誠にありがとうございました。
懇親会LTでグダグダなご挨拶でしたが、皆様にお礼ができて良かったです。


さて、本編です。夏は終わりますが障害に関する怖い話です。
背筋が凍る話があったり、爆笑が起こったりと、いつもながらに楽しい勉強会でした。
今回の進め方は、登壇者が怖い話をして、「どうしたら良かったか」というのを参加者に答えてもらうという形式だったのですが、とても良いですね!勉強になりました!


以下、勉強になった点をずらずらと。

・負荷テストは機能単位で行うのも大切。模擬障害とか。
・サーバ構成図とシステム構成図の2つは必要。2つ揃ってサービス構成図。
・障害の多いサーバには大抵お札が貼ってある。
・障害調査は下から。泥棒もタンスは下から。ハード→設定→ミドル→アプリ→ユーザー。
・動いている時はミドルorアプリor設定orユーザー。
・死んでる時はハードorDC。
・DCが原因という障害は結構ある。
・優秀すぎると命狙われる、きけんなしょくぎょう。



懇親会も盛り上がりましたね。
いつもはLTの時談笑もされていたのですが、今回はほぼ全員が懇親会LTを見聞きしてました。
個人的には、終了間際の魔法の言葉からBLへの話と、
はせごーさんの「夕飯どうしようと思ってTL見てたらqpstudyやってて、懇親会空いてたから来たんだ」という話が楽しかったですw


主催のリーダー、スタッフの皆様、参加された皆様、ありがとうございました!
またお会いしましょう!

2012年8月29日水曜日

mod_evasive で画像をチェックしない方法

セキュリティ対策として、mod_evasiveを入れたのはちょっと前。
画像のロードが多いサイトだったので、DoSアタックと勘違いされてアラートメールがぞくぞくと…

通常、mod_evasiveはIPアドレスしかwhitelistに登録できません。
そこで、コンパイル前のソースを書き換えて特定の条件ではスルーするようにします。



------------------------------



[mod_evasive20.c]

- #define MAILER  "/bin/mail %s"
+ #define MAILER  "/bin/mail -s 'DoS Alert! from your-service.com' %s"


static int access_checker(request_rec *r)
{
int ret = OK;

+    /* IGNORE_DOS */
+    if (apr_table_get(r->subprocess_env, "IGNORE_DOS") != NULL)
+      return OK;


※apr_table_get(r->subprocess_env, "IGNORE_DOS") でIGNORE_DOSが有効になっているか確認します。
※apache1.3 を使っている方はいないと思いますが、もし使ってたらap_table_getに直してください。
------------------------------

[modevasive.conf]

+ SetEnvIf Request_URI "\.(gif|jpg|png)$" IGNORE_DOS


※URIに特定の拡張子が含まれていたらIGNORE_DOSが有効になります。

------------------------------


なお、mod_evasive20.c を書き換えた後は、apxsでコンパイルしてApacheの再起動を行います。

# apxs -ica mod_evasive20.c
# apachectl configtest
# apachectl graceful


以上!



※参考URL※

ap_table と apr_table の違い



2011年8月2日火曜日

qpstudy#7に参加してきました

2011年7月30日(土)に行われたqpstudy#7に参加してきました。

内容をお伝えしたい所ですが、禁則事項で禁則事項のためお伝えできませんが、雰囲気だけでも。



恐怖の連続で、それはもう盛り上がっていました。
キユーピー3分インフラクッキング 第7回「ITインフラ 本当にあった怖い話 ~絶対に笑えないサーバ24時~」 #qpstudy


皆さんお疲れ様でした~