SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2014】セッションレポート (AD)

【デブサミ2014】14-B-6 レポート
クラウド時代のソフトウェア技術者にはコンピュータサイエンスこそ武器になる

  • このエントリーをはてなブックマークに追加

証明されたアルゴリズムを組み込んで、正常な動作を保証せよ

 萩原氏は、コンピュータサイエンスの分野で扱う事象のわかりやすい例として、次のような複数プロセスの同時実行時に取りうる結果についての問題を紹介した。

プロセスhとプロセスvがwriteを同時実行しているとき、このプログラムの8行目で得られる結果は?

1. h.w[1]
2. v.w[1]
3. h.w[2]
4. h.w[3]
5. v.w[2]
6. h.w[4]
7. h.w[5]
8. Print (v.r[ ] + ”-” + h.r[ ])

 「vとhがそれぞれ一番最後に書き込んだ値である「2-5」が出力されると考えがちだが、実はそうではない。複数プロセスの同時実行で取りうる結果は、一貫性モデルに依存する」と、萩原氏は説明する。

 最後の書き込み「2-5」が得られるのは、条件としてLinearizabilityが保証される場合のみ。一貫性モデルがEventual Consistency(結果整合性)の場合には、取りうる結果は「0-0」「0-1」「0-2」...「1-0」「1-1」...「2-5」と、さまざまな値の組み合わせが考えられる(0は1を書き込む前の初期値)。

複数プロセスの同時実行時に取りうる結果は、一貫性モデルに依存する。
プロセスhとプロセスvがそれぞれ5と7で最後に書き込んだ値が出力されるとは限らない。
複数プロセスの同時実行時に取りうる結果は、一貫性モデルに依存する。プロセスhとプロセスvがそれぞれ5と7で最後に書き込んだ値が出力されるとは限らない。

 これがクラウドとなれば、並列で動くプロセスは2つどころではない。数十、数百のプロセスが並列で動くので、取りうる結果の組み合わせは無数に膨れ上がる。さらに現実問題として、ネットワーク遅延・切断、メッセージ喪失、動的構成変更など、さまざまな状況が想定される。すべての想定される条件に対してプログラマがテストを行うのはまず不可能だ。

 こうした問題を解決する上で必要になるのが、コンピュータサイエンスにおける「Correctness Criteria」という考え方だという。前述のLinearizabilityは一貫性を与える制約で、Correctness Criteriaの一種だ。

 「Correctness Criteriaを満足する、つまりコンピュータサイエンスの世界で証明されているアルゴリズムを支援する機構をアーキテクチャに組み込み、アプリケーションをその機構で実装することで、アプリケーションはアルゴリズムに基づいて正常に動作することが保証される。機構の例としては、データベースの一貫性を保証するスケジューラなどがある」(萩原氏)

 さらに、コンピュータサイエンスの視点で考察すべき別の例として、萩原氏は、HbaseやCassandraなどNoSQLで実装されているアルゴリズム「LSM-Tree(Log Structured Merge-Tree)」の問題点にも触れた。

 「LSM-Treeでは、データベースへの書き込み時に既存のデータを直接更新するのではなく、まずログに書き込む。既存データに対する変更は後で行うので、書き込みスループットを向上して高速化することができる。ただし、読み取り時には、ログとメモリ上のキャッシュ、ディスクの既存データを比較して、最新のデータを手繰るような処理が必要になるため、読み取りレイテンシーの予見が難しくなってしまう。ガベッジコレクションなどでもレイテンシーの予見が難しくなるが、同じようなアルゴリズムはたくさんある」(萩原氏)

 つまり、コンピュータサイエンスの何らかのアルゴリズムを採用すると、「どこか他にツケがまわる」制約もあるということだ。そのような問題への対応も考える必要があるだろう。

 萩原氏はまとめとして、コンピュータサイエンスとソフトウェア工学の関係を次のように整理した。

  • コンピュータサイエンスの進化がアーキテクチャスタイルやプログラミングモデルを変えて、その上にノウハウとしてのプラクティスが乗る。
  • ソフトウェア工学はプラクティスを体系化する枠を提供する。

 「サイエンスに基づく進化によって、たとえばRDBというものが登場し、RDBに紐付くプラクティスが体系化された。同じようにNoSQLというものが出てきて、そこでプラクティスが生まれている。やはり、コンピュータサイエンスが新しいパラダイムを作り、イノベーションを牽引する主軸と考えるべき」(萩原氏)

 最後に萩原氏は、これからの取り組みについて「ITのイノベーションの大半はクラウドから起こると思っている。そのため、分散システムが主要なテーマになっていく」と語り、セッションを閉じた。

お問い合わせ

日本マイクロソフト株式会社

〒108-0075 東京都港区港南 2-16-3 品川グランドセントラルタワー

TEL: 03-4332-5300 (大代表)

URL: http://www.microsoft.com/

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
【デブサミ2014】セッションレポート 連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7665 2014/04/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング