2013年1月22日火曜日

ヒカラボ 勉強会に参加しました。(AWS、MySQL負荷分散)

渋谷のヒカリエで勉強会に参加しましたので、その備忘録に。。。


アジェンダ

 ランサーズについて
 AWSについて
 MySQLについて

講師
木下慶さん
ブログ
http://www.crowdinfo.jp/


内容(ランサーズについて)

株式会社ランサーズ
http://www.lancers.co.jp/adoption/index.html

日本初のオンライン完結型アウトソーシングサービスを運営
フリーランスの方と、企業の橋渡しを行なっている。
・依頼数10万件
・依頼総額55億円
・会員数11万人

この一年で会員数は3倍に

理由:
・TV,雑誌などのメディアで取り上げられた。
・アマゾン公式サイトでの事例紹介等に取り上げられた。
・テレワーク大賞受賞

また、オンラインのみならず、講演や、勉強会等を行うことで、
リアルなユーザーからの意見も取り入れながら運営している。

このようにメディア等に取り上げられることで、アクセス数の増加を考え今回の内容にも繋がる、
AWSの有効活用や、MySQLの負荷分散等を行った。

AWSの有効活用について
環境
web cakePHP,apache
DB MySQL
batch cakePHP
モニタリング MuNIN,Nagios

これらの環境の下でAWSを利用している。

AWSとは


アマゾン ウェブ サービス(AWS)
詳しくはこちら→http://aws.amazon.com/jp/what-is-aws/

概要:
ウェブサービスという形態で企業を対象にした IT インフラのサービス
様々なサービスを提供している。

使用しているサービス
EC2:http://aws.amazon.com/jp/ec2/
ELB:http://aws.amazon.com/jp/elasticloadbalancing/
VPC:http://aws.amazon.com/jp/vpc/
S3:http://aws.amazon.com/jp/s3/
AMI:http://aws.amazon.com/jp/amazon-linux-ami/

* EC2について

とにかく簡単にインフラ操作を行うことができるシステム
・ウェブベースの操作インターフェイス
・API toolsというツールがあり、これはコマンドラインでのインフラ操作を可能にしている。

* EC2の管理

・ManagementConsoleを使う
これは、いわゆるサーバの管理画面のようなもの

利点

スケーラビリティ
・スケールアウト、スケールアップが用意にできる。
・右クリックですぐにサーバ、インフラ操作を可能にしている。

スピード
・待機時間とインスタンス(注1)がほぼ同時に行うことができる。
・簡単に操作できるので早い

コスト
・クラウドの中では割と低価格
・従量課金システムのなので納得感がある。

安全性が高い
・amazonの堅牢なセキュリティ

注1:http://www.crowd-cloud.net/word/instance.html

特徴
* クラウドサーバを独自に切り離すことができる。

etc)

Aサーバ
Bサーバ
Cサーバ

3つのサーバがある場合一つだけ接続を切り、テスト環境に用いたり、負荷の検証等を行うことができる。

* アカウントの共有

アカウントを共有でき、簡単にサーバを複製できる。

・試験用のサーバを本番にすぐに複製し、使える。

負荷対策

テレビでの放映のあと、アクセス過多が予想されるため、それに耐えうる環境の構築を行う。

# アクセス予測
# コンテンツ軽量化
# 仮想サーバ増設
# 負荷テスト
# ELBのスケールアップ

アクセス予測

http://tech-blog.cerevo.com/

上記のブログを参考にしたとのこと。
→アクセスが予測できなかったため、ネットで情報収集

コンテンツ軽量化

トップページ

・一番アクセスが来るページ
→PHPを使用していたが、静的なHTMLページヘと変更

トップページの次の階層

・cakePHPのキャッシュを利用
→トップページほどではないが、アクセスが多くなることが予想されるため、memchashを多用

更に下の階層

・通常の動的なページ

モバイルページの開設

・静的なHTMLを用いたスマホ用のページの制作

仮想サーバ増設

・appサーバを3→20に
・DBスレーブを2→10に

また、画像が多く投稿されるサイト
→S3(ストレージ)を用いてアプリサーバを参照するような形にして、負荷を分散

負荷テスト

http://www.cloudpack.jp/service/tools/jmeterami.html

JMeterAMIを使用し、負荷テストを実施

ELBのスケールアップ

・アプリケーショントラフィックの負荷を自動的に分散するシステムがELB
→これを事前にスケールアップすることが有償ではあるが、AWSではできる。

通常のELBは5分間のトラフィックを計測し、自動で判断を下す。
→遅い

