Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

【特別対談】 ITベンチャーが語る #エンジニアリング組織論 とは に参加してきました!

皆さん、こんにちは。村田です。
私はプロダクトマネージャー兼エンジニアリングマネージャーの立場で仕事をしているのですが、そんな私にとって非常に興味深いタイトルのイベントがあり、参加してきました。

lob.connpass.com

イベントに参加した経緯

書籍「エンジニアリング組織論への招待」を読んだ方は多いと思います。私も読んですぐに社内のメンバにも「これは必読!」と勧めた口なのですが、その著者の広木さんがトークセッションに出る、さらに個人的にファンであるJapan Node.js Associationの代表理事である古川さんも出るとあって、申し込みました。

イベントの形式

イベント全体としては、イベントを主催しているLOBさんBizteXさんの会社紹介があった後、LOB CEOの竹林さんをモデレータとして、

  • エンジニアリング組織論への招待の著者 広木さん
  • Japan Node.js Association 代表理事 古川さん
  • BizteX CTO 袖山さん
  • LOB CTO 中原さん

というメンバで、ITベンチャーが各テーマについて取り組みを話し、広木さん、古川さんからのコメントが語られるという形式で進み、最後に質疑応答+懇親会という形式でした。

f:id:acro-engineer:20181201214309j:plain

この記事では参加レポートとして、印象に残った内容とそこで思ったことをテーマ別にまとめています。
*1

Theme01 初期採用

基本はリファラル採用に両社とも力を入れたという話でした。

LOBさんの話で、最初は2名でとにかくずっとやっていて、掲げるミッションを言語化できてから採用に力を入れ、人も集まるようになったという話、BizteXさんも事業戦略からマネジメント方針のロジックを作ることを大切にしていると話されていて、やはりミッションとかバリューの言語化が重要だよなぁと感じました。


 うちの社内でもミッション、社員理念、バリューとかを社員みんなで話して細かい文言にもこだわって決めています。
 なので、他社のミッションとかバリューがどのような内容なのか、どんな意味が込められているのかはとても興味があります。


会社紹介の中で、LOBさんのバリューとして紹介された「(Put Your)Hands Up ~名乗りを上げよう~」、BitteXさんのマネジメントの2本柱の1つとして紹介された「個人の利と会社の利を合わせる」という文言は素敵だと思いました。


リファラル採用って実際にどうやっているのだろう?と私も思ったのですが、採用での口説き文句があれば教えてほしいという質問の中で、
広木さんから

「あなたと一緒に働きたい」というメッセージをちゃんと伝えているか?

というコメントが心に残りました。単に人手が足りなくてエンジニアが必要だ、とだけ伝えていないかという点は今後に活かしたいです。

Theme02 チーム開発

「新しい技術を導入したいというメンバがいたとき実際にどうしているか?」という問いについて古川さんが、

実際的にはただその技術を使うというだけでなく、チーム開発しているので、他の人もできるようにする仕組み作りや教育などまで含めて必要になることを説明することが必要。やるべきことは多いのだが、それでも(それも含めて)やりたいか?とちゃんと聞く

ということを言われていて、とても賛同しました。

そこに広木さんの「やりたいと言わせたら勝ち」、「失敗できることは福利厚生」というキャッチーな言葉が紹介されましたが、それはつまり、そのような状況や環境作りがエンジニアリングマネージャーの役割だよ、ということだと理解しました。

Theme03 目標設計/評価制度

評価制度

評価制度は本来的にはなくてもよいものなので、評価制度とはわざわざ作るもの
では何故わざわざ作るのかと言えば、それは「納得」と「成長」のため

といういきなり本質的な広木さんのコメントがありましたが、これは非常によくわかる話でした。


 というのも、うちの会社では全社員が査定会に参加し、全社員で給与を決定する仕組みである「Happy査定360」というシステムをやっています。
 これをなぜやっているか、と一言でいえば、「納得と成長のため」です。


 よく「全社員で給与を決定する」という所に驚かれて、その点を聞かれることが多いのですが、大事なことは、給与は最終的な結果であり、
 そこに至る評価の部分を皆で議論を尽くしてやっていることだと思っています。評価軸や職位に求められる責務、会社として必要なスキルや
 目指すべき理想について話すことで納得を高め、成長につなげるように意識しています。


