Movatterモバイル変換


[0]ホーム

URL:


Yusuke Wada, profile picture
Uploaded byYusuke Wada
6,966 views

The master plan of scaling a web application

Yusuke Wada a.k.a yusukebe2013/10/26Fukuoka Perl Workshop #24

Embed presentation

Download to read offline
The master plan ofscaling a web applicationYusuke Wada a.k.a yusukebe2013/10/26Fukuoka Perl Workshop #241
本日の使用フォントやさしさゴシックhttp://www.fontna.com/blog/379/2
Japan Perl Associationの講師派遣制度を利用させて来ました3
自己紹介•• (株)ワディット代表取締役(株)オモロキ取締役兼最高技術責任者•• Webアプリケーションデベロッパー物書きも少々…•• 独身…和田裕介 1981年12月23日生4
どこから来たの?5
6
すみかは?7
8
本題の前にYAPC::Asia 2013レポート的な何か9
YAPC::Aasia 2013 in Tokyo9月19,20,21日慶應義塾日吉キャンパス内 協生館10
概要•エンジニアのエンジニアによるエンジニアのためのお祭り•• 同時4トラックが走るトータル1,131人の参加者11
30days Albumよりhttp://30d.jp/yapcasia/612
前夜祭 LTソン::Tiny13
お祭り雰囲気14
トーク15
Perl入学式16
Lightning Talks17
オーディエンス18
Hub19
引退20
以上YAPC::Asia 2013ありがとう!21
さて…22
本日の題材「最近なに開発してるか」23
24
ボケて• 国内最大級のお笑いWebサービス...らしい!3秒で笑えるがコンセプト•オモロキがコアとなって開発・運営•25
こういうの26
参考データ•• 月間お題投稿数3万件月間ボケ投稿数120万件•• モバイルアプリは200万インストール合計ボケ投稿数1,100万ボケ•ほげほげページビュー27
各種デバイス展開•• スマホ向けWebiOSアプリ•• AndroidアプリPC向けWeb28
外部サービスとの連携• Yahoo! JAPAN百度 hao123•• PlayNowgoo•• Gunosyetc.•ボケてセレクト29
コラボ・スペシャルアカウント•• 企業さんがお題を提供ユーザーがボケる•• バナー/告知ページ二次利用なども•島耕作でボケれる!30
ボケて自体の説明終わり31
開発の話32
Bokete versions• Alpha - リリース前の試験版Beta- 2008年8月リリース•• Gamma - 2009年5月リリースDelta - 2012年7月リリース•• Epsilon - 次期バージョン33
全ての開発・運用を一人で担当*モバイルアプリを除く34
人的リソースは増やさない35
便利な外部サービスでスケール• Amazon Web ServicesRDS, ElastiCache, SES ...•• Managedなミドルウェアを選択GitHubプライベートレポジトリ•• Travis CIUptimer•などなど...•36
ただ、正直しんどい...37
オモロキ38
パートナー開発体制ケースによって座組を変える• コア = オモロキアプリ= オモロキ+ハロ+ブレイブソフト•• コラボ= オモロキ+ハロ+キャッチボール...•39
割り切った分業化を提案• API Version 2を作成ほぼ全機能をWeb APIで提供•• モバイルアプリだけではなくWebでも利用Webのフロント部分を誰かに移譲•• 言語はなんでもよい!40
Web API v2•• 既存の仕様を利用するJSON-RPC 2.0•• OAuth 2.0API = Web でネットワークレイテンシ•• 割りきって無視をするコアのロジックを全て実装し提供41
JSON-RPC# POST to SERVER!{‘jsonrpc’: ‘2.0’, ‘method’: ‘/boke/recent’, ‘params’: {‘limit’: 10}, ‘id’: 1}!!# Response BODY{‘jsonrpc’: ‘2.0’, ‘result’: { entries = […] }, ‘id’: 1}シンプルなフォーマットPOSTでリクエストもちろんJSONフォーマット42
43
APIの実装• 旧APIと同居させる認証認可のためのパス•• 情報操作のためのパスv1アプリOAuthv2JSON-RPC44
方針• 既存WAFは使わない = 素PlackアプリOAuth::Lite2 + JSON::RPCを利用•./lib/Bokete/WebAPIv2## Dispatcher.pm## OAuth/$   ## Controller/$   $   ## OAuth.pm$   $   ## Root.pm$   ## Controller.pm$   ## DataHandler.pm$   ## Dispatcher.pm## RPC/## Dispatcher.pm## Filter.pm## Handler/$   ## Boke.pm$   ## Root.pm## Handler.pm## Router.pm45
OAuth::Lite2•• mixiでの利用実績あり?継承して中身を実装する•• OAuth::Lite2::Server::DataHandlercode認証、password認証などに対応•Provider実装も含まれている46
# In your controller!use Plack::Middleware::Auth::OAuth2::ProtectedResurce;!my $middleware =Plack::Middleware::Auth::OAuth2::ProtectedResource-new(data_handler = 'Bokete::WebAPIv2::OAuth::DataHandler',app = sub {},);$middleware-call($self-request-env);!if(my $user_id = $self-req-env-{REMOTE_USER}) {my $user = $self-model('User')-find({ id = $user_id });$self-stash-{user} = $user;}else{$self-stash-{user} = undef;}47
JSON::RPC•• ルータにRouter::Simpleを利用しているまかまかさん=牧さんmy $router = Router::Simple;$router-connect( 'get_info' = {handler = 'Hoge::Handler::Root',action = 'get_info'});my $dispatch = JSON::RPC::Dispatch-new( router = $router );...;sub psgi_app {$dispatch-handle_psgi($env);}48
API Playground49
ほぼAPI側のフレームワークは完成!50
誰かにWebのフロントを担当してもらおう!51
やまぴー52
俺「フロントの言語は何でもいいよ」53
やまぴー「Perlでやります!」54
俺「!!!」55
ってことでやまぴーと一緒に• Boketeのシステム部分をはじめて分業• マネージメントツールをGitHubに寄せる• レポジトリ• イシュー管理• ドキュメント管理• 積極的に対面して一緒に作業する• フロントはMojoliciousで実装する56
Bokete::Front::*• やまぴーが使いやすいフレームワーク作成# presudo code!get '/boke/recent' = sub {my $self = shift;my $result = $self-call_api({method = '/boke/recent',params = { limit = 10 }});$self-stash-{entries} = $result-{entries};$self-render();};57
提供するライブラリなど• Mojoliciousに特化したセッション管理認証とAPIのコールをラップするUA•• CSRF対策アプリのフレームワーク•作法をつくる58
例えばセッション管理my $session;!...;!$self-hook(around_dispatch = sub {my ( $next, $c ) =@_; $session = Bokete::Session-new( request = $c-req );$next-();$session-finalize( response = $c-res );});!...;!$self-helper(bokete_session = sub { return $session });59
特化したUserAgentmy $ua = Bokete::Front::UserAgent-new(client_id = ‘xxxxxx’,client_secret = ‘xxxxxx’,access_token_uri = ‘xxxxxx’,rpc_endpoint_uri = ‘xxxxxx’);!my $token = $ua-get_token({username = ‘xxxxxx’,password = ‘xxxxxx’});!# OAuthヘッダを設定しつつJSON-RPCをコールするmy $result = $ua-call({access_token = $token-access_token,method = ‘hello’,params = { message = ‘foo’ }});60
今回の構造化のメリット•• 分業しやすい、開発者の冗長化役割としてのフォーカスが明確になる•• フロントエンドはやまぴーロジックとフレームワークづくりに集中•• 他のことに手を付けられる!テスタビリティが上がる61
今後やりたいこと•• 死活監視・リソース監視・チューニング開発・CI環境の整備•• コンテンツデータの解析新機能の実験•• Growth Hacks的なことインフラ周りの強化62
まとめ63
今やってるWebアプリの構造化• HTTPレベルで一つのアプリを切り離すAPIサーバ•• OAuth認証JSON-RPCによる情報操作API•• 分業出来てフォーカスが絞れる絶賛開発中•• ウマくいけばやれることが広がる!64
おわり質問等どーぞー65

