flex+aws開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf•...

32
Flex+AWS開発事例 ウェブポ リプレックス株式会社 岡﨑 光隆 ([email protected])

Upload: others

Post on 01-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

Flex+AWS開発事例

ウェブポリプレックス株式会社

岡﨑 光隆([email protected])

Page 2: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

リプレックスについて• プロフィール

– 総勢12名の小さなベンチャー(開発者9名)– 2006年設立– オフィスは原宿

• 商品– Ripplex アドレス帳 (配布終了)– Ripplex SecuTect™– ウェブポ

• HP– http://www.ripplex.com/

Page 3: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

自己紹介• 所属

– リプレックス株式会社 はがき事業部

• 職歴– 研究職(ソフトウェア工学)– 組み込みエンジニア

• LSIベースのHTTPサーバ開発(VHDL,C++,Java)– ソフトウェアエンジニア

• Ripplexアドレス帳(C++,Java)• ウェブポ(AS3,Java)

• 趣味– プログラミング

Page 4: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

ウェブポとは• 年賀状印刷のECサイト

– 年賀状の作成・印刷・投函、全てをサポート– 2009年10月ローンチ

Page 5: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません
Page 6: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません
Page 7: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません
Page 8: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません
Page 9: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません
Page 10: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません
Page 11: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

利用技術

Page 12: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

ウェブポの特徴• 注文から決済までFlashで完結

– ECサイトとしては非常に珍しい

• 完全ウィザード形式– 全画面横スクロールで決済まで完了(世界初?)– 総画面点数は約200(ダイアログ含む)

• Flexアプリケーションとして実装– Flex Builder 3 + Flex SDK 3.2.0– MXMLは使っていません

• アプリケーション定義のMXMLを除く

• ちょっとだけFlashを使用– ボタンなど一部のアニメーション表現にFlashを使用

Page 13: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

Flexを選んだ理由• 要求を満たせる開発環境が、Flexしかなかった

– MacでもWinでも動作– インストール不要– ローカルアプリ並みの使いやすさ

• フォント選択可能• 写真貼付可能• 印刷内容のリアルタイムプレビュー

– 洗練された外観

• GWTやJavaScriptは…– 画面描画が遅すぎる

• HTML Canvas, HTML5の普及はまだ先の話– ブラウザ個別対応がつらい

• 先進的なGUIツールキットでもブラウザ間の差異は埋めきれない

Page 14: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

View

ウェブポの構造

Flash Player 10.0

Flex SDK 3.2.0

Model Controller

MVC Framework Window ManagerCustom Component

Browser

Application

Helper Functions※

JavaScript Engine

※ブラウザ依存の処理(FlashのアップグレードやMac環境でのホイールマウス対応など)を行うJavaScript関数群

Page 15: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

カスタムコンポーネント• デザイナの意図を反映するため、独自のコンポーネントを多数作成

選択要素の位置を基準にして開くドロップダウンボックス

ヘッダ行がスクロールバーの上にはみ出る

ぶち抜き見出し

スムーズスクロールするリストビュー

はがき印刷のリアルタイムプレビュー

Page 16: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

FlexとFlashの結合• 高度なアニメーションは、Flash開発者による手付け

– トップ画面全体・点滅するボタン・ナビゲータ

Page 17: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

Flex よかったところ• 習得しやすい

– Java, C++エンジニアがスムーズに開発に入れた

– チーム丸ごとFlex未経験だったが、全く問題なし

• 開発環境が安い

• 描画の自由度が極めて高い

– デザイナーの意図をかなり正確に反映できる

• 描画が軽い

– フレームワークレベルで再描画回数をおさえる仕組みがある

– フレームスキップの発生を前提としたエフェクト関数群

• 公式ヘルプがしっかりしている

Page 18: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

Flex開発 困ったところ• エラーハンドリング機構が不十分

– Uncaught Exceptionの発生をアプリケーションで監視できない※

• バグやメモリ不足など、重大なエラーを拾うことができない

※Flash Player 10.1で改善されるようです。

Page 19: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

AWSとの組み合わせについて

Page 20: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

ウェブポのサーバ構成

アプリケーションサーバ

WWWサーバ

ロードバランサー

ロードバランサー

認証サーバ

DB、暗号化などその他もろもろ

サーバ群

Amazon Cloud Front

Amazon EC2 + EBSAmazon ELB

クライアントHTTPS

HTTPS

HTTPS

HTTP

Page 21: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

クライアント視点では、ただの性能が良いサーバ(に見えるよう、サーバチームにがんばってもらった)

負荷につよいアプリケーションサーバ

負荷につよいWWWサーバ

