JTF2015で見た分散、並列処理

2015/7/26に産業技術大学院大学で開催されたJuly Tech Festaを見てきました。メインストリームとして、仮想化(Docker, CloudStack)や自動構築(Ansible)が多かったのです。興味分野の並列実行環境(Hadoop, Spark)に関連しそうなセッションを中心に回り、思った事を記録します。

2015.techfesta.jp

CPU単一Coreの処理性能が現実的な天井に達しつつある今、いかに効率よく複数CPUを連携させて問題解決を行うか、またその環境をどのように構築、利用、維持するかがバックエンドエンジニアにとっての課題になりつつあります(多分)。最後は「Googleスゲー」なのですが、今回は、その結論に至るまで関連するセッションを順に説明します。

Apache Sparkを用いたNoSQLバッチ並列処理へシフトするための発想転換と実装事例

劉 雨さん@株式会社ワークスアプリケーションズ

(タイトルが少し変わっていました。) 並列処理環境の1つのストリームとしてHadoop/Sparkがあります。Hadoopは2004年にGoogleが発表した並列処理に関する論文を元にOSSで開発されたプロダクトで、Sparkはそれの改良版のプロダクトです。

このSparkでの実行効率を上げるために、いかに実行時間を短縮するか発表されました。プログラム中には並列実行可能な処理と、逐次実行処理の2つが含まれており、Spark上の処理スピードの上限は、逐次実行処理に依存します。マシン台数を増やせば並列実行可能部分の実行時間はマシン台数に反比例します(データの分配や集約のため頭打ちにはなる)。劉さんの説明ではプログラム中の逐次実行処理を並列実行可能な処理に変換、最適化することで、高速化するとのことでした。

  • 一般的なエンジニアが逐次実行っぽく書いたプログラムが変換できる。
  • 変換前後のプログラムで出力される結果が変わってはダメでそこがむづかしい。
  • 変換処理はコンパイル前のプログラムに対して行うが、基本ロジックは同じなため他の処理系(言語)でも行けるだろう(発表後質問)。

ワークスアプリケーションズさん自体はERPなどのサービスを展開しています。該当機能を売りにしている訳ではないので製品公開は無さそうです。去年と同じならスライド公開も無さそうなのでチョット残念。

IoTってなに?MQTTができること

森藤 大地さん@ニフティ株式会社

今までのシステムで扱うデータは、利用者が入力したものや他のシステムから取得したものでしたが、これに加えてIoTデバイスで集めたデータの処理が加わりつつあります。 大量のデータをどう集めるかが新しい課題のようです。

  • MQTTはとても厳しい環境向けデバイス(電源供給できないとか、通信回数がやたら多いとか)向けにHTTPの代わりのコンパクトなプロトコル
    • HTTPに比べてヘッダが小さい、Keep Alive Timeが無限、切断検知機能などが特徴。
  • MQTTでデータを集めるためのMQTTブローカというサーバが必要。
    • ブローカからHTTPでデータを受け取って普通のwebアプリにデータを活用する仕組みっぽい。
    • デバイスから直接MQTTをサーバに投げるのではなく、IoTデバイス→(BTLなど)→スマホや中間集約用のデバイス→(MQTT)→MQTTブローカーという流れ。
  • ニフティ他数社でMQTTブローカを提供するサービスを行っている。

仮想化とストレージの新しい形!ハイパーコンバージドインフラの技術解説

島崎 聡史さん@ニュータニックス・ジャパン合同会社, 日本CloudStackユーザー会 副会長

仮想化でOSを集約するとどうしてもディスクアクセスがネックになります。

  • サーバサイドの実行基盤をプライベートクラウドで作る場合、スモールスタードからのスケールアップを計画してもストレージ周りはスモールスタートが難しい。
  • SANやFCスイッチはスモールスタートするとアクセス速度が遅い。ディスクを増やしてもスピードが上がらない(安価製品はバスが貧弱という意味で)。そのためホストを増やすとストレージに引っ張られて個々のVMのスピードが低下する。
  • ニュータニックスではCPU、メモリとストレージを同一の2Uのユニットに格納したプライベートクラウドアプライアンスを開発。
  • アプライアンスの数を増やすと、よしなに連携してストレージを形成する。
    • アクセススピードや耐障害性も考慮したアルゴリズムを提供する。

ニュータニックス製品のコンセプトだけでなく、データのコピー戦略などの仕組みも詳しく説明されていました。 よく考えられており、VMに限らず汎用ストレージのソフトウェアとして出して欲しいと思いました。

他のイベントと同じならスライドは公開されなさそう。

ここまででの雰囲気
  • Webシステムは他システムとの連携やロジックなど、複雑度が増している。
  • それに加えIoTや機械学習など、大量のデータを複雑なアルゴリズムでゴリゴリ処理するステージが登場した。
  • 複雑なシステムを格納する柔軟な箱としてVMが重用されている。OSやネットワークを自動構築や監視技術が発展している。→フルマネージド

Googleが描く、MapReduceを超えたビッグデータの世界

佐藤 一憲さん@Google

speakerdeck.com

(実際では英語版の最新のスライドで発表がありました)

  • Googleの処理はHadoopやSparkのようなシステムでは間に合わない。
  • Googleの全てのデータセンタは全てのノードが同じシステムで動いている。
    • Dermel(Big query), Flume & MillWheel(Dataflow)という超巨大なDB(多分ファイル込み)兼分散処理機構。
    • Dermelの論文
    • Hadoopなら一晩かかるような処理が、Googleのメインのサービス(検索、アナリティクスなど)を実行しつつ他の利用者も容赦なくジョブを投入する環境下で30secで完了する処理性能。
    • SQLクエリーを投げると分散処理用に分解して数千個くらいのノードにばらまいて結果を待つ。
    • 最初から分散処理を念頭に置いているので仮想化などで個別のMTBFを上げる必要がない。
    • システム構成(というか、どのノードで実行するか)自動的に最適化&スケールする。
  • データは全てDermelに格納し、クエリーを投げてデータを取り出す。
    • IoTだろうがなんだろうが仮想化などで個別のシステムを作らなくてもBig queryに放りこむ。
    • SQLで書けない複雑な処理だけをMapReduceで処理している。
    • SQLなので、プログラマ以外の社員もデータを取得して使える。

みんな独自システムに頑張らないでBig query使おうぜとのこと。凄すぎです。逆にGoogle以外の会社や自分が頑張っていることが何なのかショックでもありました。

時間の関係でFlume & MillWheelについてはかなり端折った発表でした。