評価の部分は、最初に出てきた会社のミッションやバリューと合わさって組織を設計する重要な要素だという思いをより強く持ちました。

目標設計

主に広木さんから次のようにコメントがありました。

目標設計は評価制度に結びつけ過ぎないようにする。それは何故か?
評価に直結すると、次第に目標が達成できるレベルに下がってしまうから。

目標は120%頑張ったら達成できるくらいの高いものにして、

  • 目標が100%達成できたらすごい
  • 70%ぐらいの達成で合格

くらいでないと、モチベーションも上がらないでしょ?という内容だったと記憶しています。

この目標設計とそのマネジメントに関しては、自分自身もモヤモヤとしている所があるので、今回の話やOKRなどをもう少し学んで、2019年は組織として目標設計をもっと効果的に仕組み化できるようにしたいとモチベートされました。

Theme05 マネジメント

エンジニアリングマネージャの重要性/役割について、どんな人が向いているかなどが話されました。

古川さん自身がエンジニア(エキスパート)とマネージャーの両方の役割をやられていて、

それぞれに面白さがあり、どちらか片方しかやってはいけないということではない。
両方をどちらも楽しんでやれているというロールモデルとなりたい

と話されていて素敵でした。業界としてそのようなエンジニアリングマネージャーが増えるとよいですよね。私自身もそうありたいです。

広木さんからは

マネージャはあくまでもロールであり、神様でも親でもない、
皆同じ人間であり、相互のやりとりは人間通しの関わり合いであること、大人であること、成熟さが必要

という話がありました。

完璧な人なんていないので、人それぞれ得意不得意があって、それをオープンに共有できる組織でありたいと思っています。
個人的にはこのエンジニアリングマネージャーという役割を、何も一人ですべてをやりきるというのではなく、エンジニアリングマネージャーチームという形で捉えてもよいなぁなどと考えました。

おわりに

通常の技術的なイベントではなく、こうした組織論のイベントに参加するのは初めてでしたし、広木さんや古川さん、そして、実際にITベンチャーであるLOBさん、BizteXさんの生の話を聞きながら自分の会社の取り組みを振り返ることは非常に貴重な機会となりました。

主催してくださったLOBさん、BizteXさん、ありがとうございました。
私も機会があればこのような場で話ができるようにしていきたいです!

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
ユーザに最高の検索体験を提供したいエンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

*1:LOBさん、BizteXさんの会社紹介、トークセッション、質疑応答部での内容もすべて含めてまとめていますので、時系列順ではありません。 また、内容は私が理解したことをなるべく間違いがないように記載しましたが、もしご指摘等ありましたら、お知らせください。

KibanaのVisualizeでExcelっぽい表現をする

はじめまして、kareyamaです🍂

アップデートの度にオシャレなグラフが増えるKibanaのVisualizeですが、Excelに慣れ親しんだ日本人にはシンプルな表形式がウケるようで。
Data Tableに対して「全体に対する割合を見たい」「異常値を強調表示してほしい」などの要望が出て困っていました。

そんな時、弊社のElastic認定エンジニアの言葉が耳に入ってきました。
「Visual BuilderのTableで、Dashboardの一覧を…」

…Visual BuilderのTable??
さっそくElasticsearchのバージョンを上げて確認します。どうやら6.3からExperimentalとして追加されたようです。

見た目はこんな感じ。
f:id:acro-engineer:20180930020902p:plain

Data Tableとの比較

結論から言ってしまうと、Data tableに対し、Visual Builder Tableは以下の事ができました。

  1. aggregateの結果を変数として、スクリプトが使える ⇒ 四則演算できる
  2. 列単位でフィルタをかけられる
  3. 簡単な条件付書式が使える

逆に、Data tableと違い、以下の制約があります。

  1. Data tableはsplit rowを複数、かつAggregationを選んで指定できるが、Visual Builder Tableでは、行の数は単一のterms aggregationで決まる
  2. Data tableがTime Pickerで指定した期間のデータがテーブル化するのに対し、Visual Builder TableはTime Pickerで指定した期間を「interval」でBucketに分割した上で、 最後(最新)のBucketに含まれるデータのみをテーブル化する

実装

では、実際に使ってみます。
今回は気象データの「日照時間」と「天気」を使い、スクリプトで計算した日照率と、特定の天気の日数を都市ごとに表示します。

