Project Zero,背景と概要 小出 理史(日本IBMシステムズ・エンジニアリング) 須江 信洋(日本IBM) 1 ご注意 この資料に含まれる情報は可能な限り正確を期しておりますが、日本アイ・ビー・エム株式会社及び日本アイ・ビー・エム システム ズ・エンジニアリング株式会社の正式なレビューを受けておらず、当資料に記載された内容に関して日本アイ・ビー・エム株式会社及び 日本アイ・ビー・エム システムズ・エンジニアリング株式会社は何ら保証するものではありません。 従って、この情報の利用またはこれらの技法の実施はひとえに使用者の責任において為されるものであり、資料の内容によって受けたい かなる被害に関しても一切の保証をするものではありません。 当資料をコピー等で複製することは、日本アイ・ビー・エム株式会社及び日本アイ・ビー・エム システムズ・エンジニアリング株式会 社および執筆者の承諾なしではできません。また、当資料に記載された製品名または会社名はそれぞれの各社の商標または登録商標です。 2 アジェンダ 1. 2. 3. 4. Project Zeroの背景 RESTとWebサービス スクリプト言語とWebアプリケーション Project Zero First Look 3 1. Project Zeroの背景 2007年のWebシステム開発 4 現代のWebシステムの特徴 ビジネスの要請:大規模化、開発期間/更新間隔の短期化 大規模 かつ 短期開発 かつ 頻繁な更新 「大規模なので、開発期間が欲しい・・」 「大規模なので、長く使いたい・・」 開発者には悪夢?だが・・ もう、「あのサイトは、例外です」では、済まない・・ 可能にしている、「何か」がある 数:「大規模」を可能にする、何か 質:「短期開発/頻繁な更新」を可能にする、何か 相互に矛盾しない、何か 5 × × 技術背景(1): 大規模、短期開発/更新の必須条件 ハードウェア 価格性能比向上、一定の信頼性維持 OS/ミドルウェア 提供する機能の信頼性向上 分散システム設計手法 運用開始後の構成変更に対する対応性向上 開発方法論 短期開発における信頼性向上 6 技術背景(2): 必須条件の実現方針、付加価値 OS/ミドルウェア:信頼性 機能を絞り込んで信頼性を確保、極端な低価格も実現 OSS的 商用的 対価を得て、多機能と信頼性を両立 分散システム設計手法:運用開始後の柔軟性 連携するコンポーネントを、容易に追加/変更可能とする OSS的 コンポーネントの多機能化を容易にする 商用的 開発方法論:時間をかけずに信頼性向上 ソース 実行/テストの時間短縮 OSS的 商用的 モデル ソースの時間短縮 数 質? 質 数? 7 注:OSS的/商用的は象徴的な表現。明確な線引きではない 「OSS的」の良さを学ぶ:Project Zero 開発方法論:ソース実行/テストの短縮, .. スクリプト言語、設定ファイル削減, … 分散システム設計手法:コンポーネント連携の容易な変更/追加 REST, … OS/ミドルウェア:絞り込んだ機能、使い勝手向上 REST+スクリプト言語を想定した、信頼性の高い実行環境 Javaで記述された、Web(CGIモデル)+αのフレームワーク OS/ミドルウェア:極端な価格低下 学べる/学べない場合、存在価値の問題・・ 模索中 8 “Reliable”, ”Simple”, ”Rapid” 人間は間違う。ソフトウェア/ハードウェアも、誤動作の可能性を含む。 誰かが/いつか/どこかで、信頼性確保に注力する 世の中は複雑。論理演算は単純。 誰かが/いつか/どこかで、複雑さの吸収に注力する 実装には時間が必要。既存実装の利用方法習得にも時間が必要。 誰かが/いつか/どこかで、時間をつぎ込む だれが/いつ/どこで、 どの程度の割合で、行う事が適しているのか? 複雑さの吸収 信頼性確保 開発時間/学習時間の提供 Zero complexity. Zero overhead. Zero obstacles. 9 “Reliable”, ”Simple”, “Rapid”: REST + Script 信頼性:絞り込まれた指針に基づく、世界中の経験が事前担保 複雑性:絞り込まれた指針に基づき、システム設計者が個別吸収 URI設計、HTTP GET/POST,… Project Zero : REST API, 規約, 第一回 第三回 迅速性:言語の動的特性に基づき、アプリケーション実装者が個別確保 Apache, PostgreSQL, .. Project Zero : Java Ruby, Python, Perl, PHP, Javascript, … Project Zero : Groovy, PHP 第二回 複雑性の吸収/迅速性の確保:急速に経験蓄積中 ATOM Pub, Ruby on Rails.. Project Zero 個別 事前+個別 第四回 10 “Reliable”, ”Simple”, “Rapid”: 他のアプローチ JavaEE 信頼性:ベンダーの技術力が事前担保 複雑性:JCP参加者が、包括的な規格の策定で事前吸収 迅速性:ライブラリ実装者/アプリケーション実装者が事前確保(学習) 信頼性:OSSが進展中(事前担保主体の変化) 複雑性/迅速性:Ease of Developmentが進行中(対処時期の変化) JavaSE + DI +ORM, WS-*, .NET, COBOL + CICS,… それぞれに、それぞれのバランス 適材適所?・・量産効果? しっかりとした足場を持っているものは? 適用エリアが広いものは? 現在、勢いがあるものは? 技術者/企業にとって、選択の余地は? ・・・何十年も、変わらないテーマ? 11 2. RESTとWebサービス 2-1. コンピュータ、ネットワークから離れた “REpresentational State Transfer” 12 RESTとは? 詳しく/正確には、Roy T Fieldingの博士論文を参照(参考文献1) Fielding, Roy Thomas. Architectural Styles and the Design of Network-based Software Architectures. Doctoral dissertation, University of California, Irvine, 2000. http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm 7年前は、博士論文の主要テーマだった話 以下は、解釈 「こう解釈して、今のところ困らない」 (著名な技術者間でも、まだ議論中) 13 RESTとは? ネットワーク・システム設計方針の一つ。べからず集 「システムのスケーラビリティ(と柔軟性)を減じる手法によって、 他のメリットを得る」ことを、強く制限する 「これでは、キャッシュが生きません。ダメです」 「これでは、参加者が限られます。ダメです」 べからず集を一定以上に守ると、何ができる? ”World Wide Web” (≒HTTP+URI+HTML)が、できた べからず集:参考文献1、第5章 5.1 Deriving REST 14 ”Deriving REST” (http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm) 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 Starting with the Null Style Client-Server Stateless(スケーラビリティの主役) Cache Uniform Interface(柔軟性の主役) Layered System Code-On-Demand 15 RESTとは? Webを例としてRESTを理解する事は、難しい 例としては、しがらみが多すぎます.. ..後ほど Web以外に、適切な例はないか? ネットワークに限定しなければ、 「よく工夫されている、ありふれたシステム」 にも見える 一例として、架空の「免許センター」を分析 16 REST的な側面を持つ例: 架空免許センター 多数の申請者に、免許更新サービスを提供する 「書類交換に基づくワークフローの大量処理」の典型 免許渡し1 免許渡し2 印紙提出 印紙販売 申請書記入 カウンター c 運動 視力 写真 17 架空免許センターの特徴(1/3): 多数の申請者に免許更新サービスを提供する、ノウハウ 架空免許センター: URI,Hyperlink,Form,.. 特定処理のみを担当する窓口が多数用意され、 内部を申請者が頻繁に移動する、サイト 比較例:一つの窓口で複数の処理を行う、なら? 窓口: URI,Uniform Interface,.. 基本的な会話と書類授受のみを行う場所 比較例:申請者が自分で視力測定する窓口、なら?写真は? 申請者の移動: URI,Hyperlink,Form,.. 窓口が移動先を指示(「次は、視力検査です」) 比較例:申請者が事前に手順書を熟読して把握する、なら? 18 *黄色は、関連するREST又はWebの用語 架空免許センターの特徴(2/3): 多数の申請者に免許更新サービスを提供する、ノウハウ Hypermedia, self-descriptive message,.. 書類 文字/写真/印紙等を含むもの、一つだけを使用(+旧免許) 比較例:窓口ごとに別の書類を用い、申請者に戻さない (Stateless Server) 書類の管理 申請者が保持する 比較例:書類を窓口で預かる 次の窓口に事前に回す 預かった書類に基づき、次の窓口を申請者専用として新規に開く 進捗把握 Stateless Server,URI,hyperlink,Form,.. 申請者が把握する 書類を受け取った時点で、窓口も(必要なら)判断可能 比較例:窓口間で連携をとり、窓口で進捗を常時把握する 19 *黄色は、関連するREST又はWebの用語 架空免許センターの特徴(3/3): 多数の申請者に免許更新サービスを提供する、ノウハウ 最終的に伝達する情報 申請者の状態を(一部)表現した、申請書 視力、体力、写真、現在の免許、・・ 架空免許センターの状態を(一部)表現した免許証 免許条件、有効期間、点数・・ REpresentational State Transfer 申請者の運転能力に関する状態が、 架空免許センターに転送され、架空免 許センターの状態の一部となる 滑空免許センターで設定/保管されて いる状態が申請者に転送され、申請 者の状態の一部となる 20 *黄色は、関連するREST又はWebの用語 架空免許センターの特徴+ネットワーク(1/2) 免許センター的なシステムでは、コンピュータ・ネットワークによって 集客範囲が、劇的に広がる Web “1.0” 世界中の申請者にサービスを提供 処理能力が、劇的に向上する Web “1.0” 窓口の動的追加が容易 申請者専用の免許配布窓口を開き、案内 センターの壁が、低くなる Web “2.0”:Mash up 写真は他のサービスから取得 視力測定サービスを、免許から独立して世界に提供 「・・・センター」の動的構成が、容易になる Web “2.0”: 免許、旅行、会計、・・・ Situational Application 21 架空免許センターの特徴+ネットワーク(2/2) 免許センター的なシステムは、コンピュータ・ネットワークによっ て、壁の存在を前提にできなくなる 窓口間の共通認識が、なくなる 認可, ユーザー登録の方法 取り消し処理 ・・・ 壁の存在を、無意識に前提としていないか? トラブル発生時など 議論、実験中 WS-*, Grid, REST, ATOM/WADL,.. 窓口が知っておくべき事前合意事項を、大幅に増やす? これ以上の事前合意は、あてにしないで作りこむ? 少しだけ、追加する? 22 架空免許センターは、“Reliable, Simple, Rapid”か? REST+Scriptとの比較 信頼性:絞り込まれた指針に基づく、世界中の経験が事前担保 URI設計、HTTP GET/POST,… Project Zero : REST API, 規約, ××センターの設計(窓口の配置,..) 迅速性:言語の動的特性に基づき、アプリケーション実装者が個別確保 窓口の基礎(会話、読み書き,..) 複雑性:絞り込まれた指針に基づき、システム設計者が個別吸収 Apache, PostgreSQL, .. Project Zero : Java Ruby, Python, Perl, PHP, Javascript, … Project Zero : Groovy, PHP 窓口の詳細(会話の処理、次の指示,..) 複雑性の吸収/迅速性の確保:急速に経験蓄積中 ATOM Pub, Ruby on Rails.. Project Zero 「××センター」の雛形 個別 事前+個別 23 架空免許センターと、”Deriving REST” (http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm) 5.1.1 Starting with the Null Style 5.1.2 Client-Server 申請者-窓口 5.1.3 Stateless(スケーラビリティの主役) 申請者による進捗把握 5.1.4 Cache ・・写真撮影コーナーに、Expireしていない写真があれば・・ 5.1.5 Uniform Interface(柔軟性の主役) 「窓口」+(見ればわかる書類の授受+基本会話)+次の指示 5.1.6 Layered System 5.1.7 Code-On-Demand 24 架空免許センターとREST, まとめ ××処理を行うRESTfulなWebシステムの構築 ≒××センターの構築 窓口の特性を理解する ××センターを複数の窓口に分解する Hypermedia, content-type, status-code, Uniform Interface,.. 窓口の詳細を実装する ××センターは、ネットワークのメリットを多数享受できる Hyperlink, Form, status-code, URI, .. 窓口と利用者で授受される書類を設計する URI,.. 窓口の配置(動的開設)、及び利用者の動線を設計する Uniform Interface, stateless-server, URI,..… 注意事項も、ある ・・コンピュータ、ネットワークの話へ 25 2. RESTとWebサービス 2-2. コンピュータ、ネットワークにおけるREST 26 分散システム, REST, HTTP, 2007年のWeb(サービス) 論点の整理 エリア2 分散システム RESTに基づくシステム 免許センター RESTに基づかないシステム ホテルのフロント,行きつけの店.. 基本会話 窓口(名) 申請書類 HTTP + URI + Hypermedia PUT link GET 現実のWeb(サービス) POST(の使いすぎ) SOAP/WSDL/WS-* Status codes Content negotiation Header fields エリア3 激論 (X)HTML Form RPC Session State (Server side) Cookie(の典型的な使用法) DELETE エリア1 27 補足:HTTP Method, Status code, Header: Uniform Interfaceの詳細 HTTP/1.1: Methods (*2) 9.1 Safe and Idempotent Methods 9.2 OPTIONS 9.3 GET 9.4 HEAD 9.5 POST 9.6 PUT 9.7 DELETE 9.8 TRACE 9.9 CONNECT HTTP/1.1: Header Fieldsの一部(*4) HTTP/1.1: Status Codes (*3) 10.1 10.2 10.3 10.4 10.5 Informational 1xx Successful 2xx Redirection 3xx Client Error 4xx Server Error 5xx 14.1 Accept 14.2 Accept-Charset 14.8 Authorization 14.9 Cache-Control 14.17 Content-Type 14.19 ETag 14.21 Expires 14.25 If-Modified-Since 14.30 Location 14.36 Referer 14.43 User-Agent 14.47 WWW-Authenticate Method + Header + Representation クライアント サーバー (URI) Status code + Header + Representation 28 part of Hypertext Transfer Protocol -- HTTP/1.1 RFC 2616 Fielding, et al. RESTとWebサービス「論」、個人的見解 エリア1:広く活用されている”REST”. 「Webで、便利になった」 エリア2:活用がそれほど進んでいない”REST”. 「Webは、もっと使える」 象徴:IE/FireFox + Apache / IIS + … さらなる活用も、活発に議論されている 象徴:ATOM Pub。 見直され/注目され始めている 分散システム RESTに基づくシステム エリア3・・・激論 3 現実のWeb(サービス) 激論 3-2.今後の見通し 1 便利になる?/混乱する? RESTに基づかない システム HTTP + URI + Hypermedia 3-1.これまでの功罪 便利になった?/役に立っていない? 効果を限定的にした? 2 以上を踏まえて・・世界中で議論中 実証実験へ エリア1で現在(一般には)カバーされていない領域まで、Webで解決するには? エリア1の発展 + エリア2? エリア3? ・・両方?そもそも、Webで解決するメリットは?… 29 エリア3:現実のWeb(サービス)、非REST的 側面に関する「激論」,個人的分析 肯定側 : 有用である + 仕方ない ( + 無意識) Message Exchange Patternは、様々だ アプリケーションの状態管理を全部クライアントで行うのは大変だ 「読めばわかるメッセージ」「メタデータはURIに」では、不足 世の中、HTTPしか通してくれない HTTPの資産を利用しないのは、現実的ではない 気づいたら、REST的でないシステムになっていた …Webの発展/補完 否定側 : “Web”にとって、マイナスである ブックマークできないページの氾濫 SOAP/WSDL/WS-*の複雑さ …Webの乱用 30 補足:激論エリアに関するRoy T Fieldingの発言等 「そんなつもりで、作ってない」? Chapter 6, Experience and Evaluation (*1) 6.3.4.2 Cookies 6.5.2 HTTP is not RPC 6.5.3 HTTP is not a Transport Protocol W3C Technical Architecture Group のMLより(*5) ..Cookie interaction fails to match REST's model of application state,.. The only reason SOAP remains in the W3C for standardization is … If this thing is going to be called Web Services, then I insist that it actually have something to do with the Web. .. SOAP/WSDL/WS-*は、一旦”Web”と切り離して、後ほど議論 RPCとして始まり、HTTPをTransport Protocolとして使い、サーバー側での application state管理も含む技術体系 これらは全て、SOAP/WSDL/WS-*の世界でも、是非が議論されている 31 分散システムのスケーラビリティと、 エリア1~3 Wiki 一般的なWeb Mobile Multimedia Web 2.0 サーバー主導 クライアント主導 少量単位・複雑データ 大量単位・単純データ 分散システム データ集積目的 データ配布目的 複雑な信頼関係 単純な信頼関係 RESTの適性 一般的な 企業システム スケーラビリティ=大 エリア(1),3 1990年代後半~: Webの企業システム適用努力、含む非REST化 スケーラビリティから: 関連技術,理解の進展 2000年代前半~:周辺技術/経験の 増強に基づくRESTful Webの発展 2000年代中盤~:ハード/ネットワーク環境 変化に適合したシステム設計手法? エリア(1),2 32 REST周辺技術の進展と 企業システムへの要請変化 双方に注目 スケーラビリティへ: システムへの要請変化 分散システムの柔軟性と、エリア1~3 システムの使用方法詳細決定時期を 先送りし、多くの用途に対応させる クライアント アプリケーション・プロトコル アプリケーション 分散 システム (動的)リソース ミドルウェア ソフトウェア RESTの関心領域 標準規格 エリア 1,2 OS システム ハードウェア “アーキテクチャ(スタイル)”の時代? “標準”の時代 “汎用” の時代 詳細決定先送り ~2000~ ~1970 2006~ システム・プロトコル? 専用的要素 汎用的要素 用途に直結 先に製造 ソフトウェア・プロトコル? 接続要素 33 エリア3 Webのプロトコル・スタックと、エリア1~3 更新、通知、カーネル構造体(相当)・・・ WS-* エリア3(の一部) エリア 1,2 構造体、文書 WSDL これ “Content-type” (表現、略称) 画面 {変数名=値} 文書 (xhtml) x-www-form.. xml お願い あなた メッセージ 構造体 更新、通知 その json atom (rss) 他 soap 返事 HTTP /URI 文字列(実体/参照,*注) Content-type, charset, …に関与 バイト列 ビット列 TCP/IP Network byte orderに関与 Ethernet その 他 その 他 その 他 Ethernet orderに関与 34 (*注)文字列:クライアントにとって、意味のある表現 (これ/返事の表現形式は、一例) Web service, SOA, REST Web Services Architecture, W3C Working Group Note 11 February 2004(*6)より: Web serviceとは WSDL + SOAP + “Web-related standards” RESTとの関係で、Web serviceは2種類 REST-compliant Web services arbitrary Web services Messageが重要(semantics and visibility) Uniform Interfaceより、メッセージの構造 35 Web serviceとは Web Services Architecture, W3C Working Group Note 11 February 2004(*6)より: WSDL + SOAP + “Web-related standards” 1.4 What is a Web service? For the purpose of this Working Group and this architecture, and without prejudice toward other definitions, we will use the following definition: [Definition: A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machineprocessable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.] 36 SOAとWeb, REST Web Services Architecture, W3C Working Group Note 11 February 2004(*6)より: REST-compliant Web services と、arbitrary Web services 3 Stakeholder's Perspectives 3.1 Service Oriented Architecture 3.1.3 Relationship to the World Wide Web and REST Architectures The World Wide Web operates as a networked information system that imposes several constraints:.. An even more constrained architectural style for reliable Web applications known as Representation State Transfer (REST) has been proposed by Roy Fielding and … The REST Web is the subset of the WWW 分散システム 2 (based on HTTP) in which … RESTに基づく RESTに基づかない HTTP + URI + Hypermedia 3 現実のWeb(サービス) 激論 1 …… We can identify two major classes of Web services: REST-compliant Web services, in which the primary purpose of the service is to manipulate XML representations of Web resources using a uniform set of "stateless" operations; and arbitrary Web services, in which the service may expose an arbitrary set of operations. 37 Message semantics and visibility Web Services Architecture, W3C Working Group Note 11 February 2004(*6)より: Uniform Interfaceより、メッセージの構造 3.5 Web Service Semantics 3.5.1 Message semantics and visibility …The emphasis on messages, rather than on the actions that are caused by messages, means that SOAs have good visibility: …This, in turn, means that intermediaries, such as firewalls, are in a better situation for performing their functions…. In REST-compliant SOAs, additional visibility comes from the uniform interface semantics, essentially those of the HTTP protocol: an intermediary can inspect…. .. and firewalls, proxies, caches, etc. are almost universal today. Visibility, however, goes beyond firewalls. In this architecture, instead of emphasising a REST-style uniform interface, we emphasize messages' structure in terms of envelopes, headers and bodies. We enhance visibility architecturally by fostering agreements on particular forms of headers. For example, by having well-known standards that describe the form and interpretation of authentication tokens in headers, we can simultaneously reduce the cost of performing authentication and increase the overall visiblity of the message's semantics: if the authentication aspect of a message can be specified in a standard way then it is easier for a larger number of interested parties to process the message. Furthermore, increased visibility can reduce the cost of entry into a marketplace. 38 2007年の、SOAP/WSDL/WS-*(1/2): “REST-compliant Web services”的方向 基礎部分に、RESTと矛盾しない方向への変化が見られる SOAP 1.2 + WSDL 2.0 (+ WS-Addressing) 脱RPC, GETの活用、HTTP Binding, … “Web”のメリットも享受できる体系へ 上位規格で、REST的な発想を感じるものも多い (WS-Addressing) WS-Transfer, WS-Resource, WS-ResourceTransfer, .. SOAP/WSDLの著名技術者による、SOAP/WSDLを使わないエ リアでの活動が、目立つようになった 39 2007年の、SOAP/WSDL/WS-*(2/2): “arbitrary Web services”的方向 「超広域分散コンピューティングは、REST以外で成立し得ない」か? 「非広域分散で一般的な手法を、広域分散環境でも、インフラに任せて実現 できないか?」 UniformではないInterface Client-Server以外 Application Stateをサーバーで管理 ・・・ “Web”との比較に耐えるレベルで「成立させた」と言える例は、把握していない Transaction, Reliable Messaging, .. 「SOAP/WSDLを使用しない広域分散コンピューティング」に、先行 非広域分散でも先鋭的な手法を、広域分散で手軽に実現できないか(始め から、広域分散を考慮に入れて構築できないか)? Open Grid Services Architecture WS-*の集合 策定作業実施中 40 3. スクリプト言語とWebアプリケーション 今、なぜ、#! ? 41 「スクリプト言語」とは? “#!” , 明示的なコンパイルが不要な言語, … Shell, Ruby, Python, Perl, PHP, Groovy, JavaScript,.. 職業としては(なぜか)日陰の言語から、主流の一翼へ なぜ、「職業としては日陰の言語」だった? もともとメリットは多く、幅広く使われていた 重要な部分に適用するには、欠点が許容範囲を超える と見なされることが多かったと想像 現在では、重要な部分まで”Web”化が進みつつある “2007年”,”Webシステム”における、スクリプト言語の欠点とは? 42 スクリプト言語、想定される(た)欠点の例: 基本的な言語仕様として、不足 変数スコープ、データ構造、制御構造、参照、・・ 実行速度が遅い 実行時に顕在化するエラーが多い 事前の型チェックが弱い(ない) 読みやすい/にくい ソースの差が、大きい コードと設定の区別が不明瞭 コードを隠しにくい 実行結果に責任を持つ機関がない 開発の継続性に責任を持つ機関もない ・・・ 大規模開発/実システムには「耐えられない」 小規模/プロトタイピングでは、以前から欠点が顕在化しにくかった。 “2007年”、”Web”なら? 43 スクリプト言語、想定される(た) 欠点の例: ”2007年””Web”では・・ 解決/軽減/メリットへの転化・・ 基本的な言語仕様として、不足 (話題にもならない) 実行速度が遅い ボトルネックになる率が低下 “2007年”のCPU, I/Oで、“Web” 実行時に顕在化するエラーが多い 開発方法論が進化、一般化 “2007年”の開発/テスト環境 読みやすい/にくい ソースの差 (質問) コードと設定の区別が不明瞭 むしろ流行 コードを隠しにくい むしろ流行 + 納品物の変化? 2007年、”Web”… Software As A Service? 責任を持つ機関がない (質問) 大規模開発/実システムには「耐えられない」 事例での言及が増加 44 「読みやすい/にくい ソースの差が、大きい」でしょうか? 「スクリプト言語」とまとめることは、おそらく不適当 同じ言語でも、時代によって、おそらく異なる 職業としての慣れ、学生時代の慣れ、開発環境の差異・・ どう感じるでしょうか? “1990年代後半”, “Web”, “Perl(4)”なら、その通りでしたが・・ “2007年”, “Web”, “Ruby (on Rails)/Python/Perl”なら? “2007年”, “Web”, “PHP/Groovy”では? + Javaとの連携、では? 45 責任を持つ機関がない、でしょうか? もしないのであれば、その影響は? 1. 企業が開発/提供する方が安心? 2. 開発に深く関与する企業の存在が重要? Groovy (JSR241) (Python Enhancement Proposals, RubySpec Wiki, ..) (参考:gcc) 4. 1,2,3が無くても、広く活用されていることが重要? ( いずれ 3,2 へ?) PHP, (J, Iron)Ruby, (Iron)Python , .. 3. 規格の明示が重要? 商用UNIXに含まれるShell, JScript, … Perl、(少し前までの)Python/Ruby 「サポートする機関」は、存在する場合が多い 5. 言語開発者の顔が見えることが重要? 多くの著名スクリプト言語 6. オープンソースであれば、自分で確認/修正/維持可能? どうお考えでしょうか? 46 スクリプト言語の長所 テキスト処理の簡便さ/強力さ 動的型付け コンパイル不要 Web情報の豊富さ (言語仕様の充実) … 事前準備が少ない状態での、開発速度向上 “2007年”,”Web”においては、大きなメリット 47 スクリプト言語 + 他の言語 + Web 方向として、新しいものではない “Web”を実装している言語と、スクリプトの連携 Unix (Pipe + Shell + C) Perl + C +(Apache + mod_perl) Visual Basic + Visual C++, … 1990’s : Perl + C (httpd) (2000 : JSP + Java (Servlet)) 2010 : JRuby/Jython/Groovy + Java(Servlet) ? … 今作っているものは、アプリケーション?インフラの拡張? アプリケーションなら、人間との親和性が、より重要 インフラの拡張なら、コンピュータとの親和性が、より重要 「スクリプト」 メモリー、バス、ストレージ・・ …差が不明瞭/両方であることも、多いのではないでしょうか? 48 [再掲]“Reliable”, ”Simple”, “Rapid”: REST + Script 信頼性:絞り込まれた指針に基づく、世界中の経験が事前担保 複雑性:絞り込まれた指針に基づき、システム設計者が個別吸収 URI設計、HTTP GET/POST,… Project Zero : REST API, 規約, 第一回 第三回 迅速性:言語の動的特性に基づき、アプリケーション実装者が個別確保 Apache, PostgreSQL, .. Project Zero : Java Ruby, Python, Perl, PHP, Javascript, … Project Zero : Groovy, PHP 第二回 複雑性の吸収/迅速性の確保:急速に経験蓄積中 ATOM Pub, Ruby on Rails.. Project Zero 個別 事前+個別 第四回 49 4. Project Zero First Look 4.1 Project Zero 概要 50 Project Zeroとは? 「シンプル」かつ「パワフル」な、 Webアプリケーションプラットフォーム 過去のしがらみからの脱却 ≠JavaEE、≠コンテナモデル スクリプト言語(Groovy/PHP)で開発 Web2.0的用途に特化 アーキテクチャをゼロから再構築 オープンな環境化での商用製品開発 Community Driven Commercial Development 51 Zeroの対象領域: Situational Applications アプリケーションの特性 Enterprise Application Long-tail 52 Mission Critical Built to Last 迅速な投入が重要 Tomcat,LAMP,RoRが使 われることが多い Web-oriented Architecture スクリプティング中心 ファイル単位のデプロイ セキュリティとスケーラビリ ティにWebの特性を活用 Tomcat LAMP Situational Applications Applications Zeroのtarget Project Zeroの経緯 2006/7 IBM社内のインキュベーションプロ ジェクトとしてスタート 2007/6 プロジェクト公開 http://www.projectzero.org/ 2007/8 ソースコード公開 2007/9/14 Milestone1リリース 53 CDCD(Community Driven Commercial Development) プロダクト開発におけるIBMの新しい試みの一つ 従来のスタイルとOSS的スタイルのレバレッジ オープンな開発プロセス(ソースコード、情報、・・・) プロダクトに対する保証(Fix提供、サポート、・・・) CDCDは ”California Pizza Kitchen”(*注)だ。お客様は、IBMが自分の欲しいものをCookしてく れるかいつでも見る事ができるし、自分の好みと違えば注文をつけることができる。クローズドな環境 で作る製品よりも、よりお客様のニーズに見合った商品を提供できる、新しい試みだ。 - Message from Jerry Cuomo (*注)USでチェーン展開している人気のピザ屋で、ガラス張りのキッチンの中で、注文してからピザをcookしてくれる We want to build stronger ties to our customers and users, so we're providing a panoramic view of the development process for Project Zero. With regular milestones throughout the development of a release, users get the opportunity to see what’s coming, provide feedback, and help set priorities. - From “Project Zero FAQ” 54 Project Zero Community Site •誰でも利用可能(一部コンテンツはユーザー登録が必要) •プロジェクトの全情報はここでやり取りされている ディスカッション ニュース ドキュメント ダウンロード デモ/チュートリアル JIRA 開発者Blog 55 Project Zeroの特徴 開発: シンプルなプログラミングモデル 規約によるシンプル化 (Convention over Configuration) スクリプティング(PHP,Groovy) ⇒ Javaはシステム言語 RESTfulスタイル 高機能な拡張モジュール 例)RSS/ATOMサポート アセンブリ: サービス組み立てをシンプルに FlowとFilterによる構造化 REST/RSS/ATOMマッシュアップ用のビジュアルエディタとAPI 実行: コンパクトな”New Reality” Runtime アプリケーション毎にコンパクトなJavaVMを起動 数百のアプリケーションを実行可能 ⇒スケーラビリティ、リスク分散 スレッドモデルからプロセスモデルへの回帰 56 開発 Eclipse plug-inとCLIを提供 モジュール化 コアは小さく、拡張機能はextension moduleで 依存関係を自動的に解決 シンプルな規約:コードと設定を削減 RESTful: URIによるリソースCRUD スクリプトとテンプレート PHP, Groovy 全てのステートはメモリ(Global Context)に記録 ステートレス、イベントドリブンアーキテクチャ 57 アーキテクチャ概要 employees.groovy GET /resources/employees Event Engine Client (Event) List onList() Resource Resolver (Data) Global Context (Event) Render (Data) View Engine JSON / XML / HTML onList(){} onRetrieve{} onCreate{} ・・・ template.gt render() 58 規約: ディレクトリ構造 /app /resources リソースハンドラー <resource名.groovy> /views Viewレンダラー <.gt or .groovy> /errors Errorハンドラー /config ivy.xml 依存関係の管理 zero.config 各種設定 /java Javaソース /public ドキュメントルート http://www.projectzero.org/wiki/bin/view/Documentation/CoreDevelopersGuideApplicationLayout 59 規約: RESTful Resources File: /app/resources/people.groovy HTTP URI Method Event data GET /resources/people onList() GET /resources/people/1 onRetrieve() POST /resources/people onCreate() PUT /resources/people/1 onUpdate() request.params.pe opleId[0] == 1 DELETE /resources/people/1 onDelete() request.params.pe opleId[0] == 1 request.params.pe opleId[0] == 1 http://www.projectzero.org/wiki/bin/view/Documentation/CoreDevelopersGuideREST 60 依存関係管理 依存関係管理用のGUIを提供(Eclipse plug-in) Ivyによる依存関係の自動的解決 必要なコンポーネントを自動的にダウンロード ローカルにキャッシュを保持 mavenリポジトリも利用可能 61 アセンブリ RESTサービスを接続して新しいサービスを作成 コードレス・マッシュアップ 迅速な開発 FeedやRESTfulサービスを組合せ可能 パイプライン中でソートやフィルタ処理などが可能 ルーティング、ロギング、データ変換 テンプレートを提供 拡張可能 Flow Editor(GUI)を提供 Webアプリケーション 62 Flow Editor デフォルト アクティビティ カスタム アクティビティ メディエーション 63 Mediation 簡易ESB的な機能を提供 ルーティング、ロギング、プロトコル変換 拡張可能、組合せ可能 Mediation Step Request Request Req Req Yes Yes Res Failover Response Response No No 64 Retry Res External Resourse Zero Application Step 実行 New Reality Runtime (NRR) スクリプト言語的な動作のJavaVM(IBM J9の派生版) PHPとJavaをサポート 省資源 lazy activationをサポート クリーン アプリケーション=サーバー アプリケーションは互いに独立でセキュア 定期的な再起動でリソースリークなどの問題を削減 軽快 数百のアプリケーションを実行可能 高速に起動 ⇒ 開発サイクルを短縮 QoSと運用管理の外部化 Zeroのランタイムはシングルサーバー クラスタリング(ワークロード管理、データ共有)は別製品で 65 4. Project Zero First Look 4.2 インストール 66 前提条件 Windows or Linux Java SE Development Kit 5.0 Eclipse SDK 3.2.2 or later コマンドライン版もあり 詳細情報 http://www.projectzero.org/wiki/bin/view/Documentation /CoreGettingStarted 67 インストール手順(1) Eclipse Zeroプラグインのアップデートサイトを追加 Help -> Software Updates -> Fiand and Install … 「Search for new features to install」を選択し、Next 「New Remote Site …」をクリック 以下の通り入力する Name : Project Zero Update Site(任意) URL : http://www.projectzero.org/update/zero.eclipse.latest Finishをクリック 68 インストール手順(2) Zeroプラグインのインス トール Help -> Software Updates -> Find and Install … 「Search for new features to install」を 選択し、Next 「Project Zero Update Siteにチェックを入れ、 Finish 69 インストール手順(3) Zeroプラグインのインス トール プラグインにチェックを入 れ、Nextをクリック 70 インストール手順(4) Zeroプラグインのインス トール ライセンスアグリーメント に同意し、Next Finishをクリック Install Allをクリック Eclipseの再起動を要求 されたらYesをクリック 71 アプリケーション作成と実行 File -> New -> Project .... Zero -> Project Zero Applicationを選択し、Nextをクリック アプリケーション名を入力し、Finishをクリック プロジェクト(Zeroアイコン付き)が作成される プロジェクトを右クリック Run As -> Project Zero Application コンソールに”running on port 8080“というメッセージが表示さ れれば起動完了 ブラウザのURLに http://localhost:8080/ を入力すると、アプ リケーションのデフォルトページが表示される(次ページ) アプリケーション停止はコンソールビューの停止ボタン で 72 動作確認 アプリケーションの デフォルトページ⇒ 73 設定情報の確認 リクエストの詳細情報を 参照可能 http://localhost:8080/ zero/webtools/snoop.g t このように表示される⇒ 74 サンプルの実行 「Project Zero Examples」プラグインをインストールしておく File -> New -> Example .... Zero Examples -> Project Zero Example Projects を選択 し、Nextをクリック アプリケーションを選択し、Finishをクリック プロジェクト(Zeroアイコン付き)が作成される 実行方法はプロジェクト内のREADME.txtなどを参照 75 参考文献 1. Fielding, Roy Thomas. Architectural Styles and the Design of Network-based Software Architectures. Doctoral dissertation, University of California, Irvine, 2000. http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm 2. HTTP/1.1:Method Definitions, part of Hypertext Transfer Protocol -- HTTP/1.1 RFC2616 Fielding, et al. http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html 3. HTTP/1.1:Status Code Definitions, part of Hypertext Transfer Protocol -- HTTP/1.1 RFC2616 Fielding, et al. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 4. HTTP/1.1:Header Field Definitions, part of Hypertext Transfer Protocol -- HTTP/1.1 RFC2616 Fielding, et al. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 5. Re: FW: draft findings on Unsafe Methods (whenToUseGet-7) http://lists.w3.org/Archives/Public/wwwtag/2002Apr/0235.html 76 参考文献 6. Web Services Architecture, W3C Working Group Note 11 February 2004, http://www.w3.org/TR/2004/NOTE-ws-arch-20040211/ Copyright © 2004 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. Status of this Document This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/. This is a public Working Group Note produced by the W3C Web Services Architecture Working Group, which is part of the W3C Web Services Activity. This publication as a Working Group Note coincides with the end of the Working Group's charter period, and represents the culmination of the group's work. Discussion of this document is invited on the public mailing list [email protected] (public archives). A list of remaining open issues is included in 4 Conclusions. Patent disclosures relevant to this specification may be found on the Working Group's patent disclosure page. Publication as a Working Group Note does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress. Other documents may supersede this document. 77
© Copyright 2024 ExpyDoc