INFORMATION
ニュース

Scale By the Bay 2017に参加してきました。(ワークショップ&初日)

溝口 泰史 著

サンフランシスコで11月16-18日に開催されたScale By the Bay 2017と、会期前日の15日に行われたワークショップにも参加してきました。

Scale By the Bayというカンファレンスについて簡単に説明すると、かつてはScala By the Bayという名前のScalaに関するカンファレンスだったものが、Scala(2015まで) -> Scalæ(2016) -> Scale(2017)となって、従来通りScala自体に関する話題も含めますが、大規模データの解析なども取り扱うカンファレンスとなっています。

この変化はScalaがScalable Languageであるのももちろんですが、Sparkの開発言語になっているというところもきっかけとしてあるのでしょう。実際に参加者のほとんどがSparkやFlinkなど大規模データ処理基盤やTensor Flowなどの利用者でした。


ワークショップ


ワークショップはGoogle Launchpadで行われました。建物は非常に綺麗で、ワークショップらしく机と椅子が並べられている一方で、わずかながら設置されていたソファに座ってワークショップを受講する参加者もいるなど、いわゆるアメリカのIT企業らしさを感じました。

内容は2部構成になっており、1部ではプログラミングが中心で、ScalaもしくはJavaで書かれたソースの穴埋めをして、gRPCをサービス間通信として利用したマイクロサービスアーキテクチャーのチャットサービス(といっても認証サービスとチャットメッセージの配信サービス、コンソールアプリのチャットクライアントしかありませんでしたが)を作るというものでした。

gRPCはGoogleが開発を主導するRPC(リモートプロシージャコール)で、gRPCとして公開される前の実装がGoogle社内の多くのサービス間通信で用いられており、HTTP 1.1とjsonを利用した場合に比べてスループットが3倍程度良くなるとのことでした。(jsonのエンコードとデコードで大きなオーバーヘッドが発生し、スループットが悪化するというのが主因とのこと。gRPCについて詳しくはこちらを参照)

実際にワークショップでgRPC使ってみたところでは、Protocol Bufferの設定ファイル(*.protoファイル)は非常にわかりやすく、プログラムへの適用も簡単に行うことができました。

また、私自身はプログラミングを伴うワークショップに参加したのは初めてだったのですが、面白いと感じたのはプログラミングの解答がgitのbranchで提供されていたことです。git branchで解答と自分のコードの差異を確認でき、branchを切り替えてプログラムを実行すると手元で正しい挙動を確認できるのは非常に良い方法だと思いました。(もちろん書き方の癖などによる違いは吸収できませんが。)


1部が終わると昼食でした。昼食中はワークショップの机とは別に会場の後ろに4人がけの机が用意され、参加者同士が自由に話ができるようになっていました。(他のテーブルからの英語を同時に聞き取れるほど英語力がないので、他のテーブルで何を話していたかは分かりかねますが)

私もメキシコから来た参加者と自身のキャリアやScalaの学習方法について話をし、本を読んで勉強するよりもcourseraなどのオンライントレーニングを受講した方が良いと勧められたので、今後courseraのコースを受講してみようと思います。なかなか海外の開発者がどのように勉強をしているかを聴く機会もないので、有意義でした。


2部ではIstioでGCP上のサービスのネットワーク設定を行うというものでした。用意されたコマンドとコンフィギュレーションファイルの中身を確認しながら、サービスのルーティングやロードバランシングを行いました。

Istioは最近オープンソースとなったマイクロサービス向けのネットワーク制御プラットフォームですが、なかなか触る機会がなかったので、とても良い機会でした。

しかしながら、基本的には設定コマンドとコピー&ペーストしてその動作を確認するという進め方であり、事前にIstioに触れられていなかったこともあって理解を深めることができなかったのは悔やまれます。

また、最終的には1部の成果物をコンテナとしてGCP上にデプロイし、Istioでネットワーク制御を行うという流れになっていたようですが、1部の時点で進行が芳しくなく、それぞれの成果物を組み合わせることなくワークショップが終わってしまったのは少し残念ではありました。


初日


カンファレンス自体はワークショップとは違い、Twitterの本社(HQ)で行われました。セッションは全部で3種類あり、Functional(Scalaとそれに付随する話題)、Data(大規模データの解析に関する話題)、Reactive(事例紹介や実際にコードを書くなど様々)に別れていました。
以下では初日のセッションでいくつか面白いと思ったものを列挙していきます。


Disorder & Tolerance in Distributed Systems at Scale

初日の一番最初のセッションです。毎日一番最初のセッションは基調講演的な側面が強く、このセッションでは大規模システムのあり方を自然界の法則を元に考えるというものでした。(ちなみに写真は始まる前に撮ったもので、このセッションの講演者は女性でした。)
具体的には、以下のような話が挙げられました。

  • Butterfly effect : わずかな変化が将来の大きな変化をもたらす
  • Entropy : エントロピーは時間発展とともに増大することに対応する
  • Biological systems : 環境からフィードバックを受け、環境の変化に順応する
  • Self-organization : 自律的に秩序を持つ構造を整える
  • セッションを通じて具体的なサービスの実装・運用に関する話はほぼ出ることがありませんでしたが、上に挙げられたような自然界のルールは大規模なサービスの開発、運用において確かに考慮する必要があり、考えさせられる内容ではありました。


    Billions of Recommendations at Twitter

    Twitterのリコメンデーションをどのように生成しているかという話。Twitterのリコメンデーションにはいくつか種類があるらしく、アカウント、トピック(ハッシュタグのまとめみたいなもの?)、ツイート自体をリコメンドしており、それぞれ仕組みが違うとのことでした。
    全てのリコメンデーションは、

  • リコメンド候補の作成
  • 候補のランキング、フィルタリング(特徴量と個々のユーザーの設定や過去の行動履歴を元に実行)
  • リコメンドの通知(メールやアプリ上での通知など)
  • という流れになっているとのことです。
    興味深かったのは候補の作成の箇所で、フォロー・被フォロー関係を元に候補を作成しているのはわかっていたのですが、アカウントはフォロー関係の変化が遅いのでバッチ処理で、トピックやツイートはリアルタイムでと処理使い分けているとのことでした。
    作成処理自体は上述の通りフォロー関係のグラフに対してMapReduceをおこなっているとのことでしたが、グラフが巨大であるので、実行には膨大な計算量が必要とのことでした。


    長くなって来たので2日目、3日目は別の記事に分割します。


    トレーニングコース

    ロンウイットのトレーニングは、Lucene/Solrの経験豊富なコミッターの
    監修のもと開発されたハンズオン(実習)形式のコースです。

    セミナー

    ロンウイットのApache Software Foundationコミッターが、情報検索の基礎、自然言語処理、そして、ユーザにとっての効果についてご説明させていただきます。