気象庁から北海道・大阪・沖縄の気象データを1月分取得し、logstashで取り込みました。
f:id:acro-engineer:20180930084011p:plain

VisualizeからTime Series Visual Builderを選択します。
f:id:acro-engineer:20180930022419p:plain


画面上部のリンクから「Table」を選択。

「Columns」タブの「Group By Field」にlocationフィールドを選択します。
f:id:acro-engineer:20181103124238p:plain


「panel option」を開き、index patternとintervalを設定します。
今回はデータ全体を見たいので、Bucketに分割されないようintervalを大きめに設定します。

ここで、time pickerよりintervalを長く設定して、31d、32d、33d、と試してみると、
値によって結果が変わるのはなぜか、よくわかりませんでした。
f:id:acro-engineer:20181104150204j:plain

「50d」で設定すると、全データが表示されたので、これで進みます。
f:id:acro-engineer:20181103124410p:plain

四則演算

まずは、各都市の平均日照時間を表示します。
これはUIが異なるだけで従来のData Tableと同じですね。
f:id:acro-engineer:20180930095204p:plain

f:id:acro-engineer:20180930095222p:plain

これだとお日様がどれくらい仕事してるかよく分からないので、日照率を計算してみます。

この月、日の出は大体5:30、日の入りが18:30だったようなので、13時間で割りましょう。
こんな感じのMetrics定義になります。
f:id:acro-engineer:20180930100452p:plain

Visuaizeはこんな感じに。
f:id:acro-engineer:20180930100732p:plain
ちゃんと計算できていますね(^o^ 三 ^o^)
今回はサンプルとして可照時間を固定値にしましたが、日の出・日の入り時刻のデータを入れれば日ごとに算出する事も可能ですね!

書式変更

単位の表示がなく、閲覧者からは数値の意味がわかりにくいです。
そのため、まず日照率は「%」を付けましょう。

また、異常に低い値と高い値に注目してもらうため、目立たせたいです。
日照率が30%を切っている場合は文字を青く、70%を超えている場合赤くします。
f:id:acro-engineer:20180930100520p:plain

f:id:acro-engineer:20180930100541p:plain

北海道はずいぶん天気が悪かったようです。
では、どれくらいの日数、曇りか雨だったのでしょう?
実際の数字を出してみようと思います。

フィルタ

「天気(日中)」のフィールドに「曇」または「雨」が含まれている日数を表示します。
MetricsをCountにし、以下のようにOptionを設定します。
f:id:acro-engineer:20180930101428p:plain

データをちゃんと加工していないので、「晴時々薄曇」みたいな天気までヒットしてしまうのが微妙です。
ただ、確かにこの月の北海道は三都市で一番天気が悪いようです。
f:id:acro-engineer:20180930101447p:plain

まとめ

Visual Builder Tableのスクリプトで「割合」を計算したり、計算結果に対して条件書式を付ける事で異常値を強調表示できました。

一見シンプルながら色々な可能性を感じるVisualizeになっています。
Experimental機能のため公式ドキュメントが整備されておらず、触りながら慣れる形になりますが、ぜひ一度試してみてください。

それでは。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

雑誌「Interface」2018年12月号に「AI猫カメラ」の特集記事を寄稿しました

hayakawaです。
10月25日発売の雑誌「Interface」2018年12月号に、
後輩の@tereka114さんと共同で執筆した「AIひょっこり猫カメラ」という特集記事を寄稿しました。

f:id:acro-engineer:20181011161140j:plain:h300
Interface 2018年12月号

2018年12月号 | Interface – CQ出版

カメラ付きのRaspberry Piに猫を判定できるAIを入れ、猫を見つけてはTwitterに投稿するBotを作成する、という内容です。

実際に動いているところ

こちらのTwitterアカウントにてBotが動いています。

twitter.com

5分おきに動き、撮影したカメラ画像に猫が写っているときに投稿します。
このBot入りのRaspberry Piは、NPO法人「東京キャットガーディアン」様の設備である、保護猫カフェ「大塚スカイシェルター」に設置させていただいております。

tokyocatguardian.org

行政などから保護された猫と、猫カフェの形式で触れ合える人気施設です。

f:id:acro-engineer:20180901131518j:plain:h300

