uzullaがブログ

uzullaがブログです。

今回ISUCONではじめてAzureつかいましたの件

Azureってどこぞの統計ではAWSに次いでいるらしいし、日本リージョンもちゃんとあるし、色々ある。 しかし、なんだかんだ周囲の人はさわってないクラウドだったと思います。

ISUCON6でついに触るきっかけを得て、なんだかんだIaaSとして1ヶ月試した(試用期間がちょうど切れた)ので、その感想などを書いてみたいとおもいます。

ただ、Azure識者いわく、「ISUCONは競技の性質上しかたないが、いまさらIaaSを苦労するよりAppServiceなどをつかうべき」というのにはまあ一理あるなとおもったし、これをもってAzureがどうこうではないと思う。しかしまーLinux Boxがあればええんじゃというのは引き続きある需要なので…。

良い所

  • そこそこシンプル
    • たんなるVPSとして使うなら、競合よりわかりやすい。
    • いわゆるSecurity Groupとかもシンプルだしすぐ反映される
    • (私は)AWSで喰らった謎の消えないCPU IDLEなどが発生せず、性能は安定して出ていた
  • Web UI
    • まあ、ほぼ説明なしで使える程度にはシンプル
    • デプロイボタン(を、使う分には)便利!
  • Azure cliコマンドラインからのAzure操作)
    • azure cliはnpmで入るので楽
    • シュッっとVMをたてたり、立ち上がっているVMのIPを一覧できたりするのは便利
    • (gcloudなみに便利)
  • サブスクリプションやリソースグループについて
    • 理解するまでちょっと時間はかかったけど、理解したら把握しやすくて便利
    • サブスクリプション(資金バジェット、お財布、クレカ)の概念は良いと思う、案件がいりくんでもアカウントが乱立しづらそう(どうだろう?)
    • リソースグループにカンタンに人を追加できるので、ISUCONみたいな急造のチームでつかいやすいし、切り離ししやすい
  • VHDについて
    • サーバーにアタッチされたHDDであるVHDが結構便利、取り扱いもしやすい
    • これ、ローカルにおとしてうごかすこともできるんじゃろ?(俺はWSもってないけど)
    • VHDのコピーが爆速で最高(一瞬でクローンできた)
    • VHDを別のVMで立てたりとかできるのは便利
  • 課金について
    • どのクラウドよりもコンパネで課金状況が直感的に見やすいし、詳細も見れる、安心できる。
    • 試用サブスクリプションをそのまま課金サブスクリプションに切り替えできる(らしい)
    • 最初にお金をつっこんでおく(先払い)ができる、バーンレートグラフがみれてリアル(?)

