読者です 読者をやめる 読者になる 読者になる
本格SEもすなる、技術ブログといふものを、駄目SEもしてみむとて、するなり

本日 #脱藩なう します

脱藩 転職

※注意1:これは個人の日記です。内容のレベルについての御批判は御遠慮下さい。
※注意2:ここで言う「脱藩」とはAWS界隈で言う退職/転職の事です。

現職を辞めた理由は音楽性の違いです。
以上!

というテンプレはここまでです。



今の勤務先である株式会社日立ソリューションズを6月30日付けで退職しました。2003年に新卒で入社して11年間在籍しました。入社時はSEという職種もSIerという業種も、なんとなくしか理解せずに就職した思います。親会社とは関係しない「外販」をメインとした製造業のお客様をターゲットの部署に配属されました。製造業の部署にも関わらず様々な業種のお客様を担当させて貰えました。自部署の仕事は、社内では相対的に小さい案件が多いため、自分の裁量が効きやすい仕事が多かったと思います。

しかし、2011年の春に心を病み1か月ほど入院し、そのまま1年近く休職しました。休んでいる間、会社が指し示しているマネジメントとして上がっていくキャリアパスと、自分があこがれているエンジニアの間に差を感じ転職を選択肢の一つとして考えだしました。

2012年に復帰すると新規案件にアサインされました。そのためのスキルを得るために外部の勉強会に参加するようになり、今ならできないながらも一応エンジニアを名乗れるようになったかなと思っています。

現職では、エンジニアのままのキャリアパスが無いため、エンジニアをやっていきたい自分とは合わないと判断し、現職を離れる事にしました。
冷静に見て、自分が所属していた部署は新規のサービスを作っていくというマインドがあります。新規事業を自分で創造したい人には、良い会社ではないかなとは思います。会社のキャリアの考え方は自分とは合いませんでしたが。

転職活動を開始したのは、今年の春に運営したJAWS DAYS 2014です。懇親会に勢いでつぶやいた後に活動を開始しました。

幸い次の会社は決まっており、明日からは違う肩書になります。
心身を壊さないように程々で気合を入れて頑張っていこうと思っています。

最後に「で、誰?」はいらないです。

AzureとAWSでベンチマークしてみた

Azure AWS

最近記事を書いていなかった、、、orz
というのは置いといて、今日はGlobal Windows Azure Boot Camp 2014 in Japanに参加してみました。
基本的にAWS陣営の人なので、若干アウェイ感を感じつつ参加しましたが、大変勉強になりました。
イベントの中身は他の方々が書かれると思うので、イベント中に気になって検証してみた事を書きます。

気になった事

ある方が、AzureとAWSベンチマーク結果を出されていたのですが、AWS側がM3インスタンスだったんですね。結果は当然Azureのが良かったです。公平に見て、AWSは仮想サーバのパフォーマンスが悪い傾向が有ります。
でも、AWSをやっている方は分かっていると思いますが、CPUとメモリの分量で考えるとC3インスタンスを比較すべきだと思います。なので、パフォーマンスがどの程度改善されたかが気になりました。

じゃあ確認するか!

と言う事で、検証にて見ました。

まず検証する

検証対象は、これです。

環境 インスタンス CPU メモリ OS
Azure XL(A4) 8 cores 14 GB CentOS 6.5
AWS c3.2xlarge 8 cores 15 GB Amazon Linux AMI 2014.03
AWS c3.2xlarge 8 cores 15 GB CentOS 6.5

Linuxなので、ベンチマークツールは定番のUnixBench(Version 5.1.3)を使っています。
並列度が8の結果はこんな感じでした。

項目 Index Score
Azure(CentOS 6.5) 2,624.1
AWS(Amazon Linux) 1,934.7
AWS(CentOS 6.5) 1,840.6

色々な方が公開されている結果だと、M1系インスタンスとの比較の場合はAzureがAWSの3倍位だったので、C3系になって随分良くなっています。

再度検証する

やった後に気が付いたのですが、この結果は準仮想化(paravirtual)なので完全仮想化(HVM)の場合も比較する必要があります。
そうして、HVMで取った結果が以下になります。
CentOS 6.5のHVM AMIが無かったのでRHELを使いました。

項目 Index Score
Azure(CentOS 6.5) 2,624.1
AWS HVM(Amazon Linux) 3,401.9
AWS HVM(RHEL 6.5) 4,619.7

なんと、逆転してます!
完全仮想化に比べて準仮想化の方がデバイスのアクセスでパフォーマンスが有利と言われていましたが、ファイルコピーを中心に大幅な向上が見られました。

