451 Unavailable For Legal Reasons

とあるゲームエンジニアのブログです

謎の新RDB「Google Cloud Spanner」について聞いてきた

Google Cloud Spannerの情報目当てで下記のイベントに言ってきたのでメモ。

イベントページ

connpass.com

ついに出た!Google虎の子のNewSQL RDB「Spanner」 by Google

ACID特性

信頼性のあるトランザクションシステムの持つべき性質にACID特性があります。

ACID (コンピュータ科学) - Wikipedia

スライド5ページ目でVertical Consistencyと書かれているのは同一Zone内でのACID特性。Horizontal Consistencyと書かれているのはZoneをまたぐACID特性の事のようです。

ACID特性のうち独立性(isolation)には、その独立性のレベル応じて「トランザクション分離レベル」というものがあります。

gyouza-daisuki.hatenablog.com

SQL Serverには、上記の記事に存在しないトランザクション分離レベルで「SNAPSHOT」分離レベルというものがあるのですが

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

SQL Serverのデータベースを「SNAPSHOT」分離レベルにすると行情報にTransaction Timestampが追加されます。

Spannerが分離レベルを一定以上に保つためにTrueTime API(原子時計とGPSを用いた超誤差が少ない時計)を必要とするのは、この行情報に含まれるTimestampが全てのノードで正確であれば分散環境でも「SNAPSHOT」分離レベルを達成できる的な発想のようです。

blog.engineer-memo.com

Spannerが読み取り専用トランザクションでロックを必要としないのは、行が更新中であってもトランザクションで指定したTimestamp(デフォルトは現在日時)以前の行を読めば良いからですね。ちなみに登壇者へ質問したところ1時間前までの行バージョンが保持されていて読み取りできるとのことです。

レプリケーション

レプリケーションに関する話はまた次回ということで、分散合意形成アルゴリズムにPaxosを使っているということぐらいしか触れられていませんでした。

有名な分散合意形成アルゴリズム

2相コミット - Wikipedia

3相コミット - Wikipedia

Paxosアルゴリズム - Wikipedia

Paxosの解説

d.hatena.ne.jp

TODO

Spannerについては公式のドキュメントと論文があるのでそのうち読んでみようと思います。そこで何か発見があればまた何か書くかもしれません。

公式ドキュメント

cloud.google.com

論文「Spanner: Google’s Globally-Distributed Database」

https://static.googleusercontent.com/media/research.google.com/ja//archive/spanner-osdi2012.pdf

スーパーマリオランで使われている技術を権利表記から確認してみる

Super Mario Run

Super Mario Run

  • Nintendo Co., Ltd.
  • ゲーム
  • 無料

スーパーマリオラン出ましたね。 「メニュー」→「せってい」→「このアプリについて」の中にある「権利表記」の内容から使われている技術を確認していきたいと思います。

UniRx

f:id:master-0717:20161216103503p:plain

github.com

UniRxはReactive ExtensionsをUnityで使えるように再実装されたライブラリです。仕事でUnityを使う時にはいつもお世話になっています。 UniRx作者本人のブログ記事が一番詳しいと思うので、時系列で紹介します。

2014/08/23

neue cc - A Beginners Guide to Reactive Extensions with UniRx

2014/09/08

neue cc - Immutable CollectionsとSubject(Rx)の高速化について

2014/12/18

neue cc - Unityのコルーチンの分解、或いはUniRxのMainThreadDispatcherについて

2015/04/13

neue cc - UniRx 4.8 - 軽量イベントフックとuGUI連携によるデータバインディング

2015/05/11

neue cc - UniRxでの空呼び出し検出、或いはRoslynによるCode Aware Libraries時代の到来について

2015/06/20

neue cc - 第一回UniRx勉強会を開催しました+スライドまとめ

2015/10/23

neue cc - 同期(風)コードと対比させたUnity+UniRxで非同期を扱う場合のパターン集

2015/12/21

neue cc - UniRx 5.0 - 完全書き直しによるパフォーマンス向上とヒューマンリーダブルなスタックトレース生成

2016/01/06

neue cc - Unityでのボクシングの殺し方、或いはラムダ式における見えないnewの見極め方

2016/05/14

neue cc - Unityにおけるコルーチンの省メモリと高速化について、或いはUniRx 5.3.0でのその反映

2016/08/03

neue cc - UniRx 5.4.0 - Unity 5.4対応とまだまだ最適化

2016/10/05

neue cc - UnityのMonoアップグレードによるasync/awaitを更にUniRxで対応させる

FlatBuffers

f:id:master-0717:20161216103512p:plain

github.com

FlatBuffersについてはDocumentationのOverviewをGoogle翻訳すると下記の通りです。

FlatBuffersは、C ++、C#、C、Go、Java、JavaScript、PHP、およびPython用の効率的なクロスプラットフォームシリアライズライブラリです。 もともとは、ゲーム開発やその他のパフォーマンス重視のアプリケーション向けにGoogleで作成されたものです。

FlatBuffersはデシリアライズのパフォーマンスに特化したシリアライザで、なぜ高速にデシリアライズできるのかというと、定義されたスキーマに則ってシリアライズしたバイト配列をオブジェクトへのアクセス時にそのまま利用する実装になっているからです。

UniRx作者がFlatBuffersにインスパイアされてZeroFormatterというシリアライザを作成公開しています。

github.com