Recommended

PDF
Pyramid入門
PDF
Using Dancer
PDF
はじめよう Backbone.js
PDF
⑯jQueryをおぼえよう!その2
PDF
SEOとJava Script。 〜文書構造とチームと、時々、闇〜
PDF
Backbonejs @BuildInsiderOffline #1
PDF
WordPressで提供するWeb API
PDF
Flask勉強会その1
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
WordPressと外部APIとの連携
PPT
Scripting Layer for Android + Perl
PDF
Scc2014 :jQueryの仕組みを完璧に理解する
PDF
Backbone.js入門
PDF
jQuery Performance Tips – jQueryにおける高速化 -
PPTX
2時間で学ぶjQuery
PDF
backbone.jsの使用例 その1
PDF
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PPTX
20140523 jQuery基礎 (HTML5ビギナーズ)
PDF
第21回Creators MeetUp
KEY
Wight: Phantom’s Perl friend - YAPC::Asia 2012
PPT
Titanium Mobile
PDF
Start React with Browserify
PPTX
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
PPTX
実用裏方 Perl 入門
PDF
⑲jQueryをおぼえよう!その5
PDF
Angular js or_backbonejs
PPTX
忙しい人のためのBackbone.jsとAngular.js入門
PDF
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
PDF
Simon Property Group

