ネットワーク分散型フレームワークConView

3,992 views

Published on

「ネットワーク分散型フレームワーク  ConView」
2009年10月24日に行われた、楽天テクノロジーカンファレンス2009での発表資料です。

http://tech.rakuten.co.jp/rtc2009/

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total views
3,992
On SlideShare
0
From Embeds
0
Number of Embeds
196
Actions
Shares
0
Downloads
0
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

ネットワーク分散型フレームワークConView

  1. 1. ネットワーク分散型 フレームワーク ConView [kom-b u ] 楽天株式会社 開発部 福田昌弘 /Roman Shtykh | 2009 年 10 月 24 日
  2. 2. 発表者の紹介 福田昌弘 ( ふくだまさひろ ) 開発部 国際サービス開発・運用課 国際サービス開発グループ 1999 年 ソニー株式会社から Whynot Creations(SanJose) に転職、ワイノット株式会社に転籍。 2002 年 楽天株式会社に転籍。 実績 Ynot グリーティングカード 楽天グリーティングカード Ynot ぬいぐるみカード 社内 VPN システム 楽天市場台湾 トップページ他 ConView を考案 Roman Shtykh ( ろまん しゅてぃふ) 開発部 国際サービス開発・運用課 国際サービス開発グループ 情報検索アルゴリズムの研究や 組込みソフトウェアの開発に従事後、 早稲田大学大学院人間科学研究科にて博士号を取得。 2009 年 4 月から 楽天株式会社で ソフトウェア エンジニアとして活躍中。 ウクライナ出身 ですが日本語でプレゼンします。
  3. 3. ConView とは? ConView とは? ネットワーク分散型の Web フレームワーク どこがネットワーク分散型なの? MVC の M をネットワーク経由で呼び出します。 【 ConView 】 C: Controller M: Model V: View Output (HTML,XML …) Input (URL,POST …) 【 WebAPI 】
  4. 4. 今までと何が違うの? ConView は… . 同時に多数の API を呼び出せます。 【 ConView 】 C: Controller M: Model V: View 【 Web Application 】 M: Model 【 Web Application 】 M: Model 【 Web Application 】 M: Model 【 Web Application 】 <ul><li>モデルを小さく作れます。 </li></ul><ul><li>モデルが完全に独立します。 </li></ul>
  5. 5. ConView の処理概要 例:とあるショップの商品ページ http://shop1.rakuten.com/item/123923/ 【 ConView 】 【 Pre Controller 】 Shop 用 URL ルール Top 用 URL ルール Search 用 URL ルール ホスト名から URL マップを選択 【 Pre Controller 】 トップページ 商品ページ カート オペレーションを選択 【 Pre Controller 】 セッション R/W リクエストを選択 商品情報取得 ショップ情報取得 ランキング取得 サーチ結果取得 商品をカートに入れる カートの中身取得 後ほど詳しく説明します
  6. 6. 開発の動機 社外秘なので大きな声では言えませんが… . 楽天のアプリは かなり API 化されてますw <ul><li>ajax, iframe など ブラウザから呼ばれる API </li></ul><ul><li>SOAP, REST, JSON(RPC) などアプリから呼ばれる API </li></ul>特に ajax,iframe はクライアントアプリが不要なため よく利用されています。
  7. 7. ajax / iframe の問題点 便利だけど… . 個人的な意見として 次の問題があると考えています。 <ul><li>ユーザ視点では 遅れて描画されるため ユーザビリティに悪影響を及ぼしやすい ボタンを押そうと思ったら 画面がずれた経験。ありませんか? </li></ul><ul><li>デザイナー視点では JavaScript を覚えないと デザインが出来ない。 結局、エンジニアがデザインしてませんか? </li></ul><ul><li>運営側からすると 検索エンジンにクロールされない… . -> SEO 効果に悪影響 携帯で使えない スマートフォンでは使えるけど遅い </li></ul>
  8. 8. とにかく…. JavaScript は 面倒だから使いたくないw ついでに iframe も !!
  9. 9. SEO効果が高いと有名な某サイト-トップページ これにも注目 表示履歴からのおすすめ 出版社のいちおしタイトル ベストセラー ユーザの履歴などから”複数の項目”をパーソナライズ
  10. 10. SEO効果が高いと有名な某サイト-アイテムページ この商品を見た後に買っているのは? 商品情報 , ユーザ履歴から”複数の項目”をパーソナライズ 商品情報 よく一緒に購入されている商品 この商品を買った人はこんな商品も .. この商品につけられているタグ カスタマーレビュー
  11. 11. どうしましょうか? <ul><li>機能的に同じものはある </li></ul><ul><li>機能は API 化されている </li></ul><ul><li>別ページに表示するのはもってのほか </li></ul><ul><li>JavaScript/iframe は問題が多い </li></ul>WebAPI をサーバサイドで叩く サーバサイド で マッシュアップ !!
  12. 12. 何故今までやらなかったのか? <ul><li>いくつかの問題があるから </li></ul><ul><li>応答待ち時間 </li></ul><ul><li>通信により CPU 負荷増大 </li></ul><ul><li>呼び出し毎に仕様が異なる </li></ul><ul><li>フレームワーク化されていない </li></ul>
  13. 13. 応答待ち時間 <ul><li>Socket Open </li></ul><ul><li>API 要求 </li></ul><ul><li>結果を受信 </li></ul>1,2 を行ってから 3 までの間、待ち時間が発生。個々の API が 0.1 秒で終わっても 10 個で 1 秒 かかってしまう。 -> 多数の API を呼び出すとレスポンスに影響
  14. 14. 応答待ち時間問題:解決方法 応答待ち時間問題の解決方法 待ち時間をまとめる -> 待ってるだけで CPU はヒマなので <ul><li>マルチタスク / マルチスレッドにする。 </li></ul><ul><li>epoll() kqueue() などで I/O 多重化する。 </li></ul><ul><li>今回は技術的な ( 力の ) 問題でマルチスレッドを採用。 </li></ul>
  15. 15. 通信によりCPU負荷増大 通信するにはサーバーとクライアントで プロトコル を決める必要がある。 負荷の主な要因はプロトコルに起因している ※ 同じデータを 1 毎回 de-serialize した結果 19.8 YAML 3.38 Google Pbuf 1.12 json 0.60 Thrift 0.52 MessagePack 0.47 pickle 時間 ( 秒 ) 種類
  16. 16. 解決方法:通信によりCPU負荷増大 速い ( 遅くない ) プロトコルを 使えば問題にならない
  17. 17. 呼び出し毎に仕様が異なる さまざまな web API 。 SOAP, JSON-RPC, REST… いちいち、対応するのは面倒だ。 何かいいのはないかな?
  18. 18. 呼び出し毎に仕様が異なる ん?さっきのグラフに… Thrift って何ですか? 19.8 YAML 3.38 Google Pbuf 1.12 json 0.60 Thrift 0.52 MessagePack 0.47 pickle 時間 ( 秒 ) 種類
  19. 19. Thriftとは? <ul><li>クロス言語 RPC フレームワーク </li></ul><ul><li>(C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, OCaml) </li></ul><ul><li>C で作った API サーバを PHP から呼び出す </li></ul><ul><li>Java で作った API サーバを Perl から呼び出す </li></ul><ul><li>といった事が可能。 </li></ul><ul><li>元は Facebook で開発され実際に利用されている。 </li></ul><ul><li>2007 年 4 月からオープンソースになり 2008 年 5 月から Apache incubator となっている。 詳しくは このあたりを… </li></ul><ul><li>http://developers.facebook.com/thrift/ </li></ul><ul><li>http://incubator.apache.org/thrift/ </li></ul><ul><li>http://www.slideshare.net/naoya1977/about-thrift </li></ul>
  20. 20. 解決方法:呼び出し毎に仕様が異なる Thrift を使えばサーバを作る必要がない json, thrift, Pickle, MessagePack の どれでもよかったが… まさに願ったりかなったり
  21. 21. フレームワーク化されていない 前述の機能を組みあわせたものを フレームワーク化すれば便利かも ?!! ネットワーク分散型 フレームワーク ConView [kom-b u ]
  22. 22. ConView の構造 具体的な構造について
  23. 23. Key Technologies <ul><li>Python  ー 主な開発言語 </li></ul><ul><li>Apache Thrift  -  for RPC, cross-language features, plainly data serialization </li></ul><ul><li>mod_wsgi  -  Apache⇔Python アプリケーション( ConView )間のインターフェース </li></ul><ul><li>ClearSilver  - 高速なテンプレートエンジン </li></ul>
  24. 24. Main Features 技術的観点から <ul><li>Designed with multitasking in mind </li></ul><ul><ul><li>Easy implementation of multithreaded services </li></ul></ul><ul><li>Can be easily switched to various template engines </li></ul><ul><ul><li>Data used for templates are handled in template-neutral format </li></ul></ul><ul><li>Can work with multiple kinds of services – RPC, SOA, REST, etc. </li></ul><ul><li>Combination of various diverse services is easily realizable </li></ul><ul><li>Special considerations for i18n. </li></ul>
  25. 25. Architecture Overview cartridge system
  26. 26. ConView の呼び出しのイメージ 例:とあるショップの商品ページ http://shop1.rakuten.com/item/123923/ 【 ConView 】 【 Pre Controller 】 Shop 用 URL ルール Top 用 URL ルール Search 用 URL ルール ホスト名から URL マップを選択 【 Operation 】 トップページ 商品ページ カートページ オペレーションを選択 【 Request 】 セッション R/W リクエストを選択 商品情報取得 ショップ情報取得 ランキング取得 サーチ結果取得 商品をカートに入れる カートの中身取得 response request 外部接続 外部接続
  27. 27. 具体的に何が出来るの? (1) <ul><li>複数のサービスの組み合わせを容易にできる </li></ul><ul><li>アプリ応答速度の向上 </li></ul>
  28. 28. 具体的に何が出来るの? (2) <ul><li>Pylons フレームワークで楽天 API を 30 回叩く Python アプリ </li></ul><ul><li>同じことをする ConView アプリ </li></ul><ul><li>Demo video </li></ul>
  29. 29. まとめ まとめ
  30. 30. まとめ <ul><li>ネットワーク分散型 Web フレームワークです </li></ul><ul><li>マルチスレッドで API を叩き放題です </li></ul><ul><li>サーバーサイドでマッシュアップできます </li></ul>ConView とは
  31. 31. ほかにも… <ul><li>Virtual Ocean – 大規模データキャッシュ </li></ul><ul><li>Cache ……. – キャッシュには…… . を </li></ul><ul><li>One touch deploy – 大規模に対応するために… </li></ul><ul><li>etc… </li></ul>各種の技術満載です そのうち話せるかも…
  32. 32. 最後に MVC – M なんで ConView? = VC = Controller + View ≒ ConView = こんぶ
  33. 33. ConView Q & A

×