ZeroFormatterもデシリアライズのパフォーマンスに特化したシリアライザで、シリアライズしたバイト配列をオブジェクトへのアクセス時にそのまま利用するところはFlatBuffersと同様ですが、C#のクラス定義をそのままスキーマ定義として利用できるようになっています。 なので例えばC#(UnityやUWP等)で作成したゲーム内でクライアントが頻繁に通信をする場合などにFlatBuffersよりも楽に使えます。

ちなみにC#で使えるシリアライザのパフォーマンス比較結果がZeroFormatterリポジトリのREADMEにあります。

https://github.com/neuecc/ZeroFormatter#performance

OpenSSL

f:id:master-0717:20161216103519p:plain

https://www.openssl.org/

OpenSSLはTLSおよびSSLプロトコル用のライブラリです。Facebook SDK for Unityが依存しているので入っているのではないでしょうか。

iOS Native Code Samples

f:id:master-0717:20161216103526p:plain

bitbucket.org

iOS Native Code SamplesはUnity開発元のUnity Technologies社が公開しているサンプルコードです。

MiniJson

f:id:master-0717:20161216103547p:plain

Unity3D: MiniJSON Decodes and encodes simple JSON strings. Not intended for use with massive JSON strings, probably < 32k preferred. Handy for parsing JSON from inside Unity3d. · GitHub

MiniJsonはJSONシリアライザです。勝手な予想ですが、FlatBuffersは対戦などリアルタイム通信系のシリアライズ・デシリアライズが頻繁に行われる箇所に、JSONはAPIとのHTTPS通信等たまにシリアライズ・デシリアライズが行われる箇所に使用されていたりするのではないでしょうか?

Facebook SDK for Unity

f:id:master-0717:20161216103602p:plain

developers.facebook.com

Facebook SDK for UnityはFacebookログイン、Facebookへのシェア、Facebookの友人とデータ共有(ランキングとか)などをUnityで開発するアプリで利用するためのライブラリです。

adjust SDK for Unity

f:id:master-0717:20161216103618p:plain

docs.adjust.com

adjust SDK for Unityは、売上、セッション数、インストール数などのKPIを収集して可視化したり、広告の効果測定を行うためのadjustというサービスを利用するためのライブラリです。

Firebase-Unity

f:id:master-0717:20161216103631p:plain

firebase.google.com

Firebase-Unityは、Push通知、クライアント・サーバー間やクライアント同士のデータ同期、分析、テスト、クラッシュレポート等のモバイルアプリの開発・運用で必要になる技術をサービスとして提供するFirebaseというmBaaSを利用するためのライブラリです。

総括

FlatBuffersを使っていてパフォーマンスを強く意識している感じがします。Firebaseを使っていてサーバー側はマネージドなサービスで運用できている感じもしますね。ゲームあるところにObserverパターンありといった感じで、一度独自Observerパターンの代わりにUniRxを使ったらもう戻れないぐらい便利なので、UniRxは多くのUnity開発者にとって手放せないライブラリになってきているのではないでしょうか。現場からは以上です。

Microsoft HoloLens のプレオーダーが 12 月 2 日(金)より開始

news.microsoft.com

とうとう日本でもHoloLensのプレオーダーが開始されるようです。価格などについてはリンク先を御覧ください。

以下、HoloLensアプリ開発でスタートダッシュを決めたい開発者のために、読んでおいたほうが良いページをまとめておきます。

環境構築

Install the tools

HoloLensアプリを開発するために必要なツールです。

  • Windows 10 SDK(version 1511以降)
  • Visual Studio 2015 Update 3
  • Unity 5.5 *1
  • Vuforia *2

チュートリアル

Academy

チュートリアルは全部やった方が良いです。HoloLens実機が手元にない場合はEmulatorでできるとこだけ。入力、レンダリング、3Dサウンド、空間認識などを体感するにはDevelopment Editionを買うべし。

HoloToolkit

github.com

HoloToolkitは、Windows Holographicを対象としたホログラフィックアプリケーションの開発するためのコンポーネントを含むリポジトリです。

HoloToolkit-Unity

github.com

HoloToolkitをUnityから利用するためのコンポーネントを含むリポジトリです。 Examplesも含まれています。

UnityのWindows Holographicドキュメント

docs.unity3d.com

色々とHoloLensアプリを開発するための設定やエディタの操作方法が書いてあります。Performance recommendations for Unity へのリンクなどもあります。

UnityのScriptReference

docs.unity3d.com

実際に開発するようになったらScriptReferenceを一番見るようになるかもしれません。

*1:HoloLensをサポートしている正式版の5.5が出たので、HTPよりも5.5をインストールするのがおすすめです。

*2:実世界のオブジェクトをマーカーにして、GameObjectを配置したり追随させたりしたい場合は必要です。

ISUCON6予選問題の実装やベンチマーカーが公開されたので.NET Core実装追加してみた

ISUCON6予選問題の実装やベンチマーカーが公開されましたね。

isucon.net

ということでフォークして.NET Coreの参照実装を追加しました。

GitHub - kiyoaki/isucon6-qualify: Add .NET Core support

追加しただけで動作確認はこれから。 Microsoftは運営・協賛に入ってるのになぜ.NET Coreの参照実装を用意してくれなかったのか。

C#縛りでLT大会 & Meetup@bitFlyerで話してきた

イベントページ

forkwell.connpass.com

資料

振り返り

懇親会にテキーラ差し入れで持って行ったらベロンベロンになりました。懇親会と2次会で何を話したか忘れましたが、楽しかったのはなんとなく覚えています。今後、懇親会にテキーラ差し入れ流行らせようと思っております。