三度検証する

でも、AzureなのにLinux系のベンチマークって一方的な気がすると思いました。だったらWindowsでもベンチとってみます。
Windowsでの検証対象は、これです。エディションが異なりますが、パフォーマンスには大きな影響がないと思っています。

環境 インスタンス CPU メモリ OS
Azure XL(A4) 8 cores 14 GB Windows Server 2012 Datacenter Edition
AWS c3.2xlarge 8 cores 15 GB Windows Server 2012 Standard Edition

使用ツールは、CrystalDiskMark 3.0.3とCrystalMark 2004R3を使用しました。
ディスクI/Oは以下のようになりました。

Read
Sequence(MB/s) 512K(MB/s) 4K(MB/s) 4K QD32(MB/s)
Azure 1627 1377 54.32 193.4
AWS(EBS) 103.7 98.29 8.44 46.96
AWS(Ephemeral:SSD) 103.7 98.29 8.44 46.96
Write
Sequence(MB/s) 512K(MB/s) 4K(MB/s) 4K QD32(MB/s)
Azure 20.88 42.49 2.036 2.034
AWS(EBS) 30.83 30.89 4.221 11.07
AWS(Ephemeral:SSD) 30.83 30.89 4.221 11.07

ReadはAzureが驚異的なパフォーマンスを叩出しています。Azureはディスクのキャッシュを上手く利かせているのでしょうか?

次に総合的なベンチマークをしてみました。

Mark
Azure 137,043
AWS 285,259

やっぱりAWSの方が速いです。

まとめ

現在では、AzureとAWSを比べると、AWSの方がパフォーマンスが良いです。
しかし、C3は最近出たインスタンスなので世代が異なります。

インスタンス CPU CPU発売時期
Azure XL(A4) AMD Opteron 4171HE 2011年 3月
AWS c3.2xlarge Intel Xeon E5-2680 v2 2013年 Q3

CPUの世代が2年半違うので、あくまで現在の比較結果です。
今後Azureのインスタンスも新世代が出ると思われますので、その時にまた比較してみたいと思います。

最後に

新規インスタンスはHVMを使っとけ!!!

サバフェスに参加したよ!後篇

そういえば後編を書き忘れていたので、年を越える前に書いておきます。
GETの対応までは書いたから、その次か。

POST対策は?

多重度が上がってくるとMySQLの処理時間が大きかったので、MySQLをどうにかしようと思いました。そこでMySQLをスケールアウトさせる戦略を考えました。
ぱっと思いついたのが、以下の2案でした。

  • Federated
  • Spider
Federated

Federatedのリファレンスを見ていると「リモートデータベースに何か変更があると破壊される事があります。」と書いていたので、Insertはスケールアウトができなそうだったので、ボツ。

Spider

Spiderはイケそうな気がしたのですが、パーティションを定義しなければならないので「Engineのみ。Engine以外の変更が必要なEngineは利用不可」というレギュレーションに違反する?ので諦めました。

結局、ストレージエンジンで解決できなそうだったので、全サーバにMySQLを入れ、各WordPressからローカルのMySQLへアクセスさせるようにしました。そして非同期で1台のマシンへ集約するようにしてみました。
f:id:maroon1st:20131231123837j:plain
こんな感じです。

作りは、かなり適当です。非同期でデータを集約するのはShellを作成してループで回しただけだし(Supervisorとか使ってない)。

結果

全体としては、8位でした。POSTは比較的アクセスを稼げました。GETはDSRの有無でアクセスが倍くらい違っていたので、まだまだという感じでした。

もう一歩チューニング、、、

DSRはやった事が無かったと、クラウド環境で使えると思っていなかったので、もう少し時間が有ってもGETは稼げなかったと思います。
POSTの方は、WordPressMySQLの間にMySQL Proxyを噛ませて、mysql-proxy-cacheを使えばアクセスを稼げたかなと思います。
内容としては、完敗という感じでした。

終わりに

今回は初開催と言う事もあってか、レギュレーションがブレたり、変更可能な個所がこなれていなかった印象が有ります。しかし、2回目の開催は決まった様なので、次回もぜひ参加したいと思います。
次は、もう少し実用的なチューニングをしようと思います。

「SIerのSE」は、JAWS-UGに出会うことにより「エンジニア」になれたか?

本日は、JAWS-UG Advent Calendar 2013 on Zusaarの10日のエントリです。
なお、技術的なことは書きません。

JAWS-UGって何だっけ?