悪い所

  • Web UI
    • Web UIが独特かつ挙動不審(ちょっと重い、たまに崩れる、表示が変、遅い、ブラウザリロードしないと反映がされない事も、ログインセッションがおかしくなる事も)。兎に角Web UIはもうすこしがんばってほしい(もしかしてEdgeならばっちり動くのか…?)
    • 使い勝手が惜しい、リソースまとめて削除とかしたいし、VM立てるとき毎回コピペ面倒なのでSSHキーを登録させておいてくれ頼む
    • リソースグループ内に複数のVMを立てると、依存がわかりづらくて処分ががちょっと面倒
    • 実はWebUIではできないこと、azure cliでしかできないことがかなりある
  • ストレージ、ストレージアカウントについて
    • ストレージアカウント概念に親しみがない、アクセス権限の設定が微妙にわかりづらい。使っていれば慣れるかもしれないが。
    • オブジェクトストレージも、Diskも、DBも、Queueも一箇所でこれはいいのか悪いのか…(わかりづらい)
    • もっとシンプルになるとめでたい(ある意味、今もシンプルさをめざしているのだろうが、慣れ親しんだ概念でない)
    • 中を操作するだけなら http://storageexplorer.com/ こういうツールもある
  • ドキュメントについて
    • ドキュメントは豊富にみえて、自分のユースケースにマッチしたものが少ない(WindowsLinuxで違いがあるし、azure cliPowerShell版でも違いがあるので…)
    • まあ、他はもっとなくて、仕方なく個人ブログみて解決してるような事なので、Azureは充実している方だ、ともいえるが。
  • VMのコピー、スナップショットがとりづらい

    • VHDのスナップショット(というかコピー)はサーバーがオンラインではできないのが惜しい
    • もう一度同じVMを立てる時とかにつかうテンプレートのJSONは取り扱いにめげる
    • 現在のリソースのJSONをみて、ゴネゴネするツールはある ( https://resources.azure.com/
    • JSONを視覚化してくれるやつもある(つかったことはない)( http://armviz.io/designer
  • 価格

    • 高くもないけど、どうせならもう一段階安いVMが欲しい
  • ところどころの古さ
    • CLIでシュッとたてられるUbuntuのデフォルトは16であってほしい(勿論16はあるんだけど、cliからだと短くLinuxboxをシュッとたてる手法があるのだが、それが14)

まとめると

azure cliをつかっていけば大分解決する事が多い。と、ここまでかいていて昔のAWSもそんな感じだったな…と思い出しますね。

課金周りがシッカリしているのが大変に印象がよい、さすがMSである。最近のクラウド系サービスは国内外問わず、本当に課金、利用履歴周りが自分勝手というか、ユーザーの事情を軽視している気がしていて、最悪のケースだと知らないうちに金が(検閲削除)。お金を払うところだけはシッカリしないとお客さんに勧めるどころか、次回使う気がしないので、Azureはそこについては安心感を感じられた。勿論ちゃんとアラートもある(Cost Management + Billing の概要 - Azure Cost Management + Billing | Microsoft Docs)し。なんと(事前払いではあるし、最低金額が結構なものだが)請求書での決済に儀式も(あまり)不要(12 か月の前払いプラン | Microsoft Azure)(っぽい)!

続々と新機能も増えているらしいし、PHPerとしてはApp Service(PaaS)の動向は気になっているので、そこはつかってみて改めてレポートしたい。 (PaaSについてはAWSはアレだし、GoogleやHerokuなどはお客さんがピンとこない。あと、「MSはどこの競合企業でもない」ことが多いので(闇)通し安いのではないかな!!)

どうやって学ぶべきか

これはオンプレおじさんの文脈なんで、いまどきのクラウドネイティブな人は違うかもですが…。

まずはアカウントをとって、一通りVMを立てたり壊したりしてみましょう。そして「全てのリソース」や「リソースグループ」をみて、どういった要素で組み立てられているのか確認するといいとおもいます(たとえば、NICとかStorageとかあるわけで)。この時に画面を英語にしておくと、後で直訳単語の対応で迷わないという説もあります(私は大丈夫だったけど)

その上で、azure cliをいれて、同様の事をやってみると大体わかるのでは。

個人的にシッカリ見ておいた方が良いだろうなと思うのはストレージ周りですね、なんかここだけやたらややこしい。AWSでいうところのS3みたいなのに、「およそデータといわれるもの全部が」はいっているのですが…これはわかれば便利だが、ストレージアカウントアクセスキーがどこにあるんだとか色々最初迷うとおもいます。

たとえばVHDをコピーして、コマンド叩いてVMたてられたりするくらいになれば、「あっなるほどね」という感じになると思います。 個人的にはVPSとかみたいにつかうと、このVHDの概念を中心に据えて理解していけば、他のクラウドよりも便利に感じるんじゃないかなあとおもったりしますが…どうだろう?(AMIみたいな段階が一個飛ばせるし)(ただ、これは「そんな作業するの?」って人に何度もいわれたので、オンプレおじさん的な発想なんだろうなあ…)

このあたりはazure cliの話になるので、その内また別エントリで書きたい。

で、俺は使うのか?

ウーン、一番安いインスタンスでも月1700円なんですよね。まあ安いけど、個人の実験とかだとまだVultrをまだつかってしまうかなー(https://www.vultr.com/pricing/

お仕事においては、AWSが宗教上の理由でダメなお客様ってたまにいるので検討できる。VHD周りの知見がふえて、実はスゲエ取り回ししやすいんだぜ!って事になればワンチャン。次は提案してみようとおもいました。

印象は良い方なので、次回がまたAzureでも喜んで使いますよ!

ISUCON6参加してきました!

土曜日参加でした。私は翌日温泉につかり、サウナと水風呂を往復し、予選二日目も終わった後、TLをみながら休憩所でコレを書いております。

これポストしたらもう一度サウナに入ろうとおもいます。

ということでやってきました。結果は予選落ちです!!最終得点72018点でした。

このエントリはたんなる日記なので、技術的考察などはございません!!

今回の布陣

今年は誰と出るか全く考えていなかったのですが、moznion氏の提案により突然スッときまりました!

チーム:「[=======> ] 80%」 メンバー: 私(uzulla)、sugyan、moznion

とても良いチームでした!

役割的には、私がインフラ(Azure、サーバー、ミドルウェアなどアプリより下、ベンチマーカー等)他二人がロジックやコードという感じです。

練習沢山しましたよ

三人がリアルに顔を合わせての練習は計2回。二週間前と一週間前に本番同様のスタイルでやりました。

これは実際に成果というか、体感のできる手際の上昇を感じました。そして単純に私は楽しかった(楽しいISUCONを3回やったようなものなので)。

この三人で一緒に仕事とかをしたことはないですが、何度も練習することでチームワークや手順で不安になることなく当日開始でき、無駄な作業はかなりすくなかったと思います。後述の通りスタートダッシュはよかったので、これは完全に練習の成果ではないでしょうか。

当日の記憶

私はうっかり朝4時に起きてしまったので、日の出前からつくっておいたタレを確認したり、イメトレをしたり、チートシートを整理したりしていました。

今回、できるだけ普段の環境をつかいたいとおもったので、MacbookProより重い普段つかっているLibretouchというフルキーボードとマウス、パームレストなどをもっていきます(モニターは現地で貸して頂いた)

少し早めの電車で戦場にむかったところ、遅延が発生していましたが早く出たので無傷。早めに行動することは重要。

前述の通り練習はしっかりやっていたので、特に当日段取り設備の用意ができた後はレギュレーションを何度も読んでいました。

10時になったら即デプロイ。今回デプロイがディスクイメージでなくansibleからの生成なので、最初はいってデプロイ前のコードがどこにあるのか探し出すのが最初の仕事だった気がしますw

スタートダッシュはよかった!

我々は正午ごろに最初に5桁をだして一位になりました。その後じわじわ追いつかれてきたものの、sugyan氏が「はあっ!」といったらギュン!っとひきはなし、その後さらにおいつかれそうになったらmoznionが「フンッ!」とやったらまた引き離すという、実にアツい展開でした。

スタートダッシュは私の担当箇所も多いので練習の成果もあり、滑り出しはかなり良い感じに動けたと思います。

この時、「やべえ!俺等いけるんじゃね!!??ISUCONたのしい!!!!」と全員で盛り上がっていたのをおぼえています。

しかし…

午後13時半くらい?に抜かれた後、攻めあぐねて一度かなり点を落とします。まあ戻せば元の得点に戻るのでそこまで焦ってはいなかったのですが、ここからはあまりのびる事ができませんでした。

色々とバクチ((c)moznion)を打ったりして大きく書き換える事ができる箇所を見つけても、なかなかそれが得点へのインパクトにつながりません。この時トップは10万点をこえており「これはどうやってんだ」という空気が蔓延します。

我々がやらなければならないことは「正規表現の暴力を撲殺」だったわけで、それは認識できていました。しかしこれに対する良い(そして納得できる)解決策を決断できず、ISUCONのセオリー通りに「結果をキャッシュできないか」「ワーカーと分離してみるのはどうか」などをおこなっていました。

今思い返せば、それでは正規表現を撲殺できているわけではなかったのですね…、ムムム。

無念

ということで、その後あまり得点はのびることはなく、コードをもどし、色々な小手先のテクニックを駆使してじわりと小銭を稼ぐ((c)moznion)感じで、私はワーカー数の調整や、いらないものを切り離すみたいな地味な作業を祈りながら繰り返していました。後は細かい罠(というか、修正を誘う箇所)をみつけては一応つぶしていく、みたいなことをしていましたね。

頭をひねり、コードを書く二人をみながら注意深く再起動を何回も繰り返し、問題がでないことを何度も確認しました。これは当然得点には大きく貢献できないので、段々と(なにもできないけど)焦りを感じます。

そうした中、17:43くらいにその日ベストの72000点がでて、このまま悪あがきしてなにか壊れるとヤバいのでそこで試合終了となりました。

三人で「くやしい!くやしい!ワンチャン!ワンチャン!」といいつつ、ISUCONでこんなに真剣に悔しく、15時くらいまではまちがいなくトップグループにいたわけで、個人的にはまけたものの達成感もありましたね…(志が低いと怒られそう)。

その後呑み会

他の土曜日参加者のYappoさんとkamipoさん、lestrratさんとmacopyさんとpapixさん、我らチームで吞みに行きました。

yappoさんkamipoさんの「解法」について色々きいて「え〜ッ」「なるほど〜」が半々くらいでした。

また、lestrrat氏のチームはgoをつかっていて、それ由来で大変な所もあったようで我々のPerlはわりと恵まれていたのかもとおもいました。

ここらへんで聞いた様々な事は他の上位チームとかけ離れた解法ではないとおもうので、いつかよい解説記事がでてくれると思います。

私の担当箇所の感想

私は足回りとかベンチマーカーの世話とかそういうことをやっていたのですが(いわゆるインフラチームみたいな)、もうここらへんの作業は定型文になりつつあります。そこは十分に理解していたので、何度も何度も素振りをして、当日は足をひっぱらないことに専念しました。

タレをつかってセットアップはすぐにおわったし、TcpdumpでパケットみてIf-Modified-sinceがあったのでそこらへんはExpireを30日くらいにしてKeepAlive有効にしたらほぼ一切消滅しました。ここまではよかった。

ただ、やっぱり後半には「得点を稼ぐ」という意味では時間が余ってしまうので(ベンチマーカーを回したり、監視をしたりというのがあるので、細切れの時間にはなってしまうのですが)、やはり私も積極的に「急所」をみぬいてそれをシェアできる必要があるなと痛感しました…。

そして、二人が戦っているhtmlifyの解決策は私には思いつかない所でした。残念ながらあれはやったことがない事だった。

しかたなく、マイクロサービスであるisupamについて、パケットをみて「こいつもっと良い叩き方があるのでは、間にリバースproxy的にnginxをはさんでキャッシュできたりしないかな?」などと調べたりしていましたが、これは間にあわず。

最終的には二人が戦っていたhtmlifyがやはり一番の敵ということになったのですが、上述した通り、私にはあれを上手く解決するための策が思い浮かばないし、チームメイトに良いサジェストもできなかった自分の知識、スキル不足に悲しくなりましたね…。

次に向けて

3回やってISUCONのスタートダッシュは慣れました、次も同様に日々のキャッチアップと素振りをすればスタートアップに迷惑はかけないとおもいます。 (強いて言えばサーバーのコードを手元にもってきて手元でうごくようにする素振りがもっと必要ですね、これは精進します)

また、今回はSlack連携とかの遊びも多少できましたので、次回はさらになにか楽しい事できないかと思います。(自分達の分だけでも、グラフを書くとか)

そして、上にも書きましたが、次はもっと良いロジックが提案できるように勉強し、自分の脳みそをストレッチして望みたいと思います。 まあ、なかなかそんなカンタンにはいかないだろうし、開催一ヶ月前からの練習とかでなく、普段の鍛錬がもっと必要でしょうけどね…。

感謝

ISUCON運営のみなさま、本当にありがとうございました!大変に楽しいイベントでした。

そして、特にチームメイトのsugyan氏とmoznion氏、一緒にやっていただいてありがとうございました。sugyan氏には元優勝者と一緒にやるという経験を頂きました、これは本当にかけがえがないです。moznion氏は3回目ですが、今回も誘って頂いたし、色々なサポートもしていただきました。

私は「実際の所、なにも成し遂げていない人」と言われる事もある人間で、残念ながら今回もそうなってしまったのが大変に残念ではあります。 しかし、めげずに(ISUCONにかぎらず)より一層精進し、なにかを達成し、さらになにか恩返しできればとおもっています、がんばります。

イケてるメンバーのエントリ

memo.sugyan.com

関係のない宣伝

2016年12月3日にBuildersconというテック系カンファレンスが開催される予定です。

https://builderscon.io/builderscon/tokyo/2016builderscon.io

「buildersconは「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭りです。」

ついにCFPもはじまりました

https://builderscon.io/builderscon/tokyo/2016/sessions

TwitterやBlogを是非フォローしましょう

blog.builderscon.io

公式Twitterはこちらです。

https://twitter.com/builderscon

Builderscon::BBQ を開催した…

Builderscon主催 lestrrat氏こと肉焼士の趣味の一環として開催されるBuilderscon::BBQ*1を先週末開催しました。今回は無限ラムチョップです。 なお、過去はこのような感じでした。

無限ラムチョップとは、屋外で無限にラムチョップが焼かれる会です。

ラムチョップ(裁断済み)とはこういうものであり、このラムチョップは非常に良い物なので非常に癖がなく美味しい。

裁断前はこういうものです。

広告枠

https://builderscon.io/builderscon/tokyo/2016builderscon.io

このブログをご覧の方は推定で3割くらいはもうご存じだとおもわれますが(Buildersconをご存じでない方向けの情報は後述します)、Buildersconとよばれるカンファレンスの第一回目が12/3に渋谷で開催されます!

現在着々と準備は進行しております。詳しくは上のサイトをご覧下さい。

話を戻して

熟練の肉焼士がたのしそうにやいていきます

美味しそうでしょう!

最高!

ところで、当日は雨でした

BBQと雨は最悪の相性ですね!

最初は「グリルの近くなら暖かいからなんとかなるな!」とか(つよがりを)いってたのですが

団扇が雨でやられました、これは完全に盲点でした。地面には川ができ、炭もしけっていきます。

火が絶えていく…。

そして肉焼士は天を仰いだ

ということで

雨の日はBBQは無理ですね!(ただし、同じ公園では雨の中カッパを着て楽しそうにBBQをつづけるグループがありましたので、根性や装備の問題かもしれない)

なお、前日までは曇りという予報かつ、降水量1mmとかいてあったが、フタをあけてみればどうみても本降りでした、残念。

参加したみなさん、屋根がなくてすみませんでした。

「厚さ2cm 3cm以下は紙!」をポリシーとする人でも、BBQ+雨という拷問を1〜2時間くらいやると「紙?そんなことより屋根だ!」と言い出します。

(20160829訂正: 厚さ3cm以下が紙だとのことです)

それでも結構な人数の方があつまったりして、

なんか、ロゴ入りの帽子をいつのまにかかぶったりしていました。まあまあたのしそうです!

その後、屋根の下に移動し、カモをながめました。屋根最高

リベンジを予定しております。

こちらからは以上です!

広告枠

Buildersconをいまだご存じでない?是非ともご確認ください。

公式サイト http://builderscon.io/builderscon.io

公式ブログ blog.builderscon.io

主催のエントリ

medium.com

公式Twitter

twitter.com

あなたも2cm 3cm以上の肉をたべてみたい?是非BuildersconのスタッフSlackに参加してみては?

Slack 自動招待URL

slack-invite-dot-builderscon-1248.appspot.com

他のエントリ

http://leko.jp/archives/863leko.jp

*1:正式名称というわけでは無い