【13-B-1】Programming the Cloud クラウドをプログラミングする
Googleの秘密が分かる50分。
- クラウドコンピューティングについての概要
- Googleの社内システム
について。
クラウドコンピューティング世代では処理の並列化もキー技術の一つ。
MapReduceアルゴリズムを例に並列化ソースコードの紹介など。
マルチコアの事前学習をしていたので、専門外ながらある程度ついて行けました。
やはり並列化が今後のコンピューティングの鍵になりそう。
その際、宣言型のプログラミング言語が重要そうです。Lispあたりから勉強してみよう!
13-B-1 Programming the Cloud / クラウドをプログラミングする Programming The Cloud the Internet as Platform Google Engineering Senior Staff Engineer Gregor Hohpe (グレゴー・ホーペ) ◆概要 今日のポイント ・クラウドコンピューティングの一般的概念と課題 ・Google社内での課題解決手法 ・Google App Engineの紹介 ◆クラウドコンピューティングがホットな3つの理由 コスト低下 ビックカメラで1TBハードディスクが1万円(日本語で“イチマンエン") 廉価に高度な計算が可能に。=誰もが高速な演算能力を活用できる 帯域幅の問題 ブロードバンドが普及 通信の高速化 Google社にとっても(環境を)活用するためのツールが必要 → 使いやすく安価であること、利用するための手法が必要 トレンドとして クラウドコンピューティング二には目新しい内容はないが 三つの要因が大きな流れとなって研究用途から一般的になった ◆クラウドコンピューティングの世界観 アーキテクチャ:夢のようなアーキテクチャ(Architecture Dream) 少し特徴をあげるだけでも分散化、演算力、標準化技術など ⇒ 〜bilityを持つ。拡張性、柔軟性、etc 開発:開発は悪夢(Development's Nightmare) =夢のようなアーキテクチャと引き替えに開発が悪夢になってしまわないように。 クラウドコンピューティングの開発では今までの手法が通じない メソッドの多重呼び出し(Call Stack Stackを呼ぶこと) トランザクション処理を行うに当たってのACID原則も崩れる ⇒ どれだけ分散できるかを追求 トレードオフとしてスループットの確保などで制限 ※ACID:以下Wikipediaより ACIDとは、Atomicity, Consistency, Isolation, Durabilityから合成された頭字語である。 これ以上分解すると意味のないものとなる最小の処理単位という意味の 原子性(Atomicity:アトミック性)、 一貫性(Consistency)、 独立性(Isolation)、 永続性(Durability) は、トランザクション処理を行うにあたって不可欠な機能であると考えられている。 もしACIDがなければデータベースの完全な状態は保証されない。 クラウドはいままでの一貫性を持ち込めない世界★ 開発者として今までの想定事項、環境、Runtimeは通用しない 従来型ACIDとのクラウドコンピューティングのACIDを比較 従来: Atomic Consistent Isolate Durable クラウド:Associative Commutative Idempotant Distributed Associateve:数学用語 結合 (A+B)+C = A+B+C と同じ Commutative:数学用語 可換 柔軟性を確保できる Idempotend :数学用語 べき等 同一の演算を何度やっても結果が変化しない オペレーションがうまく行かないときはくりかえしを行う必要がある 2回やったときも同じ結果を得られるようにしなければならない Distributed:Dがなかったので追加:-) ◆Google社の取り組み インフラを支える4つのシステム ・Google FileSystem ・Bigtable ・mapreduce ・sawzall ◆Google FileSystem(GFS):障害対応機能を内蔵 いまのHDDは信頼性が高いが、HDDが5万枚、10万枚あった場合は障害は必ず発生する。 その場合は、障害の有無ではなくて、「いつ」障害が起こるか、をかんがえる GFSの特徴 クラスタサイズは64MB 高速大域にフォーカス。 シーケンシャルアクセスを最適化したのでランダムアクセスに不向き どこかで妥協点を見いだす必要がある クラス他は5PB以上を1クラス他とする GFSは低レベルのファイルシステム ◆Bigtable データベースとのアクセスは? Bigtable:リレーショナルデータベースと異なる。 ソーティングされている、多面的なデータベース Sparse,Distributed,Persistend,Multidimensional,Sorted スキーマ、ジョイン、やクロステーブルなどを持ち合わせていない 基礎に立ち返り基本的なストレージを大規模環境で提供 今のリレーショナルデータベースはOSのように複雑だが BigTableはBigDataBaseではない。一つのテーブルである。 データのセルあたりのストレージ使用量は数百TB以上★ ◆MapReduceアルゴリズム 分割統治。Map、ソート、Reduceの3ステップに分かれる Hadoopプロジェクト GoogleのMapReduceアルゴリズムのクローン オープンソースプロジェクト 疑似コード: Map、Reduceという2つの関数を用意 テキストに対してマップを呼びだす map(in_key, line) words = split(line) for each word in words Output(word, 1) <= theがもし100回あれば100回この行に到達 reduce(key values) print( key + ":" + Sum(values)) 事前に〜しておくこと、といった前提条件などはプラットフォーム側で処理 呼び出すタイミングを考慮する必要はない 上位レベルでの抽象化なので複数同時一考できる 詳しくは http://wwww.research.google.com/mapreduce.html ◆Sawzall(ソウゾウ) ログの並列ログプロセッシング 通常はGrepなどのマッチング結果を数え上げるときは 通常、ループのなかで、加算が行われる while(line != EOF) word = sprit(line) if(match) map[match]++ クラウドコンピューティングでの正解はこっち★ map_table sum[String] of Int line=input words = sprit(line) for each word in words emit map[words] Emit:マップを出力する input - process - sum 上記3ステップのうちループ構造を持つのはprocessのみ。 処理部分を並列化する マップテーブルのSumは可換であり、結合が可能 オーダーの変更に強いプログラムに。 トレードオフが存在 Sawzallは並列化のために順序構造に依存した制約を諦めた (Lineそのものの重複を探すなど) ※Sawzallは1つのLineや個別のStateごとに機能する。 ◆Google And The Could And You! クラウドをより使いやすく ◆Google Data API 標準化技術を幅広く採用。ATOM等 ※この場合のATOMはCPUではなくてXML Feedの標準化技術 Google calendar APIのデモ スケジュールをXML Feed等で配信できる Google App Engine ソースコードをGoogle上で走らせる仕組み データはGoogleのビッグテーブル上で管理 拡張性を重要視しており、Web上でのユーザ認証のためのLoginなど 一般的なことができる。 無料で提供(1ヶ月あたり500万ページビューまで) OpenSocial向けWebアプリをAPIを使えば数時間でできる GoogleのAPI群は毎月リリースされている SDKは先月に1.1.9をリリース クラウドコンピューティングは ・プログラミングの手法は大きく異なる★ ・従来型のトランザクションではない、結合可能な世界