JAWS-UGとは、皆さんご存知の通り Japan AWS User Group の略ですね。
世界最大?のAWSユーザグループで、全国(実はシンガポールにも)に50程度の支部が有ります。

AWSに触れる」

AWSとも出会いは約2年前、2012年の春。
上司:「今度のプロジェクトは、Amazonでやるから。あと、君がインフラ担当ね!」
俺 :「はあ。AWSやったことないですねえ。そもそもインフラ専任って初めてなんですけど、、、」
こんなのから始まり、結構不安でした。
まず、AWSのパートナー向けトレーニングを受ける。そうすると、何でも標準サービスを使えば何とかなりそうという印象が有りました。
その時の講師はアイレットの鈴木 宏康さんだったなあ。

JAWS-UGとの出会い

AWSについて調べ始めると Publickey に、「クラウドデザインパターン」(Cloud Design Pattern)の紹介記事が載っていました。CDPの各パターンを詳しく調べると、考え方*1にカルチャーショックを受けました。
外部の勉強会なんて参加したことが無かったのですが、CDPのイベント見つけてすぐ申し込みました。
実際にパターンを作ったNinja of Threeの方々の解説は勉強になりました。また、JAWS-UGの方の発表は面白かったです。得上さんのパターンとか。
このイベントでJAWS-UG知って、JAWS-UG東京に参加するようになり、AWS SUMMIT TOKYO 2012にも会社を休んで*2行きました。
この頃にはAWSに普通にハマっていました。

JAWS-UGの中の人へ

2012年の10月に地元の横浜支部が立ち上がるというtweetを見て、すぐに申し込みました。11月、12と連続開催だったので当然両方参加しました。東京支部は参加者がとても多いため、一体感が少ないところがあったのですが、横浜支部コワーキングスペースで30人だったので一体感を感じやすかったので、参加しやすかったです。
勉強会の最後に支部長の吉田さんが「横浜支部はコアメンバーを募集中です。」と募集していたので、勢いで手を挙げていました。

JAWS-UGの中の人として

横浜支部で何回か勉強会を運営してました。横浜支部のイニシアチブを吉田さんがとってくれていることも有り、色々な勉強会を開催しました。
例えばこんなの。

そして、今年の6月に「秋に大阪で大きいイベントを開催するぞ!」とJAWS-UGの中で話が上がり、流れで運営者の一員になってました。
ただの運営者の一員で御手伝い的な乗りだったのですが、横浜支部でやった ワールドカフェ を大阪でもやることになり、セッションを実際にやる人になってました。それまで、ほとんど発表することがなかったので正直どうしようと思っていたのですが、横浜支部のみんなのお陰で無事成功をおさめられたのかなあ、と思います。
その時やった内容は、これ「JAWS FESTA Kansai 2013 で一番長いセッションをやってきた - maroon1stの技術日記?」に書いてます。

SIerのSE」はエンジニアになれたか?

AWS、JAWS-UGに携わる前は、いわゆる「SIerのSE」をやってました。正直、自分のことをエンジニアを言っていいのか不安がありました。
自分で何かを作れるわけでもなく、「設計」と「テスト」をやっているだけでエンジニアではなかった気がします。エンジニアは技術を生かすのが仕事ですが、それをしていませんでした。

しかし、JAWS-UG等のコミュニティに参加することで、SIer以外の人とふれあい、考え方が変わった気がします。そして、技術や情報について受け身だったのが、少しずつですが自分で検証して外にアウトプットできるようになってきました。そして技術の仕事をちゃんとできるようになったと思います。

今は、「自分はエンジニアです」を自信を持って*3言えるようになりました。

最後に

自信を持って「自分はエンジニアです」と言えるようになったのは、JAWS-UGのに皆さんのおかげだと思っています。JAWS-UGの関係者の皆さん、本当にありがとうございます。

*1:「クラウドアーキテクティング原則」などです。

*2:サボってませんよ。ちゃんと年休です。

*3:まあ、三流かも知れませんが、、、

サバフェスに参加したよ!前篇

11月に1週間も開催されたCloud Server Festa 2013 Autumn(サバフェス)に参加しました。
その参戦記でも書いてみます。12/11に表彰式もある*1しね。

なんで参加したか?

はい、賞金20万円に釣られました!
ということは置いといて、チューニンガソンが面白そうだなと思っていたのですが、前回参加しそびれた後、次が開催されなかったので、同じようなものが開催されたなと言う事で参加しました。

どんな内容

一言でいうと「WordPressを5台構成で如何に早くできるか」です。