More Related Content

PDF
Pyramid入門
PDF
Using Dancer
PDF
はじめよう Backbone.js
PDF
⑯jQueryをおぼえよう!その2
PDF
SEOとJava Script。 〜文書構造とチームと、時々、闇〜
PDF
Backbonejs @BuildInsiderOffline #1
PDF
WordPressで提供するWeb API
PDF
Flask勉強会その1
Pyramid入門
Using Dancer
はじめよう Backbone.js
⑯jQueryをおぼえよう!その2
SEOとJava Script。 〜文書構造とチームと、時々、闇〜
Backbonejs @BuildInsiderOffline #1
WordPressで提供するWeb API
Flask勉強会その1

What's hot

PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
WordPressと外部APIとの連携
PPT
Scripting Layer for Android + Perl
PDF
Scc2014 :jQueryの仕組みを完璧に理解する
PDF
Backbone.js入門
PDF
jQuery Performance Tips – jQueryにおける高速化 -
PPTX
2時間で学ぶjQuery
PDF
backbone.jsの使用例 その1
PDF
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PPTX
20140523 jQuery基礎 (HTML5ビギナーズ)
PDF
第21回Creators MeetUp
KEY
Wight: Phantom’s Perl friend - YAPC::Asia 2012
PPT
Titanium Mobile
PDF
Start React with Browserify
PPTX
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
PPTX
実用裏方 Perl 入門
PDF
⑲jQueryをおぼえよう!その5
PDF
Angular js or_backbonejs
PPTX
忙しい人のためのBackbone.jsとAngular.js入門
15分でCakePHPを始める方法(Nseg 2013-11-09 )
WordPressと外部APIとの連携
Scripting Layer for Android + Perl
Scc2014 :jQueryの仕組みを完璧に理解する
Backbone.js入門
jQuery Performance Tips – jQueryにおける高速化 -
2時間で学ぶjQuery
backbone.jsの使用例 その1
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
20140523 jQuery基礎 (HTML5ビギナーズ)
第21回Creators MeetUp
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Titanium Mobile
Start React with Browserify
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
実用裏方 Perl 入門
⑲jQueryをおぼえよう!その5
Angular js or_backbonejs
忙しい人のためのBackbone.jsとAngular.js入門

Viewers also liked

PDF
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
PDF
Simon Property Group
PDF
Pra-Rancangan Pabrik Amonium Klorida dengan Proses Netralisasi Kapasitas 100....
PDF
YAPC::Asia 2010 Twitter解析サービス
PDF
How can HubSpot help BabelQuest grow your business
PDF
Adblock is a boycott: The failure of Big Data to see it coming. Version 2.0. ...
PPTX
Lmcp 1532 pembangunan bandar mapan
PPTX
Wawasan bangi kajang 30 tahun akan datang
PDF
Creative Compound Press Materials & Media Outreach Materials
PDF
CAREPNG 5-Yr StrtPln 2012-16
PPTX
Bangi kajang 30 tahun akan datang
PDF
Calendari 2017
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
Simon Property Group
Pra-Rancangan Pabrik Amonium Klorida dengan Proses Netralisasi Kapasitas 100....
YAPC::Asia 2010 Twitter解析サービス
How can HubSpot help BabelQuest grow your business
Adblock is a boycott: The failure of Big Data to see it coming. Version 2.0. ...
Lmcp 1532 pembangunan bandar mapan
Wawasan bangi kajang 30 tahun akan datang
Creative Compound Press Materials & Media Outreach Materials
CAREPNG 5-Yr StrtPln 2012-16
Bangi kajang 30 tahun akan datang
Calendari 2017