よって、ツイートされた画像に、お気に入りの、猫ちゃんが写っていれば、
(先客がいなければ)引き取りを希望することができるのです!!

※ただしきちんと責任をもって猫を飼える状態かの面談があります。

詳しくは上記の東京キャットガーディアン様のサイトにてご確認ください。

技術的な内容

f:id:acro-engineer:20180830110554j:plain:h300

構成としては、

  • Raspberry Pi 3に小型カメラを接続
  • Keras上で、学習済みの画像判定モデル(MobileNet)動かし、画像判定
  • 猫が写っていたらTwitter APIで画像を投稿

というシンプルな内容です。

コンセプトとしては、世にある学習済みモデルをそのまま使って、時間のかかるディープラーニングの学習処理をせずに、カンタンに動くものを作る、というものでした。

猫を題材にしたのは、猫を写せば一定数のファンがつくだろうという浅はかな考えによるものです。
ごめんなさい。

しかも最初は、オッサン(私)の構えた猫写真ボードで動作確認をするという絵面とアタマの悪い内容でしたが、CQ出版様の交渉により、実物の猫ちゃんが満杯の猫カフェに実機を入れるというシチュエーションにしていただけました。
ありがとうございます。

雑誌の内容

以下のようなことを書きました。

  • Kerasで学習済みモデルをロードして動かす方法
  • 初心者向け、Raspberry Piのセットアップ方法
  • Raspberry PiにTensorFlowとKerasをインストールする方法
  • 実際に画像判定を動かしたうえでの問題と対策
  • Twitter APIの使い方
  • ファインチューニングのやり方

特にRaspberry PiにTensorFlowなどのAIを入れる構成は、色々と使い道があって、やってみたい方もそこそこいらっしゃると思いますが、ハマりどころもそこそこあるので、雑誌の内容を参考にしていただけると幸いです。

なお原稿を書いてる間に、

  • TensorFlowが正式にRaspberry Piに対応
  • Twitter API用の開発者アカウントの取得が難しくなる

など、色々ありましたがなんとか形になりました。

設置

CQ出版の編集様と一緒に大塚スカイシェルターにお邪魔し、設置してきました。

f:id:acro-engineer:20180901131500j:plain:h300

職員の方から

  • ケーブルを表に出すのはオススメしない。必ず引っかかれる。
  • 固定しないのはオススメしない。必ず叩き落される。
  • とにかく猫は新しいモノをすぐに嗅ぎつける。気を付けろ。

と親身にアドバイスをいただきまして、ケーブルをカバーで覆ったうえでケースは本棚に厳重にねじ止めされています。

f:id:acro-engineer:20180901131444j:plain:h300

予期せず猫に関する知見を得られました。
良い仕事でした。

ということで雑誌は発売中ですが、
そんな難しいことはどうでもいいという方は猫の画像をご覧になっていってください!
f:id:acro-engineer:20181025190613j:plain:h300

f:id:acro-engineer:20181025190632j:plain:h300

f:id:acro-engineer:20181025190641j:plain:h300

f:id:acro-engineer:20181025190619j:plain:h300

よければ雑誌の方もよろしくお願いします!

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
最先端の機械学習を活用して表情認識に挑戦! - Acroquest Technology株式会社のエンジニアインターンシップの求人 - Wantedlywww.wantedly.com

技術書典5でElasticsearch本を販売しました!

皆さんこんにちは。
@tereka114です。

10/8(月)に技術書専門の同人誌即売会である技術書典5に、初めて出展サークルとして参加しました。

techbookfest.org

頒布物

今回、Acroquestの有志で「Elasticsearch NEXT STEP」という同人誌を執筆し、販売しました。

techbookfest.org

この本はElasticsearchの入門から次のステップ(NEXT STEP)に踏み出すことをコンセプトに執筆しました。
Elasticsearchはインストールといくつかのコマンドのみで扱えるため、非常に簡単に扱えます。
しかし、データ分析などへの活用を考えたり、実環境での運用を考慮しすると、考える必要があることが増えてきます。
そのため、今回はより実践的なElastic Stackの活用をテーマに執筆を進めました。

印刷は「ねこのしっぽ」さんに発注しました。

www.shippo.co.jp

印刷物の表紙や図の見え方に対してチェックしていただき、非常に助かりました。

執筆

執筆環境はRe:VIEWを主に利用しました。
github.com