そのため、事前にこれをスケールアップできるものがあるとのことで、事前にスケールアップ。

+結果+

サイトは落ちない
アクセス、登録数等が急増

+教訓+

・営業の方と仲良くする
→実はスケールアップに関しては、問い合わせをしたところ営業の方が教えてくれた内容
→それ以外にも色々と営業の方と仲良くしていたため、媒体にも取り上げられたりと良い事ずくめ
なので仲良くする。

・社内の負荷テスト
→社内のネットワークで負荷テストをはじめは行ったが、社内のネットワークそのものが使えなくなることが
あるので注意


インスタンスの立ち上げ
→立ち上げすぎるとお金が高い(従量だから)

* AWSの良いところ

新しい情報が日本語で手に入る
→amazon web serviceのブログで手に入る

営業の人が色々と教えてくれる
→仲良くすることで、情報共有や、媒体にも取り上げられることもある。

パフォーマンスの向上、値下げが継続中
→CPU性能を向上させた最新バージョンがアメリカで登場し、日本では現行版が安くなりそう

MySQLについて


主にツールに関する内容

上記のテレビ放映と同時にDBの負荷を分散、改善作業も行う

レプリケーション
インデックス

上記の改善

レプリケーション

・スレーブ用インスタンスを2つ追加
・参照用のクエリの割り振り見直し
・スレーブ前にELBを設置する

インデックス

・スローログ解析
→時間がかかる、インデックスが効いていない、また多すぎるものに関しては見直し
・EXPLAINでのクエリ見直し
・cakePHPのクエリ見直し
→cakeに関しては勝手にクエリを出しているので、それを解析し、遅い場合は手作業で改修
→そうすることで、プログラマーもパフォーマンスを意識してくれるようになった

ツール

* maatkit

http://www.moongift.jp/2008/07/maatkit/

いわゆるMySQLの管理ツール
大手企業でも使われいるもので、クエリの解析等々行なってくれる。
クエリの詳細、サマリ、プロファイル等をみることができる。

* Jet Profiler

http://engineer.blog.lancers.jp/2012/08/jet-profiler/

上記と似たような機能ではあるが、こちらは直感的に操作が可能なチューニングツール

・インストが楽
・見やすい

等々かなりの使いやすさを兼ね備えたものになっている。

12月に日本語版をリリースしているので
現在でも使える。
→ちなみに日本語版の開発はランサーズと開発者の交流から生まれたもので、
この公式サイトでも取り上げられている。


まとめ


AWSに関しては、

・使いやすい
・割りと安い
・いろんなサービスがある
・営業の方との交流がある

等色々な利点がある

MySQL

・チューニングを怠らない
・ツールを使いこなす

等をしっかりと行うことが大事であるとのこと。

また、他の企業との交流、技術の交換等が非常に重要だということ
→つながりを生み出すことで刺激になる。
→仲間を作る
→情報を共有する

鎌倉に企業を構えるが近辺に7社程度あり、混同での企画や、交流を行なっている。
また、web等の媒体にも載ることがある。

感想

つたない、また、醜い文章になってしまいました。

反省。

AWSは全く知識の無い状態で食らいつくのがやっとのような感じでした。

知らなければならない言葉、システムに色々と気づいたことが良かったかもしれません。

やはりツールって大事だなと思いました。

自分の場合はMySQLはphpmyadminでEXPLAINしたりしてるだけで、というかあまりMySQLに

ついては詳しくないのが本音でして、、、。

便利に使えるものはバシバシ使っていこうかと思います。

今、この勉強会の前に

http://www.amazon.co.jp/s/ref=nb_sb_ss_i_0_8?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Daps&field-keywords=%8A%EE%91b%82%A9%82%E7%82%CCmysql&sprefix=%8A%EE%91b%82%A9%82%E7%82%CCMyS%2Caps%2C239

この本で最近勉強し始めました。

今回の内容も問題なく聞き取れるような最低限の知識は必要ですね。

一気に書いてしまったので、語句の説明等は後日載せようかなと思います。

もう一つ、この方が交流が大事だと強くおっしゃってました。

エンジニア同士、または、同じ業界の人、等々いろんな人との交流が思わぬ所で活かされることが

あるとおっしゃっておりました。

最近、どこかのコミュニティに属して、何かを作ったりできるといいなと思っております。

それが非常に楽しくプログラミングができるのなと。その辺も探してみよう。

あと、会場自体がかなり狭くて、隣の方とキツキツだったために、ちょっと辛かった、、、。

これからを小さいノートとかを持っていくか、2つ携えるか考えます。










0 件のコメント:

コメントを投稿