Similar to The master plan of scaling a web application

PDF
Mojoliciousでつくる! Webアプリ入門
PDF
「Webサービスのつくり方」 のつくり方
PDF
「新しい」を生み出すためのWebアプリ開発とその周辺
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
PDF
Fukuokapm20140920 uzulla talk
PDF
Tottoruby 20110903
PDF
Swaggerを利用した新規サービス開発
PPTX
130329 perl casual_ruik
PPTX
fluxflex meetup in Tokyo
PPTX
Fluxflex meetup 2011 in Tokyo
PDF
とある Perl Monger の働き方
PDF
みんなでWAIWAI Webアプリ
PDF
110409 slintky lt
PDF
WordPressAPI
PDF
Web技術勉強会 第31回
PDF
Perlで初めてWebアプリを作った話
PPT
Web2.0 講演スライド 2008/2/26
PDF
Moff 20130309 jawsug_santo_v01
PPTX
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
Mojoliciousでつくる! Webアプリ入門
「Webサービスのつくり方」 のつくり方
「新しい」を生み出すためのWebアプリ開発とその周辺
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
50分で掴み取る ASP.NET Web API パターン&テクニック
Fukuokapm20140920 uzulla talk
Tottoruby 20110903
Swaggerを利用した新規サービス開発
130329 perl casual_ruik
fluxflex meetup in Tokyo
Fluxflex meetup 2011 in Tokyo
とある Perl Monger の働き方
みんなでWAIWAI Webアプリ
110409 slintky lt
WordPressAPI
Web技術勉強会 第31回
Perlで初めてWebアプリを作った話
Web2.0 講演スライド 2008/2/26
Moff 20130309 jawsug_santo_v01
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...

More from Yusuke Wada

PDF
Inside Bokete: Web Application with Mojolicious and others
PDF
スッとGoを取り入れる
PDF
Webサービスのコンテンツパターン 或いはデータの活⽤
PDF
僕らがWebサービスをつくる5つの理由
PDF
Webサービス企画のコツ
PDF
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
PDF
そのWebサービスは本当に「あたりまえ」だったのか?
PDF
事故からはじまるスケールチャンス
PDF
5 minutes - YAPC::Asia Tokyo 2014
PDF
僕らの履歴書
PDF
Extreme remote working
PDF
東京脱出計画中
PDF
僕らがつくるための 「5W」について
PDF
It's not only about "REMOTE"
PDF
Google BigQueryを使ってみた!
PDF
創造のプロセスを回せ!v0.01
PDF
Podcastをカジュアルに 支える技術
PDF
僕がつくった 70個のうちの48個のWebサービス達
PDF
10 things to learn from Bokete
PDF
横浜ラーメン紀行
Inside Bokete: Web Application with Mojolicious and others
スッとGoを取り入れる
Webサービスのコンテンツパターン 或いはデータの活⽤
僕らがWebサービスをつくる5つの理由
Webサービス企画のコツ
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
そのWebサービスは本当に「あたりまえ」だったのか?
事故からはじまるスケールチャンス
5 minutes - YAPC::Asia Tokyo 2014
僕らの履歴書
Extreme remote working
東京脱出計画中
僕らがつくるための 「5W」について
It's not only about "REMOTE"
Google BigQueryを使ってみた!
創造のプロセスを回せ!v0.01
Podcastをカジュアルに 支える技術
僕がつくった 70個のうちの48個のWebサービス達
10 things to learn from Bokete
横浜ラーメン紀行

The master plan of scaling a web application


[8]ページ先頭

©2009-2025 Movatter.jp