Wordなどと異なり、次の点が良かったと思っています。

  1. gitで差分を確認しやすいです。(Wordだと難しい)
  2. 技術書を書くにあたり必要な記法、フォーマットが揃っています。(コード記法など)

最後はtextlintを用いて、執筆陣の誤字脱字・文法を見直しました。
このツールを使うと、機械的にチェックできるため、非常に助かりました。

当日

初めての出展なので、ブース設営も初めての経験。
同人誌販売を経験したことがないので、ブースの設計に苦労しました。
Twitterを見て来てくださった方などともお会いし、コミュニケーションが取れ、非常に面白かったです。

嬉しいことに数時間で完売したため、急遽PDFダウンロード販売を開始しました。
PDF版は次のページからダウンロード販売してます。
acroquestyy.stores.jp

技術書典が終わってから記念にメンバーで撮影しました。

f:id:acro-engineer:20181008210104j:plain:h300

最後に

私自身は技術書典はおろか、同人誌販売に今回、初めて挑戦しました。
執筆や当日の販売を通して、非常に面白い経験ができました!
また、次回も挑戦します!

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

技術書典5でElasticsearch本を販売します!

皆さんこんにちは、@です。

いよいよ10/8(月・祝)に技術書典5が開催されます!
今回、当社の有志で初めて出展することになりました。出展場所は「か78」です!

今回執筆したタイトルは「Elasticsearch NEXT STEP」です。

techbookfest.org

Elasticsearchを使ってみた方が入門レベルから次のステップ(Next Step)へ進むための本として、執筆しました。
この本は Elasticsearch やデータ分析の業務を数々と担当してきた Acroquest の有志が作成し、実践的な内容を多く含んでいます。
読み終わった皆様が本書を手に取る前より、より一歩、実践的な Elastic Stack の活用ができることを願っています。

といっても、どんな内容なのか分からないと思いますので、目次をご紹介します。

f:id:acro-engineer:20181002000831p:plain:h500f:id:acro-engineer:20181002000838p:plain:h500

皆さんと当日お会いできることを楽しみにしています!

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

ServerlessConf Tokyoで、サーバーレスなシステムの運用監視に関するセッションを行いました

こんにちは!QAエンジニアの@yuki_shiro_823です。本日は事例発表の紹介です!


弊社のシニアテクニカルアーキテクトの鈴木貴典が、ServerlessConf Tokyo 2018 で、サーバーレスなシステムの運用監視に関するセッション発表をしてきました。
f:id:acro-engineer:20181001141251j:plain:w300

サーバーレスなシステムのがんばらない運用監視
~Monitoring から Observability へ~


今年で3回目を迎える ServerlessConf Tokyoですが、今年は、上記セッションを含め、運用監視に関する話が多かったようです。
いくつかのセッションでDatadogについて触れられていたようで、一番メリットがあったのはDatadog社ではないか、という話もあったそうな。笑


さて、弊社では、この2~3年で、サーバーレスアーキテクチャでのシステム開発も増えてきておりますが、サーバーレスに関するサービスも年々増えてきており、今後、よりスピードある開発/サービス提供を実現していければと考えています。

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

モノリシックなアプリケーションをマイクロサービス化したいエンジニア募集! - Acroquest Technology株式会社のWeb エンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

ISUCON8予選に挑戦しました

こんにちは。PyConJPを楽しんできた佐々木(@)です。

9/16(日)に今年も懲りずにWebシステムの性能改善コンテストISUCONにチャレンジしました。
isucon.net

チームも去年と同じく@と@maron8676の3人チームで挑みました。
チームメンバ全員が機械学習・分析業務をメインに行っているため、Webサーバなどのインフラの知識は少ないです。

※昨年の記録はこちらです。
acro-engineer.hatenablog.com


今回は私たちのチームの解法とその流れを紹介します。

当日の流れ

AM9:00~10:00

全員無事起床し、開始1時間前に集合しました。
この時に話し合ったのは競技を進めていく上でのチームのルールです。

  1. ソースコードは必ずgit+shellスクリプト経由で更新する。
  2. 終了30分前になったら変更は加えない。
  3. はじめは1時間,次からは2時間おきにMtgをする。

などの去年の反省を含めたルールを確認しました。あとは精神統一して競技開始を待ちました。

10:00~11:00

