技術ブログ - 毎日が成長!

クラウド コンピューティングEXPO春 1日目レポート

2012年5月10日 by arai

こんにちは。エンジニアの新井です。

東京ビックサイトにて5/9〜5/11まで「クラウドコンピューティングEXPO 春」が開催されています。

出展ブース

弊社もAmazon Web Serviceのパートナーとしてアマゾン データ ジャパンブースと、IT飲み会共同出展ブースに出展をしています。

Amazon

Serverworks

ご近所さんにはsalesforce.comさんやMicrosoftさんなどもいらっしゃいます。

正にクラウド激戦区

ですが弊社もクラウドに対する想いでは負けていません!

プレゼンステージ

アマゾン データ ジャパンブース内ステージでは弊社代表大石が「クラウドでセキュリティを強化した3つの事例」という題材でプレゼンを行いました。

Presentation1

写真を見ていただけるとわかると思いますが、大変好評でした!

おかげさまで初日の総動員数1位を頂き初日のボーナスステージを獲得しました。

二日目、三日目も同様の内容のプレゼンを行いますので、一日目を見逃してしまった方もそうでない方も是非ご覧になって頂ければと思います。

二日目、三日目のプレゼンの時間は以下になります。

  • 10日(木)12:00 〜 12:15
  • 11日(金)13:30 〜 13:45

ご来場された皆様、ありがとうございました。

二日目、三日目もよろしくお願いします。

 

自社ブログサーバを落としてみた

2012年4月25日 by tateoka
自社のブログサーバを落とした舘岡です。
サーバを落とした翌日は社員の視線が刺さるような感覚がありましたが、最近では「ワイルド」という言葉自体が社内で浸透してきた感があります。
つまり、ほとぼりは冷めたという事です。
これは上級社会人の『問題を寝かせる』という高等技術が成せる業で、僕くらいの使い手になると
“問題があったかどうか思い出せない”までコントロールする事が可能になります。
ただ、術者の僕さえも思い出せなくなってしまいそうな気がしたので、当日に起きた事と対応(してくれた方ありがとう)を記録して今後について考えたいと思います。
  • 起きたこと

当社技術ブログサーバへHTTPアクセスが集中し、高負荷で接続しづらい状態になった
  • 当時の様子

H_Shinonomeさんが当時のTwitterでの様子をまとめて下さいました。
  • 時系列

4月11日 15:20頃

技術ブログを書き終えてTwitterへブログを書いた旨を告知

同日 15:28

予想外のアクセス増
ブログサーバを監視しているサーバからhttp監視失敗(タイムアウト)の警告
同時間のLoadAverageは61を記録、Wordpressからレスポンスが超絶遅くなる

同日 15:40頃

m1.smallの限界を感じてm1.mediumへスケールアップ(32bitのため)
若干の改善は見られるが時間が経過するごとに次第にレスポンスが遅くなる

同日 16:00頃

外出の予定があったので舘岡は会社を離脱
その後、18:00頃までLoadAverageが10付近をうろちょろ

同日 19:00頃

アクセスが落ち着いてLoadAverageが1以下になる。
ページも正常に表示されたので復旧宣言。
  • 原因

  1. 舘岡の影響力を会社側が甘く見積もっていた
  2. 自分の影響力を自分が甘く見積もっていた
  3. 想定を超えるアクセス数に準備が出来ていなかった
  4. Wordpress、及びミドルウェアのチューニングが甘かった
  • 対応

僕がアワアワしたりタバコを吸っている間に色々と対応してくれました。
当社のエンジニアは手が早いです。

1. スケールアップ

ブログサーバはm1.small(32bit)で稼働していましたが、応答がなくなってすぐにm1.medium(32bit)にスケールアップしました。
しかし、それも時間の問題。
すぐに負荷が高まりレスポンスに時間がかかる状態に戻ってしまいました。

2. MySQL

MySQLはquery_cacheを有効にしました。
しかし、アクセスが多い時間帯に設定変更、反映をさせるのは怖いので少し落ち着いた時間帯に設定を変更しました。
変更した部分は以下。
$ diff -u /etc/my.cnf /etc/my.cnf.bk
--- /etc/my.cnf
+++ /etc/my.cnf.bk
-[mysqld]
-query_cache_limit=1M
-query_cache_min_res_unit=4k
-query_cache_size=24M
-query_cache_type=1
でも、そんなに効果はなかったみたいです。

3. PHP

PHPはapcを有効にしました。
$ diff -u php.ini php.ini.bk
--- php.ini
+++ php.ini.bk
-[apc]
-extension=apc.so

4. Apache

mod_cacheを有効にしました。
変更があまりない画像をキャッシュする事で表示を高速化しています。

5. Wordpress

キャッシュ等のプラグインが導入されていなかったので以下のプラグインを導入しました。
上記の対応でレスポンスがかなり改善されたようです。
残念な事に以前の環境でのレスポンスタイムを計測していなかったので劇的ビフォーアフターの数値は見れません。
ざっくりの数字だと、改善前はレスポンスが1秒〜2秒、改善後は1秒未満という感じです。
ココらへんの性能監視も追加しないといけないですね。
  • 今後の対策

