2017年5月18日木曜日

グローバルなOLTPを可能にするグーグルのRDBサービス、「Cloud Spanner」とは

 米グーグルは2017516日(米国時間)、パブリッククラウドサービスGoogle Cloud Platformで、20172月にパブリックベータテストを開始していたリレーショナルデータベースサービス「Cloud Spanner」の本格提供を開始した。実際にアクセスしてみたところ、2017517日現在、ロケーションとして選択できるのは台湾(asia-east1)、ベルギー(europe-west1)、米アイオワ州(us-central1)。

 本記事では、20173月に開催されたGoogle Cloud Next 17のセッションと、20175月に発表された論文から、Cloud Spannerとは何かをあらためて紹介する。

参考記事:米グーグル、GCPでACID特性と拡張性を兼ね備えたデータベースサービス「Cloud Spanner」を発表

グーグルのビジネスを支えてきたデータベースをサービス化

 Cloud Spannerは、一言で表現すれば「グローバルに水平スケーリング可能なリレーショナルデータベースサービス」。一般的なリレーショナルデータベースと同様にデータの一貫性を保ちながら、世界中に単一のデータベースを展開できるアーキテクチャを備える。可用性は99.999%という。

 グーグルが好んで紹介する想定用途に、アーティストのワールドツアーチケットの世界的な販売がある。任意の会場における任意の席を、世界中の誰もがいつでも購入できるようなシステムを支えられるという。オリンピックやサッカーワールドカップの、(国ごとに販売枠を設定しない)チケット販売システムも構築できるということだろう。

 
グローバルなライブツアーの世界的な販売は、分かりやすい用途

 Cloud Spannerは、2005年ごろからグーグルが社内で開発を進めてきたSpannerというデータベースをサービス化したもの。

 Cloud SpannerのプロダクトリードであるDominic Preuss(ドミニク・プリウス)氏は、AdWordsSpanner開発のきっかけだったと説明している。

 グーグルの主要な収益源であるAdWordsでは、当初MySQLをデータベースに使っていた。「カスタマーIDに基づき手作業でシャーディングを行っていたが、再シャーディングが必要となり、これに数年かかることが分かると、別の方法があるはずだと考えるようになった」(Preuss氏)。そこでSpannerの開発を始めたという。

 同社はAdWordsの他にGoogle PlayGoogle Cloud Platformのための基幹データベースとして、Cloud Spannerを広範に活用しているという。Google Playではユーザーのアカウントや購入トランザクションの管理に使われている。

 「Google Cloud Platformも、Cloud Spanner上に構築されている。Google Cloud Platformにおける全ての仮想マシンやサービスは、Spannerによって管理されている」(Preuss氏)

 Spannerは、当初強い一貫性とグローバルな分散を可能としたkey-valueデータベースだったが、OLTP用途に利用する社内ユーザーの強い要望により、SQLインタフェースを開発。現在では、ANSI SQLでアクセスできるリレーショナルデータベースとして提供されている。

Cloud Spannerはどのようなアーキテクチャになっているか

 Cloud Spannerでは、データベースが単一データセンター内の複数の仮想インスタンスにまたがって自動的にシャーディングされる。これらのシャードを、物理的に離れた他のゾーンやリージョンへ自動的に同期複製できる。

 執筆時点では単一リージョン内の複数ゾーンへの同期複製に限定されており、これによって99.99%の可用性を担保しているという。現時点では単一リージョン内でのスケーリングに限定され、複数リージョンにまたがるデータベースの同期複製は、2017年中に提供予定となっていて、これにより99.999%の可用性を実現するという。

 スケーリングという観点では、Cloud Spannerはノード数を増やすことで、水平スケーリングによりパフォーマンスを向上できる。事実上無制限にノード数を増やせるという。一般的なリレーショナルデータベースでもリードレプリカを作成することで水平スケーリングに近いことができるが、これは完全な同期複製ではない。対してCloud Spannerでは、複数リージョンをまたがる場合でも、全ての読み出しが最新のデータであることを保証している。

 グローバルなデータの一貫性を保持するためには、次のような仕組みを実装している。

 いずれかのレプリカに対し、データの更新が行われようとすると、更新対象となるデータを持つレプリカ全てに通知され、データが送られる。書き込みには、Paxos合意アルゴリズムをカスタマイズしたものを使っているという。2相コミットは必要な場合にのみ利用しているとする。

 グローバルなデータの一貫性を保ちながら、2相コミットを可能な限り避けてパフォーマンスを確保するため、Cloud Spannerではテーブルのインターリーブ(挟み込み)を行えるようにしていると、Preuss氏は説明している。

 