環境は、以下です。

  • IDCフロンティアさんのクラウドで、サーバのスペックはM8までを5台まで使用可能。
  • OSは、CentOS6.4 64bit、WebサーバはApacheかNginxのみ、DBはMySQL
  • WordPressのソースは一切触らず、プラグインも禁止。

細かいレギュレーションは、ここ(http://serverfesta.info/?page_id=11)に書いています。

最初にしたこと

「参加の手引き」に従ってWordPressをインストールしましたが、とりあえず、PHPMySQLCentOS標準のバージョンから新しいものを入れました。

  • PHP 5.5.6(@remi-php55)
  • MySQL 5.5.34(@remi)

PHPは最新を入れました。
MySQLは5.6も考えたのですが、設定ファイルの場所が変わっているのと、どこかでBenchMarkがあまり変わらないのを見たので5.5を入れました。

それと、ベンチマークの確認です。
サバフェスのレギュレーションでは、2時間に1回しかベンチマークが走らないので、スコア確認をやりにくいのです。
一旦、負荷のアクセスログを確認しました。アクセスは単純で、最初にGETが1分、POSTは2分で、アクセス先も固定されていました。
GETは"/"で、POSTは"/wp-comments-post.php"にアクセスが来ていました。

とりあえずGETの対策

GETの後にPOSTというアクセスだったので、GETはキャッシュを返しても問題なさそうでした。
Varnishを入れてスコアを見るとGETで80,000位行ってました。ただ、WebサーバがApacheとNginxのみという制限がどこまで影響するかわからなかったので、VarnishをやめてNginx+PHP-FPMを入れました。Nginxでも80,000程度のスコアが出てました。
VarnishもNginxもまともに触ったことが無かったので、ちょっと苦労してました。

後半戦になる

他の参加者のスコアを見ると、GETが400,000越えのスコアも出ていました。POSTに至っては、2,000,000を超えるという化け物級のスコアだし。
まったく勝てる気がしない、、、

そうしたらtwitterの公式アカウントで、

とか言っている。
もしかして、意味が分からないスコアは、ステータスだけ返してる???
もう一度、ベンチマークのリクエストを確認すると、大量GET->大量POST->5secのwait->最後にGET となっていたので、最後のGETでPOSTの結果を確認していると推測。
何故ならGETがキャッシュのみを返していたため、POSTのスコアが0になってました。
確認用GETリクエストのwaitが5sec程度なので、キャッシュも5secに調整したら、POSTのスコアが戻りました。

正直、GETはこれ以上思いつかないので、POSTをどうにかしようと対応しだしました。
っとなったのですが、そろそろ面倒になってきたので、これ以上は後編に書きます。
では!

*1:まあ、表彰される順位ではないでしょう、、、

AWSでRDS使いつつ全文検索もしたい!(CDP新提案)

AWS CDP

本日はCDP Advent Calendar 2013 on Zusaarの7日目のエントリを書きます
毎年AWSは相も変わらず、新機能ラッシュですね。今年は個人的にRDS関連の新機能が目立った気がします。Read ReplicaのMaster昇格やリージョン間スナップショットコピー、PostgreSQL対応など盛りだくさんでした。
今日は、RDSを使ってCDPの新提案してみます。

ここからは、CDPのテンプレートに則って書いて行きます。

CDPの内容

解決したい課題

「世界でもっとも普及している、オープン ソース データベース」であるMySQLは、本来様々なストレージ・エンジンを使用でき、様々な検索特性に変更できる。しかし、クラウド環境でサービスとして提供している物では、ほとんどの場合MyISAMはInnnoDBしか使用できない。
好きなストレージエンジンを使用する場合は、自前でMySQLの運用など行わなければいけない。

クラウドでの解決/パターンの説明

MySQLでは、標準機能でMaster-Slaveのレプリケーション構成を構築できる。Masterにクラウドで提供しているDBサービスを使用し、バックアップ等の運用の手間を軽減し、Slaveを自前で構築し、自由にストレージエンジンを構成する。

実装

AWSでは、RDBMSサービスの「RDS」が使用でき、他のMySQLレプリケーションできる。RDSをMasterにし、別途EC2にインストールしたMySQLレプリケーションする。

  • RDSをMasterとして作成する。
  • EC2へMySQLをインストールし、好きなストレージエンジンで構成する。
  • RDSからMySQL on EC2へレプリケーションを行う。
構造

f:id:maroon1st:20131207151628j:plain

利点
  • 好きなストレージエンジンで検索できるので、全文検索(mroonga)等を高速に行える。
  • バックアップ等の運用管理の手間が軽減される。
注意点
  • EC2上のMySQLはSPOFにならないように複数台構成することが望ましい。
  • ストレージエンジンによってはINSERT/UPDATEが不得意なものがあるため、レプリケーションが詰まる可能性がある。
  • レプリケーション対象は、インスタンス全体ではなく対象のDBに絞る必要がある。
その他
  • 未検証ではあるが、DWH用ストレージエンジンを使用すれば集計処理を高速に行うことも可能になる。
  • Attunity Replicate等のソフトウェアを使用すれば、同様の構成をRDS->Redshiftで可能になる。

まとめ

実は、JAWS-UG 千葉團の第1回でやったLTネタ(みんな大好き“全文検索 on AWS”を試してみました!)をまとめた物です。
名付けて、"Complex Searcher パターン"!
これは、id:understeer さんが、RDS: MySQL5.6 のbinlogアクセス権限 - aws memo でRDSにMySQL 5.6が使えるようになったら、REPLICATION SLAVE権限が使えるようになってたと書いていたの覚えていたのが始まりでした。その後、ElasticSearchとか検索エンジンが盛り上がってきましたが、カジュアルに使うならmroongaだろ!と思ったので、このパターンを思いつきました。

最後に

タイトルだけはCDPのサイトに3か月前からあったんですが、ずっと手付かずだったのですが、Advent Calendarがあったので整理しました。
SQLアンチパターンという本をを読んで気が付いたのですが、CDPはネーミングが今一つです。もう少しセンスが有る名称にしましょう。
個人的にセンスが有ると思っているのは、Counter TableパターンとKraken SSLパターンですね。実用性は考えないよ!


この内容でCDPのサイトにアップするかな。

SendGrid Nightに行ってきた

@nakansuke さんから強烈な「ブログ書けプレッシャー」を受けたので、SendGrid Nightの参加レポートを書きます。

SendGrid?

説明不要かもしれませんが、一言で言うと「クラウドメール送信サービス」です。何でも「クラウド」と呼ぶのは嫌いなんですが、SendGridはスケーラブルでありAPI経由で全ての操作が可能であるので本当の「クラウド」です。

SebdGrid Nightのセッション

SendGrid Nightは、SendGridのKen Apple氏が来日されるのに合わせて、Engine Yardさんの事務所で勉強会されました。
本編は「SebdGrid入門」ということで、構造計画研究所の中井さんとSendGridのKen AppleさんがSendGridの紹介をしてくれました。
発表の資料は、これでした。

  • SendGridの日本語に関するサポート全般や日本円、請求書払いを構造計画研究所さんがやってくれる。
  • SebdGridは、メール送信でややこしい処理(ISP等のSpam判定解除とかドメイン認証)を全てやってくれる。
  • 以下のTipsでメール送信を効率的に行うことができる。
    • 1つのSMTPコネクションで複数のメッセージを送信できる
    • SendGridに同時に複数接続をしてメール送信送信できる
    • 1接続で1000人の宛先まで送信できる
  • RFC違反のメールアドレスへは送信できないけど、構造計画研究所さんと相談中。
  • etc

といった感じです。
その後にLTがパソナテック 大久保さん、構造計画研究所 佐藤さんやフレクト 若葉さん、Wantedly 川崎さんと続きました。

詳しい内容は、中井さん(id:nakansuke)が書いているので割愛します。

懇親会!

勉強会の後の懇親会は、構造計画研究所さん、SendGridさんのオゴリでした!太っ腹です。
しかも、SendGridのノベルティのじゃんけん大会も開催しました。
SendGrid Tシャツやサングラス、ワンショルダーのバッグまでありました。








で、サングラスとワンショルダーのバッグをゲットしました。

f:id:maroon1st:20131022211258j:plain

まとめ

国産サービスだと、価格が高い分簡易的なWeb画面が作成できたりしますが、SendGridは強みに絞ってサービスをしている気がします。
必ずしもどちらかが良いとは言えませんが、Webアプリを作っている場合は、豊富な機能は必要ないのでSendGridが良い気がします。
自分が担当しているシステムは現在国産サービスを使用していますが、RFC違反のメールアドレスへ送信できる様になったら、SendGridへの移行を提案しようかなと思いました。




なんにせよ、SendGridさんはノベルティをくれるので、SendGridをみんな使いましょう!
f:id:maroon1st:20131025194842j:plain

よし、これでプレッシャーから解放される!