テスターですが何か?

ホビープログラマ略してHPです

Windows Developer Dayに参加しました(1日目) part2

leave a comment »

WDDの午後からはブレイクアウトセッションです、個人的にHTML+JavaScriptでMetroアプリを作成することに興味があるので、その内容を中身に聞いてきました。手元のノートに殴り書いた内容をブログにアップします。うまく理解できていない部分があるので、間違っている(誤解を与えかねない)部分もあるかもしれません。

WebアプリからMetroスタイルアプリへの移植

セッションの目的

MetroアプリとWebアプリの違いを理解する

WebアプリからMetroアプリへの移植時の注意点を知る

アプリの仕組みとしては、WinRT API上で動作するJavaScriptを書く

テクノロジー

HTML5+CSS3+JavaScript

「WWAHOST.exe」(IE10のスーパーセット?)がホスト

IE9以降のWeb標準にのっとったアプリであれば、Metroでも動く

描画エンジンはIE10と共通(Trident)

Metroアプリは動作環境が1つ(Win8+IE10)なので、ブラウザ互換を考える必要がない

ライブラリ

WinRT

Trident … 描画エンジン

WinJS … コントロールの作成、バインディングを行う

WinRT、WinJSを除けばWebアプリと変わらない

考慮点

MetorStyleでの描画

ローカルへの配置

アプリのライフタイムをOSが管理

描画

フルスクリーン描画(リサイズ、ポップアップを使うことができない)

スナップショット(縦にアプリを2つ並べて表示)

Portrait(デバイスを横にすると横長表示)

IE10(HTML5,CSS3)

「Internet Explorer10 開発者向けガイド」を参照

プラグインは動かない(Flash,Sliverlightは使えない)

タッチ操作(人間の指は太い、オブジェクトをある程度大きくしないと操作しづらい)

確認(タッチ操作は誤操作しやすい)

UIがローカル配置される

オフライン動作の可能性がある

UIとデータを分割(ページ遷移、セッション管理)

セキュリティコンテキスト

オフライン動作

オフラインの判断はNavigator.onLineで行う

キャッシュを活用する(LocalStorage, IndexedDB, Windows.Storage.AccessCache)

自動キャッシュ ※おすすめ ApplicationCache機能をmanifestファイルで設定する、高度による記述は不要

物江さんのブログにキャッシュの利用方法を解説した記事がある

UIとデータの分割

更新する/しない部分の切り分け

MVCの考え方で分割

ネットワークアクセスの影響、非同期を積極的に利用する

WinJSではPromiseパターンの採用

頻繁に更新されないものはキャッシュを使う

セキュリティコンテキスト

デフォルトはローカルコンテキストで動く、OSリソースを利用可能

iframeを使用するとWebコンテキストで動く、セキュリティ上の制限が発生する

JavaScriptの外部参照(例:CDNで配信されたjQuery)は不可

ライフタイム管理

Windows7デスクトップアプリはユーザーがライフタイムを管理

Windows8のMetroアプリはOSが管理する

別のアプリが全面に出ると、稼働中からサスペンドで移行、その逆も発生

サスペンド移行、稼働中へ移行時にイベントが発生、キャッシュ操作などの処理を実行可能

OSのメモリが不足すると、サスペンド状態のアプリが終了することも

ローカルリソースへのアクセス

カメラ、マイク etc

WinRTのAPI経由でアクセス

WebアプリからMetroStyleアプリへの移植

iframeを使ってもいいが、MetroStyleアプリにする理由がない…

準備

全てのリソースをローカルへ

HTML,CSS,JavaScript,画像,音声,動画 etc

デモ

単純にローカルにコピーするだけではエラー、jQueryをCDN経由で参照しているため

全部ローカルに持ってくることでほぼ移行は可能

移行はできたが、WebFontは使えない

【感想】

最初に聞いたセッションということもあり、聞いた内容すべてが新鮮で受講してよかったと思った。説明も丁寧。