負荷につよい認証サーバ

Amazon Cloud Front

Amazon EC2

クライアント

負荷に強くて転送が高速でレイテンシの低いキャッシュサーバ

Page 22: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

AWS採択の理由• スケールアウトに適している

– アクセス集中時、すぐにサーバを増やせる

• 安定している

• 初期コストが低い– サーバ購入の初期コスト不要

• 体積ゼロ– 置き場所の悩みなし

• 消費電力ゼロ– 電源の悩みなし

Page 23: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

Flex開発者から見たAWS• ごく普通のレンタルサーバ

– Flexアプリ側に特殊な作り込みは不要

• 若干慣れの必要なポイントはあり– ドキュメント類が英語– 独自の管理インタフェース

• 通信レイテンシ・回線速度に注意– ロケーションは基本的に国外– CloudFrontとの組み合わせが有効

Page 24: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

通信レイテンシ・速度対策• EC2上にFlexアプリをデプロイすると、アプリの起動(ロード)が遅い

– ウェブポは米国東海岸のサーバを使用

– アクセスレイテンシが長め

• 100~200ms

– 回線速度が遅め

• EC2,S3から配信すると下り80~200KB/s程度

• 対策:Amazon Cloud FrontからFlexアプリを配信

– 日本国内にサーバがあるので遅延が少ない

– 回線速度も下り2.0~3.0MB/sぐらいで安定

Page 25: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

Amazon CloudFrontの利用• ウェブポで困ったこと

– Amazon CloudFront は HTTPSに非対応

– ウェブポは HTTPS アクセスが前提

• 図のような構成でうまくいきそうだが…

webpo.jp

Amazon Cloud Front

index.html

Webpo.swfHTTP

<embed>

HTTPS

Page 26: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

セキュリティエラーに…webpo.jp

Amazon Cloud Front

index.html

Webpo.swf

HTTPS

HTTP

<embed>

Page 27: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

ファイル配置の工夫• Flexアプリをモジュール分割

– ローダ 約307KB

– 本体モジュール 約5MB

– フォントモジュール×3 約2~6MB

• index.htmlとローダをwebpo.jpから配信

• 本体モジュールをAmazon Cloud Fontから配信

• ローダからその他のモジュールを読み込む

webpo.jp※

Amazon Cloud Front

index.html

CoreModule.swf

HTTPS

HTTP

Webpo.swf (ローダ)

<embed>

ローダがその他のモジュールを読みこむ

font1.swffont2.swf

font3.swf

※ピーク時期のwebpo.jpサーバは3台構成。そのうち1台は国内DSに配備。index.htmlの配信レイテンシも下げるため。

Page 28: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

CloudFront利用時のデプロイ(1)• ファイルのアップロード先はAmazon s3

– CloudFrontはs3上のコンテンツをキャッシュして配信

– GUIでのアップロードやACL設定はかなり手間

• CloudFrontのキャッシュ更新は1日1回

– S3上のファイルを更新しても、CloudFrontへの反映まで最長1日かかる

– 即時更新したいファイルは、ファイル名にリビジョンを混ぜるなどの工夫

デプロイ作業が非常にめんどくさい

Page 29: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

CloudFront利用時のデプロイ(2)• ウェブポでは、シェルスクリプトで自動ビルド&デプロイ

– シェルは sh– swfのビルドは mxmlc– html-template → htmlコンパイルはsedで文字列置換– EC2へのファイル転送は scp– CloudFront/S3へのファイル転送は s3cmd

• Windows環境からのデプロイはCygwinを利用

Page 30: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

AWSを使ってみて• AWSのここがよい

– 気軽に使い始められる– 高いスケーラビリティ

• レイテンシと転送速度がネック– もしEC2が日本国内でサービス開始したら最強では…

• Flex+AWSの組み合わせは相性が良い– Flexアプリ側の頑張りで、通信量は大幅に減らせる

• ウェブポはFlex+AWSがぴったりフィット– ユーザー作業のほとんどがローカル処理– 通信タイミングはごくわずか

• 起動・写真アップロード・決済・保存

Page 31: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

開発スケジュール4 5 6 7 8 9 10 11 12

要求分析

画面デザイン作成

View実装(Flex)

Model, Controller実装(Flex)

サーバ実装(Java)

12009 2010

画面仕様作成

サイト運用MVC Framework

Page 32: Flex+AWS開発事例 ウェブポfxug.net/archives/study_mtg_100/fxug-webpo.pdf• Flexアプリケーションとして実装 – Flex Builder 3 + Flex SDK 3.2.0 – MXMLは使っていません

おわりです

今年もウェブポをよろしくおねがいします