競技開始後まずは、以下の3つを行いました。

  1. 環境とアプリの確認
  2. ソースコードをレポジトリにコミット
  3. pt-query-digestやalpなどのプロファイリングツールのインストール

まずはどのような環境でどのようなアプリが動いているのかを確認します。
アプリは映画館の席予約のようなアプリでした。
ユーザがログインして、複数あるイベントの席の予約状況を取得したり、予約したりするアプリケーションです。

環境については最近のISUCONとは全く違った構成で面食らいました。
最近はnginx+mysqlという構成が続いていたのですが、今回はh2o+MariaDBという構成でした。
(私は両方とも使ったことなかったです。)
更に従来まで利用されていたUbuntuではなく、Redhat系のOSでインストール時にも面くらいました。
そのため、一部のプロファイリングツールを動かせなくなりました。

また、今回も予選から3台構成になっており、初期構成は次の通りです。
1台目:Web+DB
2,3台目:何もしない

この3台をどう使いきるかというのも重要な要素になりました。

11:00~13:00

この時間帯ではpt-query-digestの結果から、席の予約情報を取る処理がN+1処理になっていました。
ここが一番のボトルネックになっていることがわかりました。

そこで、アプリ担当の@がクエリの発行回数を減らすようにアプリを書き換えてくれました。
reservationsテーブル関連のget_event, get_events関数の処理が多かったので調査し、N+1クエリを解消しました。

インフラ側では、MariaDBのチューニングや、h2oでの静的コンテンツのキャッシュ、そして、gunicornのworker数の変更などを行いました。

この段階で、10000点前後のスコアで一時3位にまで浮上していました。

13:00~15:00

最初に目についた問題やもろもろのチューニングを終えたので、アプリ側でRedisを使って高速化を図ります。
get_eventsの処理結果をRedisにキャッシュして一部のSQLクエリの発行回数を減らしました。

この時間はアプリの改修→ベンチマークで計測を繰り返しました。
1台構成でこの改修で18000点程まで上がりました。

15:00~17:00

いよいよこの時間から複数台構成に変更していきます。
当初は
1台目:Web
2台目:DB
3台目:Redis
という構成でやってみました。
3台目のRedisがむしろネットワークのトラフィックで遅くなるだけだったので、RedisはWebと同じサーバに移しました。

そのため、最終的には次の構成になり、一台余らしてしまいました。
1台目:Web+redis
2台目:DB
3台目:なし

また、DB側の変更として、@maron8676が調査してreservationsにuser_idのインデックスを貼ってくれました。
最高得点の約23000点を出すことができました。

ただ、この段階でdead lockによるスコアの上下が激しくなりました。(原因については後述します。)
おおむね18000~23000を行き来するようなスコアでした。

17:00~18:00

この時間はほとんど変更を加えず、何度かいい結果が出るまでベンチマークを回しました。
祈りながらベンチマークを回し、最後は19677点でフィニッシュしました。
49位/528チームとまだまだ予選突破は遠い悔しい結果となってしまいました。

良かったこと・後悔すること

良かったこととしては、次の2つが大きいです。

  1. 3人が明確な役割を持ちつつ進められたこと
  2. 細かく話し合い、着実にスコアを伸ばせられたこと

去年の反省を生かし、チームで細かい時間で問題を設定して取り組めたのは大きな成果でした。

後悔していることとして、

  1. dead lockの対応
  2. 構成ミス

1のdead lockに関して、内部でFOR UPDATEを使っているSQLがあります、
これにより、LOCKをかけてしまい、クエリの処理タイミングによってはエラーを返してしまいスコアが下がりました。
それに最後までうまく対応できませんでした。

また、ボトルネックがDBにあると思ってしまい、DBを分散する方針にしました。
WEBの処理を分散することに気付かず、分散できなかったのは反省点です。
他のチームでは、WEB2台のDB1台にしているようなので、WEBの処理がボトルネックになっていたようです。
こちらを読み違えてしまったのがとても悔しいです。

まとめ

というわけで今年もISUCONにチャレンジしましたが、予選突破はなりませんでした。
ただ、確実に個人としてもチームとしても成長はしているので、来年こそは予選突破してみせます!
それではまた来年。

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
モノリシックなアプリケーションをマイクロサービス化したいエンジニア募集! - Acroquest Technology株式会社のWeb エンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com