ASP.NET MVC4とSPAがもたらすマルチデバイスエクスペリエンス

セッションのゴール

マルチデバイスをサポートするための機能の理解

Single Page Applicationのり会

マルチデバイス

クロスデバイス

クロスプラットフォーム

クロスブラウザ

リッチWebアプリエクスペリエンス

ページ全体をロードするアプリに対して、WebAPI経由でデータだけをクライアントに送る

ViewModelを非同期で更新し、UIの一部だけを変更

ASP.NET MVC4のマルチでバイル機能

jQuery Mobile

Display Modes

Browser Overriding

Single Page Application(単一ページでのクライアント中心実装)

UIとViewModelのバインドにknockout.jsを使用

ページ遷移制御にnav.jsを使用

データアクセスレイヤーにupshot.jsを使用

【感想】

SPAの話を聞きたくて受講したが、MVC4全体を広く説明しSPAの説明はその一部だった印象。ほとんど知ってる(使い込んでる)内容だったので、う~ん。SPAももっと突っ込んで、JavaScriptの解説をしないと全然イメージが湧かないと思う。

人気ソーシャルゲームでのSQL Azure Federation性能検証

※プレゼンテーションで使用されているアイコン欲しい

サービスの規模

月間140億PV

5時間で10万人登録

4000リクエスト/秒

負荷

同時接続40万セッション

帯域3Gbps

DBへ20万クエリ/秒

データベースはSQL Server 2008 R2を使用

1ゲームの構成

DB3~5台

AP100台

LB40台

Cache8台

DB処理

毎秒5万クエリ/秒、最大40万クエリ/秒

90秒ごとにログフラッシュ、400MBの書き込み

1日10GBのデータ増

→現在はFusion-io Driveを使用

ゲームサービスの要件

レスポンスは5秒以内

急激がトラフィック増に耐える必要がある

Windows Azureの検討

月に100台のサーバーが増える、7名のインフラ担当の負荷

高トラフィックのノウハウ不足、パッチ適用の負荷

急なアクセス増を見越してリソースを準備する必要がある

Windows Azureへの期待

柔軟なスケールイン/アウト

MSがインフラ、パッチ管理

グローバル対応(国外データセンター)→グローバル展開の土台と死体

SQL Azure

オンプレミスではスケールアップで対応

クラウドはスケールアウト(SQL Azure Federation)で対応

SQL Azureで考慮すべき仕様

容量上限150GB、分散化が必要

共有サービスモデル

リソースを過剰消費するセッションは強制切断

DOS Guard

DOS Guard

DDos対策

同一IPからの大量アクセスは強制切断し、一定時間アクセスを拒否

ホワイトリスト設定できない

→ホステッドサービス、データベースを分散化させる必要がある

検証構成

60インスタンスを10インスタンス×6ホステッドサービスに分ける→6IPに分ける

SQL AzureはユーザID単位で分割できるものはFederationで分割、最大1DBを40分割

負荷テスト

4000アクセス/秒

91%が1秒未満のレスポンス

99.7%が5秒未満のレスポンス

→スケールアウトで要件は満たせた

制約事項

DB分割上限は149個

データベースをまたがる結合はできない

IDENTITYが使用できない

件数(count)はメンバーデータベース内の件数

移行のためには

データ分析方法の考慮(データベースが分割される、クエリによるリソース消費が大きい)

バックアップ方法(データマイニング用の複製、データ不整合時にロールバック)

サービス監視、アプリのデプロイ

データ移行

1TBのデータ量、一括移行すると2~3日

転送方法(Azure Storage→SQL Azure / BCP並列実行)

まとめ

高トラフィック環境でもスケールアウトすることができた

初期データ移行、運用方法には課題も

【感想】

すごい、生の検証結果だけあってものすごく説得力がある。SQL Azure Federationがこんなに素直にスケールアウトできるとは意外だった。

Written by david9142

2012年4月25日 @ 2:39 AM

カテゴリー: WDD

Tagged with

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。