このような親と子のテーブルで構成するデータベースでは……

 上図のような親テーブル(左)と子テーブル(右)の構成となっている場合、Cloud Spannerは下図のように、主キーに基づき子テーブルのデータを文字通り親テーブルに挟み込む。これによって複数のテーブルのデータを同一ノードに集約できる。結果として、2相コミットに大きく依存することなく、一般的なクエリに対する高速なレスポンスを実現しているという。

 
子テーブルを親テーブルにインターリーブする

 Cloud Spannerには「マスターノード」「スレーブノード」の概念がなく、完全に分散型のアーキテクチャとなっている。従って、ソフトウェアアップグレードやパッチのためにマスターノードを停止したり、スレーブにフェイルオーバーする必要がない。グーグルが何らかのメンテナンスを行っていても、パフォーマンスの低下はないという。

 

ロシア出身の「Kotlin」がAndroidの正式開発言語に

 米Googleは5月17日(現地時間)、年次開発者会議「Google I/O 2017」の基調講演で、Androidの正式開発言語として「Kotlin」を採用したと発表した。

 Kotlinは、同日発表されたAndroidアプリ向け統合開発環境(IDE)「Android Studio 3.0」の一部として提供される。

 Kotlinは、ロシアのソフトウェアメーカーJetBrainsが2011年に発表したオープンソースのオブジェクト指向プログラミング言語。Androidのランタイムと完全な互換性があり、既存のAndroidのコードとも相互運用できることから、正式開発言語に選ばれたと、Androidのプロダクト管理ディレクター、ステファニー・サード・カスバートソン氏が説明した。

 Google I/OにはJetBrainsのマキシム・シャフィロフCEOも参加しており、セッションにも登壇するようだ。

 シャフィロフ氏によると、JetBrainsは今後も独立企業としてAndroidだけでなく、macOSおよびiOSのサポートも続ける計画という。

 かつてGoogleがAndroidの正式開発言語として米Appleの「Swift」を検討しているといううわさがあったが、それは実現しなかったようだ。

2017年5月15日月曜日

Wifiルーターを使って室内の画像を捉えることに成功

Wifi透視術!!

オフィス、自宅、駅、カフェ、Wifiルーターはまさにありとあらゆる場所に設置されて我々のネット環境を支えてくれています。が、そんなWifiからの信号を使って物体の姿を捉えることに、ミュンヘン工科大学の研究者たちが成功しました。アメリカ物理学会の科学誌Physical Review Lettersに研究結果が発表され、学会のPhysicsでも紹介されています。

研究者たちは一般に販売されているWifiルーターを改造することなく、部屋の中にある十字架の姿を捉えたとのこと。まだまだ画像は粗く、位置情報を正確に測るためにアンテナを設置しなければならないようですが、それでもはっきりと十字架だとわかる画像です。

実験は、部屋の中に移動式のアンテナを設置。そのアンテナとWifiルーターの間に十字架を置き、横にも位置の計算のために使われるアンテナがもう一つ置かれたそうです。アンテナはルーターから発された信号を集めると同時に、室内のさまざまなものに跳ね返って反射する信号も集めます。こうやって集めたデータを元に十字架の姿を計算して捉えるという仕組み。例えるとルーターが光源で、十字架が作り出す影から十字架の存在を捉えるようなことが行なわれているわけです。

Wifiを使って画像を捉えるという技術自体は新しいものではありません。Physicsによると、「従来は受信器となるアンテナに到達する信号データのうち、到達角度といった一部のデータだけを利用していた」のに対し、今回は「直接アンテナに届くものと環境に反射して届いたもの両方のあらゆるデータを利用した」ことでより正確な位置情報を計算することができるようになったそうです。

こんな技術があったらWifiを使って部屋の中を透視されちゃうよ...!と心配になりますが当面はそんな心配は無用のようです。アンテナを設置しないといけないのに加えて、物体を捉えるのに非常に長い時間がかかるとのことです。論文を発表した研究者のうちの一人、ミュンヘン工科大学のPhilipp Hollさんはアンテナを複数一列に並べるだけでもスピードが一気に早くなるでしょう、と語っています。「ドローンやトラックに取り付けられた一列のアンテナを使うだけで記録時間を数秒にまで縮められる可能性があります」とのこと。

いきなりアパートの窓の外にドローンから吊り下げられたアンテナが登場しない限りはとりあえずは大丈夫そうですね。しかし「データのやり取り自体が暗号化されていたとしても、(物理的な)環境の3D画像を外の世界に発していることに変わりはない」という側面には注意を向け始めるべきだと研究者も示唆しているようです。