あたかも自分が全て設定したかのように書いていますが、僕は外出してたり、そのまま直帰して家でご飯食べて寝てたりしていたので何も手を動かしていません。
会社のみんなに僕の「カチャカチャカチャ…、ッターン!!」を見せられなかったのがちょっとだけ悔やまれます。
現状は一時的な対処なので、今後はMySQLをRDSに移行するとか、画像ファイルをS3やキャッシュサーバに持たせるとか、64bit化するとか、ELBを入れて容易にスケールアウト出来る構成にするとか、シンガポールで稼働しているので東京(近く)に引っ越すとか、なるべく費用をかけずに高負荷にも耐えられる構成を妄想して楽しんでいます。
  • まとめ

今回、アクセスを集めた事で会社から褒められるかと思いきやサーバが落ちてしまった事で会社としても「どんな顔をして良いか分からないの」という状態でした。
「笑えば良い思うよ」と喉まで出かかったのですが、上司からの「あなたがクビでも代わりはいるもの」という電波を受信したのでグッと堪えました。
という訳で、僕は半ばネタ担当になっているようなのでこれからもどんどんネタを出してブログサーバが悲鳴をあげる程アクセスを集めたいと思っています。
つまりまったく反省していません。
ウソです。ちょっと反省しています。
 

node.jsからDynamoDB(Tokyo-Region)を使う

2012年4月18日 by zabbio

こんにちは!4月に入社したばかりのAWSチームの新人こと年寄りザビオです!

Dynamoが東京にきて、マイスターシリーズでも取り上げられましたが皆さん使ってますか?

Dynamo宮崎バージョン

node.jsからDynamoを操作するクライアントを見つけましたのでご紹介します!
先に注意しておきますが、私はワイルドとは全く無縁の関係でございます。改めてご認識ください。

今回利用したAMIは(amzn-ami-pv-2012.03.1.x86_64-ebs (ami-e47acbe5))です。

まずはnode.jsに必要な環境構築を行います。

yum install openssl-devel
yum install gcc-c++
yum install make

その後、最新のnode.jsをインストールし、展開します。
現在の最新バージョンはv0.6.15でした。

wget http://nodejs.org/dist/latest/node-v0.6.15.tar.gz
tar -zxvf node-v0.6.15.tar.gz
./configure
make
make install

インストールが終わったら「node -v」でバージョン表示されることを確認してください。
インストールが終わっていてバージョン確認できない場合はPATHが通っていないのでPATHを通してください。
自分の場合はtmpにてファイルダウンロードをしたので、シンボリックリンクを下記のように貼りました。

ln -s /tmp/node-v0.6.15/out/Release/node /usr/sbin/node

つぎに「npm」をインストールします。
npmはPHPのPEAR的なもので、いろんなモジュール(フレームワークも)簡単にインストールできます。

curl http://npmjs.org/install.sh | sh

インストールが終わったら、いよいよクライアントツール「dynode」をインストールします。

npm install dynode

これだけでインストールできます。 このままでも利用できますが、regionが「East」のままなので、「Tokyo」にしましょう。

編集ファイルは下記ファイルです。

  • /node_modules/dynode/lib/dynode/request.js

編集箇所は13行目です。

【 request.jsの編集】
var http        = require("http"),
    _           = require("underscore"),
    signer      = require('./request-signer'),
    AmazonError = require('./amazon-error'),
    URL         = require('url'),
    STS         = require('./sts').STS;

var Request = exports.Request = function Request(config) {
  this.sts = new STS(config);

  this.config = _.defaults(config, {
    prefix : "DynamoDB_20111205.",
    host : "dynamodb.us-east-1.amazonaws.com"←(編集前)
    host : "dynamodb.ap-northeast-1.amazonaws.com"←(編集後)
  });

実際にDynamoDBにテーブルを作成してみましょう。

  • vi zabbio.js

var dynode = require('dynode');

dynode.auth({accessKeyId: "***", secretAccessKey: "***"});

var opts = {read: 5, write: 5, hash: {wild: String}, range: {percentage: Number}};
dynode.createTable("zabbio", opts, console.log);

詳細につきましては本家のreadmeに記載がございます。

本家のサイト

それでは実行してみます。

  • node zabbio.js

実行後、下記のメッセージがかえってきました。

null { TableDescription: 
   { CreationDateTime: ****,
     KeySchema: { HashKeyElement: [Object], RangeKeyElement: [Object] },
     ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 },
     TableName: 'zabbio',
     TableStatus: 'CREATING' } }

Management Consoleを見てみると、

確かにできていますねー。

node.js(SocketStream)を触る機会が多く、本ライブラリを使用していますが
めちゃめちゃ使い勝手良く重宝しています。
次回(要望があればw)は作成したnodejsの利用例など紹介できればいいなと思います。

他にもたくさんのライブラリがあるようです。こちらの方も合わせてご確認ください!

Amazon Web Services ブログ

 

PAGE TOP