Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
สารบัญ บทที่ 1 สถาปตยกรรมบนฐานของบริการ (Service Oriented Architecture)……………………………………2 1.1 อะไรคือ SOA…………………………………………………………………………………………2 1.2 องคประกอบพื้นฐานของ SOA………………………………………………………………….....…2 1.3 Web services คือเทคโนโลยีที่เกิดจากแนวคิด SOA…………………………………………...…..…3 บทที่ 2 สถาปตยกรรมแบบเปดของ Grid service….……………………………………………………………..6 2.1 Grid service บนแนวคิดของ OGSA….…………………………………………………………..…6 2.2 Web service ตนตระกูลของ Grid service….………………………………………………………..7 2.3 Enter Grid Services: กาวเขาสูยุคของ Grid Service………………………………………………12 บทที่ 3 กลไกสําคัญของ Grid service……………………………………………………………………………16 3.1 กลไกสรางและทําลาย Grid service (Grid service Factory) ……………………………………….16 3.2 กลไกกําหนดขอมูลใหกับ Grid service (Service Data Elements)………………………………….17 3.3 กลไกจัดการวงจรชีวิต (Life Cycle Management)………………………………………………….17 3.4 กลไกการแจงขาว (Notification)…………………………………………………………………….18 บทที่ 4 การพัฒนา Grid service…………………………………………………………………………………20 4.1 ขั้นตอนพื้นฐานสําหรับเขียนโปรแกรมใหเปน Grid service………………………………………...20 4.2 การ deploy เอา Grid service ไปยัง container………………………………………………………29 4.3 รัน Grid service……………………….…………………………………………………………….32 Appendix………………………………………………………………………………………………………..35
1
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 1 สถาปตยกรรมบนฐานของบริการ (Service Oriented Architecture) ในบทนี้จะกลาวถึง Service Oriented Architecture (SOA) ซึ่งเปนเทคโนโลยีที่ Grid Service และ Web Service ใชเปนพื้นฐานในการพัฒนา โดยจะขอกลาวถึง Web Service กอน องคประกอบที่สําคัญของ Web Service ประกอบไปดวย Web Services Description Language (WSDL) ใชสําหรับอธิบายรายละเอียดและการใชงานของ Web Service, Simple Object Access Protocol (SOAP) เปนโพล โตคอลมาตรฐานสําหรับการแลกเปลี่ยนขอความระหวางการใชงาน Web Service และ Universal Description Discovery and Integration (UDDI) เปนแหลงบริการจัดเก็บที่อยูและคนหา Web Service 1.1 อะไรคือ SOA ? Service Oriented Architecture (SOA) คือ สถาปตยกรรมของแอปพิเคชั่นที่ประกอบดวย independent, distributed และ co-operating ซึ่งเรียกวา service โดย services สามารถกระจายเขาไปภายในหรือภายนอกของ องคกรและอาณาเขตที่ปลอดภัย นอกจากนี้สวนประกอบของ service สามารถอยูบนแพลตฟอรมทึ่ตางกันและ สามารถพัฒนาดวยภาษาโปรแกรมที่แตกตางกันได 1.2 องคประกอบพื้นฐานของ SOA สวนประกอบพื้นฐานของ SOA คือ elements และ operation โดยมีรายละเอียดดังนี้ 1.2.1 Element ที่สําคัญประกอบดวย Service Provider, Service Requestor และ Service Registry ซึ่งแสดงในรูป 1.1 - Service Provider เปนผูใหบริการ มีหนาที่ในการเปดบริการเพื่อรองรับการขอใชบริการจาก Requestor ที่เรียกเขามาขอใช โดยจะสราง service description และนําไปลงทะเบียนเก็บไวที่ Service Registry - Service Requestor เปนใครก็ตามที่ตองการเรียกใชบริการจาก Service Provider ซึ่งสามารถคนหา บริการที่ตองการไดจาก UDDI registry หรือ Service Registry หรือติดตอจาก Provider โดยตรง - Service Registry ทําหนาที่เปนตัวกลางในการจัดเก็บ service description ที่ลงทะเบียนไวโดย Service Provider และจัดสง service description ใหกับ Service Requestor เมื่อมีการมาคนหา service description ที่ ตองการ
2
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
รูปที่ 1.1 Elements of the Service Oriented Architecture (SOA) 1.2.2 Operation จะกําหนดการติดตอระหวาง elements ซึ่งประกอบดวย Publish, Find และ Bind ที่แสดงในรูป 1.1 - Publish operation คือการาติดตอกันระหวาง Service Provider และ Service Registry โดย Service Provider จะลงทะเบียนที่ service interfaces ซึ่ง Publish operation จะจัดเตรียมใหที่ Service Registry - Find operation คือการติดตอกันระหวาง Service Requestor และ Service Registry โดย Service Requestor ใช Find operation ไปดึงเอารายการที่ตองการของ Service Provider ซึ่งประกาศไวใน Service Registry - Bind operation คือการติดตอกันระหวาง Service Requestor และ Service Provider มันจะให Service Requestor เชื่อมตอกับ Service Provider กอนที่จะรองขอ operation โดยเฉพาะ Service Requestor สามารถ generate client-side proxy สําหรับ service ไดโดยมี Service Provider เปนตัวจัดเตรียมให (bind สามารถเปนได ทั้ง dynamic หรือ static ) ในกรณีที่ bind เปนdynamic ทําให Service Requestor สามารถ generate client-side proxy บน sevice description ซึ่งไดจาก Service Registry ที่เวลามีการรองขอ service และในกรณีที่ bind เปน static ทำให Service Requestor สามารถ generate client-side proxy ไดระหวางที่ทําการพัฒนาแอปพิเคชั่น 1.3 Web services คือเทคโนโลยีที่เกิดจากแนวคิด SOA Web service เปนการนํา SOA มาใชเปนแนวคิดพื้นฐานเพื่อทําการพัฒนาเทคโนโลยีสําหรับ ในการ เชื่อมตอโมเดลของโปรแกรมที่สรางบนมาตรฐานอินเทอรเน็ตดวยไวยากรณภาษาของ eXtensible Markup Language (XML) สําหรับใชอธิบายรายละเอียดของขอมูลในแพลตฟอรม, ภาษา, ฮารดแวต และ ซอฟตแวร ซึ่ง ใน Web service ไมเจาะจงโพรโตคอลในการติดตอสื่อสาร ดวยเหตุนี้จึงสามารถใชโพลโตคอลตัวใดก็ไดในการ ติดตอสื่อสาร ดังนั้น HTTP หรือ JMS สามารถใชในการแลกเปลี่ยน message ได
3
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
สําหรับเปาหมายของ Grid service เปนการใชแนวคิดพื้นฐานของ Web service ใหเปนประโยชน ซึ่ง Web service Description Language (WSDL) จะอธิบายรายละเอียดและการใชงาน service ตาง ๆ การพัฒนา มาตรฐานของ SOAP โพลโตคอลสําหรับการแลกเปลี่ยน message ระหวาง service และ Universal Description Discovery and Integration (UDDI) เปนแหลงจัดเก็บที่อยูและการคนหา service ตาง ๆ ที่ลงทะเบียนไว 1.3.1 Web Service Description Language (WSDL) Web Service Description Language (WSDL) เปนภาษาที่ใชอธิบายคุณลักษณะของ Web service และ วิธีการติดตอกับ Web service โดยใชไวยากรณของภาษา XML-base ซึ่งเปนอิสระกับภาษาโปรแกรมอื่น ๆ และ พัฒนาดวยสภาพแวดลอมอะไรก็ได WSDL เปนภาษาที่อยูในความดูแลขององคการ World Wide Web Consortium (W3C) เอกสาร WSDL ประกอบดวย 3 สวน คือ Service Interface, Service Bindings, Service Implementation ซึ่งเกี่ยวของกับขอมูลของ Web service ซึ่ง service จะกําหนดโครงสรางในการติดตอสื่อสารขอมูลและการลง นามของ operation ที่จัดเตรียมโดย service ในภาษา, แพลตฟอรม และโพลโตคอลในการติดตอสื่อสาร 1.3.1.1 Service Interface มีสวนประกอบทีสําคัญคือ Types, Message, Operation และ Port Type - Types เปนการกําหนดการใช data type โดยการแลกเปลี่ยน message ระหวาง Service Requestor และ Service Provider - Messages เปนการแสดงสัญญาณระหวาง Service Requestor และ Service Provider ถา operation คือ Remote Procedure Call (RPC) มันจะสงคากลับมา ถาเปน bi-directional และกําหนดดวยสอง message (ในตัวอยางคือ) getMOTDRequest และ getMOTDResponse โดย getMOTDRequest message เปนการ สงจาก Service Requestor ไปที่ Service Provider และ Service Provider ตอบกลับโดยการสง getMOTDResponse message ไปที่ Service Requestor อีกครั้ง message สามารถมี types parts ไดหนึ่ง ตัวหรือมากกวา - Operation เปนการอธิบายการทํางานของ Web service โดย operation ของ Message Exchange Patterns (MEP) จะมีอยู 4 ประเภท คือ One-way, Request-response, Solicit-response และ Notification 1.3.1.2 Binding เปนการระบุรายละเอียดเกี่ยวกับการใชโพลโตคอลในการสงผานขอมูลระหวาง Service Requestor และ Service Provider ใน service สามารถรองรับ Binding ไดหลายตัวสําหรับให Port Type แตละ Binding เปนเสนทางในการเขาถึงที่อยู Uniform Resource Identifier (URI) ซึ่งจะประกอบดวย element ดังนี้ - Name and type เปนการระบุรายละเอียดใหกับ Port Type ในตัวอยาง binding name คือ MOTDSoapBinding และ MOTD1 port type - Style เปนการกําหนดการติดตอสื่อสารโดยใชโพลโตคอลเมื่อมีการรองขอ operation ของ port type ซึ่ง WSDL จะกําหนดรายละเอียดของ binding style ใหกับ SOAP เปนสองประเภทคือ Document style และ RPC style
4
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
รูปที่ 1.2 Relationship of WSDL elements - Transport เปนการระบุ protocol ที่ใชสําหรับการติดตอสื่อสาร - Encoding style เปนการเพิ่ม binding style ในเอกสาร WSDL จะประกอบดวยสอง encoding style คือ Encode และ Literal 1.3.1.3 Service Implementation เปนรายละเอียดในการรองขอเพื่อใชงาน Web service ซึ่งประกอบดวย Service name และ Port - Service name เปนการบอกชื่อ Web service - Port เปนเสนทางในการเขาถึง Web service 1.3.2 Simple Object Access Protocol (SOAP) SOAP จัดเปนโพรโตคอลสื่อสารที่อาศัยไวยากรณของภาษา XML และทํางานกับโพรโตคอลอื่น ๆ ได หลายชนิด เชน HTTP, SMTP, FTP, IIOP เปนตน สาเหตุที่ใชไวยากรณของ XML จึงทํางานไดในทุก แพลตฟอรม ไมขึ้นกับแพลตฟอรม ดังนั้นเราก็สามารถเรียกใชงานคอมโพเนนตขามแพลตฟอรมได ในขณะที่ RMI เปนโพรโตคอลที่ขึ้นกับแพลตฟอรม จึงไมสามารถเรียกคอมโพเนนตขามแพลตฟอรมได 1.3.3 Universal Description, Discovery and Integration (UDDI) UDDI เปนมาตรฐานที่สรางขึ้นมาเพื่อคนหาบริการ Web service สําหรับผูตองการใชงาน Web service โดย UDDI เปรียบเสมือนฐานขอมูลขนาดใหญซึ่งมีขอมูลของ Web service ที่ใหบริการอยูบน Internet
5
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 2 สถาปตยกรรมแบบเปดของGrid service บทนี้กลาวถึงพื้นฐานของGrid service และขอกําหนดสําหรับการสรางGrid service นอกจากนี้แลวเรา จะกลาถึงเฟรมเวิรคที่กอใหเกิดสถาปตยกรรมแบบเปดของGrid service หรือ Open Grid Service Architecture (OGSA) ซึ่งตั้งอยูบนรากฐานของเทคโนโลยี Web service อันเปนเทคโนโลยีที่เปนรากเหงาของ Grid service นั่นเอง 2.1 Grid service บนแนวคิดของ OGSA อยางที่ไดเกริ่นนํามาตอนตนแลววา OGSA เปนสถาปตยกรรมของ Grid service ในหัวขอตอไปนี้ เราจะ มากลาวถึงรายละเอียดของ OGSA ใหมากขึ้นวา OGSA คืออะไร และ OGSA เกี่ยวของอะไรกับ Grid service “OGSA ใหคําจํากัดความของ Grid service” OGSA ไดกําหนดสถาปตยกรรมพื้นฐานของแอพพลิเคชันแบบกริด (grid-based applications) วา โปรแกรมหรือแอพพลิเคชันที่จะนํามาทํางานบนระบบกริดนั้นควรจะเปนเชนไร และระบบกริดควรจะจัดเตรียม องคประกอบใดใหแกแอพพลิเคชันเหลานั้น โดยแกนแทของสถาปตยกรรมของ OGSA นั้นไดใหความสําคัญกับ การพัฒนาแอพพลิเคชันในรูปแบบของบริการที่เรียกวา Grid service อยางไรก็ตาม OGSA ไมไดลงรายละเอียด ทางเทคนิควาจะพัฒนา Grid service ดวยวิธีใด แตทวา OGSA ไดใหคําจํากัดความหรือความหมายของ Grid service วาคืออะไร รวมถึงความสามารถของGrid service วาตองมีและควรมีอะไรบาง รวมถึงเทคโนโลยีที่ ประกอบขึ้นมาเปนกริดเวอรซิส “OGSI กําหนดรายละเอียดสําหรับสราง Grid service” อยางที่ไดกลาวแลววา OGSA ไดใหคํานิยามหรือความหมายขอ Grid service วาคืออะไร แตรายละเอียด ทางเทคนิค หรือที่เรียกวา technical specification สําหรับการพัฒนา Grid service ไดถูกบัญญัติโดย OGSI (Open Grid Service Infrastructure) “Globus Toolkit 3 ถูกสรางขึ้นมาโดย OGSI” Globus Toolkit 3 หรือเรียกสั้นๆวา GT3 เปนเครื่องมือที่ใชงานไดจริงๆซึ่งถูกสรางโดยขอกําหนดของ OGSI (และเชนเดียวกัน GT3 ก็ถูกสรางตามหลักการพื้นฐานของ OGSA) ความแตกตางของ OGSA, OGSI และ GT3 ถึงตรงนี้คําสามคําไดผลุดขึ้นมาบนฐานของแนวความคิดในการสราง Grid service นั่นคือ OGSA, OGSI และ GT3 และทั้ง 3 สิ่งนี้ มันตางกันอยางไร? เพื่องายตอความเขาใจถึงความแตกตางของ OGSA, OGSI และ GT3 การยกตัวอยางตอไปนี้คงจะพอทําใหผูอานเขาใจความหมายและบทบาทของมันไดมากยิ่งขึ้น “เราสามารถบอกไดวา OGSA ก็เปรียบเสมือนกับพิมพเขียวที่วางสถาปตยกรรมของระบบกริดคลายกับ งานของสถาปนิกที่ออกแบบบาน สวน OGSI ก็เปรียบเสมือนแผนงานของวิศวกรที่ลงมือประกอบบาน แตในที่นี้ OGSI คือแผนงานสําหรับสราง Grid service กลาวคือ OGSA คืองานออกแบบ สวน OGSI คืองานกอสราง สวน
6
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
GT3 เปรียบเสมือนอิฐ ปูนซีเมนตและไมคาน สําหรับกอสรางบาน แตในที่นี้ GT3 ก็เสมือนเครื่องมือสําหรับสราง Grid service เพื่อใชงานจริงนั่นเอง” 2.2 Web service ตนตระกูลของ Grid service Grid service เปนแอพพลิชันแบบกริดที่ถูกนิยามไวใน OGSA นอกจากนี้แลว OGSA ยังไดกําหนดเทคโนโลยี พื้นฐานของGrid serviceไววา พื้นฐานของGrid service ก็ไดมาจากเทคโนโลยี Web service การเขาใจสถาปตยกรรมของ Web service จะนําไปสูการเขาใจพื้นฐานในการพัฒนา Grid service ได ดวย อยางไรก็ตามในรายงานเลมนี้ เราจะไมเนนรายละเอียดวาจะพัฒนา Web service นั้นตองทําอยางไร แตใน หัวขอนี้ก็จะกลาวถึงพื้นฐานของWeb service ในระดับหนึ่ง เพื่อเปนการเขาใจภาพรวมของ Web service เราจึงขอยกตัวอยางเหตุการณจําลองของระบบที่พัฒนาโดย เทคโนโลยี Web service ตัวอยางคือ ระบบสั่งซื้อสินคาออนไลน โดยสมมติวามีบริษัทแหงหนึ่งนําเขาสินคามา จากตางประเทศแตไมไดขายตรง แตทวา จะมีรานคาที่สั่งสินคาจากบริษัทและรับไปขายตรงแกลูกคาอีกทอดหนึ่ง ทุกครั้งที่รานคาจะสั่งสินคาจากบริษัท รานคาจะขอแคตตาล็อกของสินคาจากบริษัทกอนโดยใชบริการที่ชื่อ ShopService ผานทางโปรแกรมที่ทําการตอตรงไปที่ Web service ที่ชื่อ ShopService ของบริษัทนั้น โดยสามารถ แสดงภาพใหเห็นถึงการขอใชบริการ ShopService ไดจากภาพนี้
รูปที่ 2.1 ตัวอยางของการใชงาน Web service จากรูปที่ 2.1 แสดงใหเห็นวา พนักงานรานคาเปดโปรแกรมของรานคาซึ่งเปนโปรแกรมที่ทํางานบน คอมพิวเตอรฝง client ไดรองขอใชบริการเพื่อดึงแคตตาล็อกของสินคาผานทางบริการ ShopService ซึ่งทํางานอยู บนคอมพิวเตอร server ของบริษัท จากนั้นคอมพิวเตอร server ของบริษัทจะทําการสงแคตตาล็อกกลับคืนไปที่ คอมพิวเตอรฝง client การทํางานของWeb service ที่บรรยายไวในภาพนั้น ทานผูอานคงไดรูวาเปนรูปแบบการทํางานที่งาย และก็คลายคลึงกับเทคโนโลยีอื่นๆที่เคยไดเกิดขึ้นแลวในอดีต (อาทิเชน RMI, CORBA, หรือ EJB) คําถามที่ ตามมาคือ แลว Web service มีขอดีเหนือกวาเทคโนโลยีอื่นๆอยางไร
7
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
• ความเปนอิสระ (Independency) Web service มีคุณสมบัติไมยึดติดกับแพลตฟอรม (platformindependent) และไมยึดติดกับภาษา (language-independent) สาเหตุที่ทําให Web service มีคุณสมบัติ เชนนี้ก็เพราะวา Web service ไดใชมารตฐานของภาษาที่ชื่อ eXtended Markup Language (XML) นั่นเอง ซึ่งทําใหนักพัฒนาระบบมีอิสระในการเลือกใชเทคโนโลยีวาจะพัฒนาโปรแกรมบนฝง client หรือ server ดวยเทคโนโลยีใด และเทคโนโลยีในการพัฒนาบนฝง client กับ server ไมจําเปนตอง เหมือนกันก็ได เชน โปรแกรมทางฝง client อาจจะถูกพัฒนาดวย Microsoft Visual C++.NET ซึ่งทํางาน บน Microsoft Windows XP แตทวาโปรแกรมบนฝง server อาจจะถูกพัฒนาโดยภาษา Java ที่ทํางานบน Sun Solaris 9 ก็ได • ขอบเขตที่ขยายอยางกวางขวาง (Scalability) โดยสวนใหญแลว Web serviceใชโปรโตคอล HTTP สําหรับรับสงขอมูลไปมาระหวาง client กับ server และดวยความสามารถนี้ของWeb service มันทําให การเชื่อมโยงโปรแกรมตางๆจากหลากหลายองคกรบนเครือขายอินเตอรเน็ตเปนไปอยางกวางขวางมาก ยิ่งขึ้น เพราะโปรโตคอล HTTP เปนโปรโตคอลที่ไฟรวอล (Firewall) ขององคกรตางๆยอมรับ (ตางจาก โปรโตคอล RMI, CORBA และเทคโนโลยีอื่นๆที่มักจะถูกไฟรวอลสกัดกั้นไว) อยางไรก็ตาม Web service ก็ยังมีจุดออนอยู ดังนี้ • ขนาดที่ใหญเกินพอดี (High overhead) เนื่องดวย Web service เลือกใชเอกสาร XML เปนมาตรฐาน กลางของเอกสารที่รับสงไปมาระหวาง client และ server ซึ่งเอกสาร XML นับวามีขนาดที่ใหญและอาจ กระทบตอประสิทธิภาพของระบบเครือขายใหลดลงได ทั้งนี้ทั้งนั้น ก็นับวาเปนสิ่งที่ตองแลกเปลี่ยนกัน ระหวางของดีกับของเสีย ซึ่งเว็บเซอรจะนํามาซึ่งความเขากันไดของทุกที่ของระบบ (portability) แตก็ นําพาซึ่งประสิทธิภาพ (efficiency) ของระบบเครือขายที่เสื่อมถอยลงดวย • ขาดความสมบูรณแบบ (Lack of versatility) หากจะถามวาเทคโนโลยีที่สมบูรณแบบคือเทคโนโลยีใด ก็ คงตอบไดวายังไมมีในโลก (ถามีก็อาจจะยังไมเกิด หรืออาจจะตายไปแลวจนลืมไปวามันเคยมี) แตทวา ถาพูดถึงเทคโนโลยีที่มีรูปแบบการทํางานที่คลายกับ Web service คือมีการรองขอใชบริการระยะไกล (remote service invocation) ก็มีหลายเทคโนโลยีซึ่งไดจัดเตรียมความสามารถที่มากกวาที่ Web service มีอยู เพราะ Web service ไดเสนอเพียงแคกลไกการรองขอระยะไกลและการแลกเปลี่ยนเอกสารระหวาง client กับ server เทานั้น สวนความสามารถอื่นๆที่ควรจะมีกลับขาดหายไป ขอยกตัวอยางความสามารถ ที่ Web service ควรจะมี โดยเปรียบเทียบกับ เทคโนโลยี CORBA ซึ่ง CORBA ไดเสนอบริการเพิ่มเติม ไวมากมาย อาทิเชน persistency, notification, lifecycle management, transaction และอีกมากมาย แต อยางไรก็ตาม ถาทานอานตอไป ทานก็จะพบวาความสามารถเหลานี้ กลับถูกจัดเตรียมไวใหกับ Grid service ความแตกตางที่เดนชัดของ Web service กับเทคโนโลยีอื่นๆที่ใกลเคียงกับ Web service สามารถพิจารณาไดจากคุณสมบัติ Highly coupled (หรืออาจจะเรียกวา Tightly coupled ก็ได) กับ Loosely coupled โดยเทคโนโลยีอื่นๆอยาง CORBA และ EJB นั้นเปนเทคโนโลยีที่เนนการสรางระบบ การกระจายแบบ Highly coupled ก็คือ โปรแกรมทางฝง client กับ server จะมีความขึ้นตรงตอกันสูง เชน โปรแกรมทางฝง client ชื่อ X จะทํางานกับโปรแกรมทางฝง server ชื่อ Y เทานั้น เปนตน ซึ่งระบบ ที่เปนแบบ Highly coupled มักจะเหมาะกับระบบขององคกรแบบ intranet หรือใชภายในองคกร
8
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
เดียวกันมากกวา แตWeb service เปนเทคโนโลยีที่เนนการสรางระบบแบบ Loosely coupled กลาวคือ โปรแกรมทางฝง client ไมจําเปนตองรูจักบริการที่มีอยูบนฝง server มากอน รวมถึงไมจําเปนตองทราบ วิธีการรองขอWeb service กอนวาตองทําเชนไร ซึ่งWeb service จะมีวิธีการระบุถึงวิธีการรองขอ Web service โดยการอางผานไฟล XML ที่เรียกวา WSDL และรูปแบบของระบบแบบ Loosely couple นี้มัก เหมาะสมกับการใชงานระหวางองคกร หรือองคกรเดียวกันแตอแยกการบริหารเปนสาขาหลายสาขา ผานเครือขาย extranet หรือ Internet ซึ่งระบบกริดก็ตองการคุณสมบัติในการพัฒนาระบบแบบ Loosely coupled อยางที่ Web service มีเชนกัน 2.2.1 พื้นฐานการรองขอบริการจาก Web service อยางไรก็ตาม ขั้นตอนการทํางานของเทคโนโลยี Web service จริงๆนั้นกลับไมใชมีเพียงแคฝง client ทํา การรองขอใชบริการจาก Web service แลว Web service คืนคาผลลัพธกลับมาที่ client แตทวาเทคโนโลยีWeb service กลับมีขั้นตอนการทํางานเพิ่มเขามาเพื่อใหการรองขอใชบริการWeb service เปนไปอยางมีประสิทธิภาพ ยิ่งขึ้น
รูปที่ 2.2 ขั้นตอนการทํางานของ Web service จากภาพขางบนนี้ กลาวถึงขั้นตอนทั้ง 6 ในการรองขอใชบริการWeb service ซึ่งมีดังตอไปนี้ 1. ขั้นตอนคนหาWeb service อยางที่เราเคยไดกลาวในหัวขอที่ผานมาแลววา client อาจจะยังไมรูจักที่อยูของWeb service ที่ตองการวาจะไป รองขอไดจากที่ใด ดังนั้นขั้นตอนแรกของการรองขอ Web service ก็คือ การคนหาWeb service ซึ่งผูรองขอใช บริการหรือที่เรียกวา Service requestor จะทําการรองขอใชระบบการคนหาบริการที่ตองการจากระบบจัดเก็บ ทะเบียนของWeb service หรือที่เรียกวา Universal Directory, Discovery, and Integration (UDDI) ผมขอ ยกตัวอยางขั้นตอนนี้จากภาพเชน หากคุณคือ Service requestor ที่ตองการบริการพยากรณอากาศของประเทศไทย
9
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
ที่ชื่อวา WeatherService (จากรูปภาพ สมมติเปนบริการสําหรับทํางานที่ชื่อ X) โปรแกรมฝง client จะรองขอใช ระบบการคนหา Web service จาก UDDI 2. ขั้นตอนคืนคาการคนหา Web service จากขั้นตอนแรก หลังจากที่ Service requestor ขอใชระบบการคนหาWeb service จาก UDDI แลว UDDI จะทํา การคนหา Web service ในทะเบียนของ Web service ที่เคยไดลงทะเบียนไวกับ UDDI ซึ่งถาจะเปรียบเปรยนั้น UDDI ก็เปนเสมือนสมุดหนาเหลืองที่เก็บทะเบียนของWeb service เพื่อทําให Service requestor ทราบถึงที่อยูเพื่อ ติดตอกับ Web service นั้นได 3. ขั้นตอนสอบถามวิธีการใชงานWeb service หลังจากที่ Service requestor ทราบถึงที่อยูของWeb service แลว (ซึ่งก็คือ server ที่ Web serviceนั้นทํางานอยู) Service requestor จะยังไมสามารถเขาใชบริการจากWeb service นั้นได จนกวา Service requestor จะทราบถึง รายละเอียดของวิธีการใชงาน Web service นั้น โดย Service requestor จะทําการสอบถามวิธีการใชงานWeb service จาก server ที่เปดบริการWeb service นั้น ยกตัวอยางเชน หากเราทราบที่อยูของบริการพยากรณอากาศของ ประเทศไทย แตอยางไรก็ตาม เราคงจะยังไมทราบถึงฟงกชันการทํางานที่ Web service นั้นจัดเตรียมไวให (ศัพท ที่เราใชเรียกฟงกชันของเว็บเซอรนั้น อาจจะเรียกวา remote method) รวมถึงพารามิเตอรที่เราตองใสเขาไปและ คาที่จะคืนจากWeb service นั้นดวย ซึ่งฟงกชันของการพยากรณอากาศนั้นอาจจะอยูในรูปแบบ String forcast(String provinceName) โดยฟงกชันนี้เราตองใสชื่อจังหวัดขที่ตองการคําพยากรณ และผลลัพธจากฟงกชัน ก็คือคําพยากรณ 4. ขั้นตอนตอบกลับวิธีการใชงาน Web service วิธีการใชงานWeb service จะถูกตอบกลับไปที่ Service Requestor ในรูปแบบเอกสาร XML ที่เราเรียกวา Web Service Description Language (WSDL) เมื่อ Service requestor ไดรับเอกสารนี้แลว มันจะทราบถึงวิธีการใชงาน Web service นั้นไดแลว 5. ขั้นตอนการเขาถึง Web service เพื่อรับบริการ Service requestor ทําการรองขอบริการWeb service โดยยึดวิธีการใชงานฟงกชันของWeb service ที่อธิบายไวใน WSDL และการเขาใชบริการWeb service นั้น จําเปนตองมีขอความ (ซึ่งระบุคาที่ไดสงผานพารามิเตอรของ ฟงกชัน) สงไปถึงWeb service ผานทางโปรโตคอลที่ชื่อ Simple Object Access Protocol (SOAP) 6. ขั้นตอนคืนผลลัพธอนั เกิดจากการทํางานของWeb service ผลลัพธอันเกิดจากการการประมวลผลฟงกชันของWeb service นั้น จะถูกคืนคากลับไปให Service requestor ผาน ทางโปรโตคอล SOAP ยกตัวอยางเชน หากเปนการเรียกฟงกชันการพยากรณอากาศที่ไดกลาวมานั้น ผลลัพธของ การพยากรณจะถูกสรางเปนขอความสงไปให Service requestor ผาน SOAP เปนตน
10
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
2.2.2 การอางอิงที่อยูของ Web service ในระบบเครือขายนั้นประกอบไปดวยทรัพยากรตางๆมากมาย การที่เราจะอางอิงถึงทรัพยากรที่เรา ตองการนั้น ระบบจําเปนตองมอบหมายที่อยูที่เปนเอกลักษณใหแกทรัพยากรแตละตัว ซึ่งวิธีการอางอิงถึงที่อยู ของทรัพยากรที่เราใชกันอยางกวางขวางนั้น เราจะใชวิธีการอางอิงที่เรียกวา Uniform Resource Identifier (URI) สําหรับการอางอิงไปหา Web service นั้น เราก็ใช URI เชนกัน อยางที่เราไดกลาวมาแลววา เทคโนโลยี Web service จะมี UDDI ที่ทําหนาที่เก็บทะเบียนหรือที่อยูของ Web service ซึ่งผลลัพธจากการสอบถามที่อยูของWeb service ผาน UDDI นั้น จะถูกตอบกลับมาในรูปแบบ URI นั่นเอง เพื่อเปนการเห็นภาพใหมากยิ่งขึ้น ดูตัวอยาง URI ของ Web service หนึ่งตอไปนี้ http://webservice.hpcnc.ku.ac.th/weather/th/WeatherService จากตัวอยาง URI ขางบนนี้ เปนตัวอยางของWeb serviceที่ชื่อ WeatherService ซึ่งทานผูอานสามารถ สังเกตไดวา การอางอิงที่อยูของWeb serviceนั้นก็ไมไดตางอะไรจากการอางอิงเว็บเพจ แตทวาหากคุณพิมพ URI นี้ลงไปในชองกรอกที่อยูหนาเว็บเพจของโปรแกรมบราวเซอร ผลลัพธที่ไดอาจจะแสดงเปนความผิดพลาด หรือ อาจจะเปนขอความที่พอดูไดแตไมสามารถใชงานWeb service นั้นไดแตอยางใด แตเราสามารถนํา URI ของWeb service นั้นไปใชกับโปรแกรมทางฝง client (หรือโปรแกรมของ Service requestor นั่นเอง) แลวโปรแกรมนั้นจะ เชื่อมการติดตอไปหาWeb serviceโดยอางอิงที่อยูผาน URI 2.2.3 สถาปตยกรรมของ Web service สถาปตยกรรมของWeb service ถูกบรรยายเปนลําดับชั้นหรือเลเยอร (layer) ไดจากภาพตอไปนี้
รูปที่ 2.3 เลเยอรทั้ง 4 ของเทคโนโลยี Web service
11
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
• เลเยอรการคนหาบริการ (Service Discovery Layer) เลเยอรนี้เปนเลเยอรที่เสนอวิธีการสําหรับการคนหา Web service ที่ Service requester ตองการ โดย เทคโนโลยี Web service ไดจัดเตรียมกลไกที่ชื่อ UDDI สําหรับการคนหา Web service อยางที่ไดกลาว ไวแลวในขางตน • เลเยอรการใหรายละเอียดบริการ (Service Description Layer) เลเยอรนี้เสนอขั้นตอนการใหรายละเอียดการเรียกใชบริการของ Web service โดยเทคโนโลยี Web service ไดเสนอการอธิบายรายละเอียดนี้ผานทางเอกสาร XML ที่เรียกวา Web Service Description Language (WSDL) • เลเยอรการรองขอใชบริการ (Service Invocation Layer) เลเยอรนี้เสนอวิธีการในการรองขอใชบริการจาก Web service โดยเรียกบริการที่ Web service เปด บริการวา operation (ซึ่งในเชิงเทคนิคในขั้นตอนการเขียนโปรแกรม อาจจะเรียก operation วา method หรือ function) • เลเยอรการรับสงขอมูล (Transport Layer) เลเยอรนี้เสนอวิธีการในการรับสงขอมูลระหวางโปรแกรมทางฝง Service requester (หรือโปรแกรมทาง ฝง client) กับโปรแกรมของ Web service (หรือโปรแกรมทางฝง server) ซึ่งเทคโนโลยี Web service แนะนําโปรโตคอลที่ชื่อ Simple Object Access Protocol (SOAP) สําหรับการรับสงขอมูลหรือ ติดตอสื่อสารระหวางโปรแกรมทั้ง 2 ฝง 2.3 Enter Grid Services: กาวเขาสูยุคของ Grid Service อยางที่ไดกลาวมาขางตนแลววา Web service เปนเทคโนโลยีหนึ่งสําหรับพัฒนาโปรแกรมเพื่อใชงาน บนเครือขายอินเตอรเน็ตที่สามารถทําลายกําแพงของความแตกตางของเทคโนโลยีระหวางระบบหลายๆระบบได อยางลงตัว และนี่เองจึงเปนที่มาที่วา ทําไมบรรดานักเทคโนโลยีทางดานเทคโนโลยี Grid จึงไดใหความสนใจใน เทคโนโลยี Web service วานาจะเปนเทคโนโลยีที่สามารถกําหนดแนวทางใหมสําหรับการพัฒนาโปรแกรม สําหรับ Grid อยางไรก็ตาม Web service ก็ยังมีขอจํากัดอยู อยางที่ไดกลาวไวแลวในขางตน ซึ่งถาจะวากันจริงๆแลว Web service (ตามที่กําหนดโดยองคกร W3C) ก็ยังไมใชเทคโนโลยีที่สามารถชวยในการพัฒนาโปรแกรมสําหรับ ใชกับ Grid ได ดังนั้น เพื่อเปนการปรับปรุงจุดออนของ Web service และเพิ่มเติมจุดแข็งเขาไปนั้น จึงไดเกิด เทคโนโลยีที่อิงตามแนวคิด Service Oriented Architecture (SOA) ตัวใหมที่ชื่อวา Grid service ความแตกตางอันเดนชัดระหวาง Web service กับ Grid service และนับวาเปนขอดอยของ Web service เลยก็วาไดนั้นพิจารณาไดจากคุณสมบัติ 2 ประการที่ Web service ไดประสบ คือ Web service จัดเตรียมบริการ แบบ stateless และยังเปน non-transient ซึ่งแตละคุณสมบัติอธิบายไดดังนี้
12
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
• Web service ใหบริการแบบ stateless คุณสมบัติ stateless หมายถึงวา Web service ไมสามารถจดจําคาหรือสถานะที่แลวมาวาไดทําอะไร ไปและเคยไดผลลัพธอะไรแลวบาง กลาวคือ ถาเรามีการรองขอ operation (หรือเรียก method) หนึ่ง ของ Web service แลวหากคุณเรียก operation ตัวอื่นหรือแมกระทั่งเรียก operation เดิม Web service จะจําไมไดวาผลลัพธที่ไดจากการทํา operation ตัวกอนหนานี้มีคาเทาไหร ซึ่งวิธีการแกปญหานี้ของ Web service สามารถแกไดที่ฝง client โดยใหโปรแกรมฝง client จดจําคาของแตละ operation กอนที่ จะเรียก operation ครั้งตอไป และก็ตองปอนคาเดิมกลับไปที่ operation ครั้งใหมนี้อีกครั้ง หรืออีกวิธี หนึ่งก็คือ ให Web service เขียนคาลง storage หาก Web service ตองการรื้อฟนความจําก็จะกลับไป อานที่ storage กอน • Web service ใหบริการแบบ non-transient คําวา non-transient หมายถึงอายุของ Web service นั้นยืนยงตลอดไป และ client ทุกๆตัวสามารถแชร Web service ผานเพียง instance เดียวเทานั้น โดย instance ก็เปรียบเสมือน process ของ Web service ที่คอยใหบริการ operation ตางๆแก client ซึ่งถาแมวาเราปรับกลไกให Web service จดจําขอมูลอะไร บางอยางจาก client รายหนึ่งไดแลว ขอมูลที่ Web service นั้นจดจําก็สามารถถูกมองเห็นโดย client รายอื่นไดดวยเชนกัน ซึ่งนับวาไมใชเรื่องที่ดีเลยทีเดียว ดวยขอจํากัดของ Web service ทั้งคุณสมบัติ stateless และ non-transient จึงเปนจุดที่ Grid service นํามา ปรับปรุงใหดียิ่งขึ้นโดย Grid service มีคุณสมบัติแบบ stateful และ transient • Grid service ใหบริการแบบ stateful stateful คือ Grid service สามารถจดจําการทํางานของแตละ operation ไดโดยที่ผูพัฒนาโปรแกรมไม จําเปนตองคิดคนวิธีการเพิ่มเติมเหมือนกับที่ไดกลาวไวใน Web service แตทวา Grid service ยัง สามารถทําใหเปน stateless ไดดวยเชนกัน • Grid service ใหบริการแบบ transient transient คือ Grid service สามารถมี instance ใหกับ client เพียงรายเดียว หรือกลุมของ client เพียง กลุมใดกลุมหนึ่งได และ Grid service ชนิดเดียวกันยังสามารถมี instance ไดหลาย instance เพื่อ ใหบริการ client รายใดรายหนึ่งหรือกลุมของ client กลุมใดกลุมหนึ่งไดดวย แตอยางไรก็ตาม เรา สามารถทําให Grid service เปนแบบ non-transient ได
13
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
ในหัวขอถัดไปเราจะกลาวถึงกลไกที่ทําให Grid service สามารถมีคุณสมบัติอยาง stateful และ transient ได ซึ่งกลไกนั้นมีชื่อวา Factory 2.3.1 Factory: โรงงานสําหรับผลิตและทําลาย Grid service Grid service ไดแกปญหาที่ไดพบเจออยาง stateless กับ non-transient ดวยการเสนอกลไกที่ชื่อวา Factory ขึ้นมา โดย Factory จะทําหนาที่ในการสราง instance ของ Grid service ขึ้นมาใหกับ client รายใดรายหนึ่ง หรือกลุมใดกลุมใดหนึ่งได อีกทั้ง Grid service ที่ไดมานั้นยังมีคุณสมบัติ stateful อีกดวย ถาจะวาไปแลว Factory จะมีเพียง instance เดียวเพื่อใชสําหรับสรางหรือทําลาย Grid service ชนิดใด ชนิดหนึ่ง (ซึ่งในทางปฏิบัติ เราอาจสราง Factory สําหรับ Grid service หนึ่งหลายๆ Factory ก็ได) โดยทุกครั้งที่ client ตองการใชงาน Grid service ชนิดหนึ่ง client ก็จะทําการรองขอ Factory ที่เกี่ยวกับ Grid service ชนิดนั้นให สราง instance ของ Grid service ขึ้นมา แตถา client จะเรียก operation ของ Grid service นั้น client จะไมติดตอไป ที่ Factory อีกแลว แตจะติดตอตรงไปที่ instance ของ Grid service ที่ถูกสรางขึ้นมา และ client สามารถรองขอให Factory ทําลาย instance ของ Grid service ที่ไดเกิดขึ้นมาแลวได
รูปที่ 2.4 ตัวอยางการใช Factory จากรูปที่ 2.4 ที่แสดงดานบนนี้ เปนรูปที่แสดงใหเห็นถึงการติดตอระหวาง client กับ Factory โดยมี Factory ที่ชื่อ วา MathService Factory ซึ่งเปน Factory สําหรับสรางและทําลายบริการที่ชื่อวา MathService โดยภาพไดแสดงให เห็นวามีกลุมของ client อยู 4 client ที่ตางใช MathService ที่สรางโดย Factory รวมกัน ซึ่งอาจจะเปนไปไดวา client D เปน client ที่รองขอให MathService Factory สรางกลุมของ instance ของ MathService เพื่อบริการแก client A, client B และ client C ซึ่งจะเห็นไดวา client C อาจจะเปน client เดียวที่ครอบครอง instance ของ Math service เพียง instance เดียวไวใชเพียงลําพัง แต client B ใช instance ของ MathService รวมกับ client A ก็ได 2.3.2 กลไกอื่นๆที่ Grid service จัดเตรียมมาให Grid service ยังไดจัดเตรียมกลไกพื้นฐานอื่นๆที่นาสนใจ กลไกเหลานั้นคือ Life cycle management, Service data และ Notification 14
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
• Life cycle management เปนกลไกสําหรับการจัดการวงจรชีวิตของ Grid service โดย Grid service จะมี วงจรเปนระยะตางๆนับตั้งแต Grid service เกิด จนถึง Grid service กําลังใหบริการ จนกระทั่ง Grid service หมดชวงชีวิต (หรือตาย) • Service data เปนกลไกที่เราสามารถกําหนดขอมูลบางอยางใหกับ Grid service เหมือนกับการกําหนด ลักษณะหรือ attribute ของ Grid service ซึ่งเปนเปนไปไดวา Grid service ที่ใหบริการชนิดเดียวกัน (คือ เกิดจาก Factory ตัวเดียวกัน) อาจจะมีลักษณะที่แตกตางกันไปได • Notification เปนกลไกสําหรับการแจงขาว โดยเราสามารถกําหนดให Grid service สามารถเปนตนตอ ของแหลงขาวที่เราสนใจซึ่งเราจะเรียกวา Notification source และสามารถกําหนดใหโปรแกรมทางฝง client เปนหนวยที่สนใจขาวคราวที่เกิดที่ Grid service ไดหรือเรียกวาเปน Notification sink ซึ่งเรา สามารถกําหนดให client รับฟงเฉพาะขาวคราวอยางใดอยางหนึ่งได และเมื่อไหรก็ตามที่ Grid service มีขาวคราวที่ client สนใจเกิดขึ้นแลว Grid service จะทําการแจงขาวคราว (notified) ไปที่ client ให รับทราบขาวนั้นได 2.3.3 การระบุที่อยูของ Grid service ดวย GSH และ GSR อยางที่เราไดกลาวถึงวิธีการระบุที่อยูของ Web service ไปแลววา เราระบุที่อยูของ Web service ดวย URI (หรือ URL) ของ Web service แตทวา การระบุที่อยูของ Grid service ก็ใช URI เชนกัน แตจะไมเรียกวา URI ก็เทานั้น ซึ่งเราจะเรียก URI ของ Grid service วา Grid Service Handle หรือ GSH OGSA ไดใหขอกําหนดวา ที่อยูของ Grid service ตองไมซ้ํากัน โดยเปนไมไดที่ instance ของ Grid service 2 instance จะมี GSH เหมือนกัน แมวา Grid service นั้นจะถูกสรางมาจาก Factory เดียวกันก็ตาม โดย OGSI ไดกําหนดให Factory เปนตัวกําหนด GSH ใหแตละ Grid service ใหแตกตางกัน แตทวาเพียง GSH อยาง เดียวนั้นไมไดบงบอกถึงวิธีในการติดตอกับ Grid service แตอยางใด เชน ไมไดบอกถึง operation หรือ method ของ Grid service วาไดใหบริการอะไรบางและจะสง parameter อะไรบางเขาไปใน operation เหลานั้น เปนตน โดยสวนที่บงบอกวิธีการในการติดตอกับ Grid service จะกําหนดไวใน Grid Service Reference หรือ GSR โดย ขอกําหนดของ OGSI ไมไดนิยามวา GSR จะตองมีรูปแบบอยางไรในการอธิบายถึงวิธีในการติดตอกับ Grid service แตเนื่องจากวา Grid service ไดใช SOAP เปนโปรโตคอลในการรับสงขอมูลระหวาง Grid service กับ client อยูแลว ดังนั้น OGSI จึงเลือกให GSR ถูกจัดอยูในรูปแบบของเอกสาร WSDL
15
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 3 กลไกสําคัญของ Grid service Grid application มีลักษณะที่พิเศษ โดยไดจัดเตรียมกลไกสําหรับการพัฒนา Grid service ดังนี้คือ Factory, Service Data Elements, Life cycle และ Notification 3.1 กลไกสรางและทําลาย Grid service (Grid service Factory) Factory ใน grid service ทําหนาที่ในการสราง instances ของ Grid service ใหกับ client ซึ่งมี ความสามารถเหมือนกับแนวความคิดของ factory ใน object-oriented deign และ object-oriented programming ใน Java ที่ทําหนาที่ในการสราง instances ของ class ในการเรียกใชบริการของ client อันดับแรก client จะทําการหาที่อยูของ factory กอนจากนั้นทําการรอง ขอให factory สราง instance ของ service เมื่อ factory ไดรับการรองขอ จะทําการสราง instance ของ grid service และสงคาของ Grid Service Handle (GSH) และ Grid Service Reference (GSR) กลับไปให client Grid Service Handle (GSH) เปนตัวชี้ที่อยูของ service ที่เปนลักษณะเฉพาะซึ่งมีไดหนึ่งเดียว โดย client จะใชในการติดตอกับ instance ของ service นั้น ๆ Instance ของ grid service ทําการเก็บสถานะของขอมูลซึ่งมีความสัมพันธกับขอมูลที่มีการองขอ โดยใน การรองขอสามารถรองขอไดหลาย ๆ client ซึ่งระยะเวลาในการใชงาน instance ของ client จะสิ้นสุดลงเมื่อ client เลิกใชงาน หรือสามารถกําหนดชวงระยะเวลาในการใชงานวาจะใหสิ้นสุดเมื่อไร โดยไปกําหนดที่ตัวแปร termination time ได เมื่อถึงเวลาที่กําหนด มันจะไปทําลาย instance นั้นทิ้ง ขั้นตอนในการทํางาน 1. Client ทําการสอบถามไปยังที่จัดเก็บบริการตาง ๆ เพื่อทําการคนหา factory 2. Client ทําการรองขอไปยัง factory เพื่อสราง instance ของ grid service 3. Factory ทําการสราง instance ใหมของ grid service 4. Factory ทําการสงคาของ GSH ของ instance ใหม ไปให client 5. Client สามารถเรียกใชบริการได ตัวอยางในรูปที่ 3.1 แสดงใหเห็นแนวคิดของ client ในการรองขอ instance จาก factory โดย factory จะ สราง instance และ สงคา GSH หรือ URL ไปให client และ client จะใช GSH นี้ติดตอโดยตรงกับ instance ของ service
รูปที่ 3.1 การติดตอสื่อสาร Factory
16
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
3.2 กลไกกําหนดขอมูลใหกับ Grid service (Service Data Elements) Service data คือการรวบรวมโครงสรางขอมูลโดยมีความสัมพันธกับสถานะของขอมูลใน instance สําหรับ grid service โดยจะตองสามรถเขาใชไดงาย ซึ่งแบงออกเปนประเภทตาง ๆ โดยขึ้นอยูกับลักษณะของ บริการนั้น ๆ Service Data Elements (SDE) จะประกอบดวยกลุมของขอมูลของ instance ใน grid service ซึ่ง ประกอบดวยสองประเภทคือประเภท A และประเภท B โดยประเภท A จะเปนการบอกรายละเอียดขอมูลของ ทรัพยากร เชน สถาปตยกรรม, ความเร็ว, ระบบปฏิบัตกิ าร และพื้นที่วางในการจัดเก็บขอมูล สวนประเภท B เปน การบอกรายละเอียดของคุณภาพและระดับความถูกตองของบริการ SDE สามารถเปนไดทั้ง static และ dynamic โดย static service data เปนการกําหนดเงื่อนไขในสวนของ การติดตอกับบริการ แต dynamic service data เปนการเพิ่ม instance ของ service ในการใชแบบ dynamic service data นั้น client จะตองไปเอาคามาจากรายการของ Service Data Elements ในขณะที่กําลังทํางาน ในตัวอยางเปนการสงคาทั้งหมดของ Service Data Elements กลับไปที่ instance ของบริการนั้น ๆ ใน grid service จะมี findServiceData เปนฟงกชันในการกําหนดการติดตอซึ่งกันและกัน ในการพัฒนาดวยภาษาจาวา เพื่อตองการให service data มีประสิทธิภาพ ดังนั้นจึงเพิ่ม SDE เขาไปใน การติดตอของ grid service ขอแนะนําควรแยกคลาสของจาวาออกเปนคลาสของแตละประเภทของ service data ซึ่งในกรณีนี้แตละ instance ของ SDE ก็คือหนึ่งคลาสของจาวา และแตละคุณสมบัติมีความสัมพันธกับ service data ที่มีการเขาถึงฟงกชัน ซึ่งเรียกวา getters และ setters ในสวนของโปรแกรมสามารถสรางจาก service data description ซึ่งระบุเปนเอกสาร XML โดยนําเขาไปในรายละเอียด GWSDL ของ grid service 3.3 กลไกจัดการวงจรชีวิต (Life Cycle Management) เปนความจริงทางธรรมชาติที่กลาวไววาสรรพสิ่งนั้นมีทุกขัง อนิจจัง และอนัตตา หรือเราจะเรียกไดวา สรรพสิ่งมีวัฏจักรหรือวงจรชีวิต (Life cycle) ของมัน ดังนั้น Grid service จึงควรจะมี Life cycle ไดเชนกัน ซึ่ง Life cycle ในที่นี้ก็คือ สถานะตั้งแต Grid service เกิดจนกระทั่ง Grid service ตาย โดย Grid service มีชวงชีวิต ทํางานชวงหนึ่งอยูที่ container ซึ่งในทางปฏิบัติจริงนั้น container ก็เปนเสมือน application server สําหรับรันการ ทํางานของ Grid service และจัดเตรียมสภาพแวดลอมพื้นฐานใหกับ Grid service (อยางเชน จัดเตรียมโปรโตคอล สําหรับการติดตอสื่อสาร หรือจัดเตรียมกลไกรักษาความปลอดภัย เปนตน) กลไก Life cycle management เปนกลไกที่สําคัญมากในระบบที่มีสภาพแวดลอมที่ตองการความคงทน สูง (Robust environment) อาทิเชน Grid service สามารถดําเนินงานไดตอเนื่องหลังจากที่ container ทํางาน ลมเหลว เปนตน กลไก Life cycle management จะตองมีวิธีการที่สามารถบงบอกไดวาในแตละชวงเวลานั้น Grid service กําลังอยูในสถานะใด และถาหาก Grid service ตองการความคงทนตอสภาพแวดลอมที่ไมแนนอน (unreliable) ไดนั้น Grid service ตองมีวิธีการในการบันทึกสถานะในแตละชวงเวลาไดหรือกลาวไดวาเปนการทํา checkpoint ซึ่งเมื่อไหรก็ตามที่สภาวะแวดลอมของ Grid service ลมเหลว (อยางเชน container ทํางานลมเหลว เปนตน) Grid service ก็จะดึงสถานะที่ไดเคยบันทึกไวขึ้นมาใชงานตอไป ซึ่งดวยวิธีเหลานี้ก็จะทําให Grid service สามารถทํางานไดอยางตอเนื่องจากงานเดิมได
17
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
วงจรชีวตหรือ Life cycle ของ Grid service แบงออกเปน 5 สถานะดวยกัน ดังนี้ • preCreate – เปนสถานะที่เกิดขึ้นในขณะที่มีกระบวนการสราง instance ของ Grid service ขึ้นมาที่ container • postCreate – เปนสถานะหลังจากที่ instance ของ Grid service เพิ่งถูกสรางเสร็จสิ้น • activate – เปนสถานะที่ Grid service กําลังทํางานหรือกําลังใหบริการ หรือกลาวไดวาเปนสถานะที่ Grid service ถูกโหลดขึ้นไปที่หนวยความจําเพื่อทํางาน • deactivate – เปนสถานะที่ Grid service หยุดการทํางาน หรือออกจากหนวยความจํา • preDestroy – เปนสถานะกอนที่ Grid service จะถูกทําลายหรือหมดชวงชีวิต (ตาย) 3.4 กลไกการแจงขาว (Notification) Notification หรือกลไกการแจงขาว เปนกลไกที่ทําหนาที่ในการสดับรับฟงเหตุการณที่สนใจ และเมื่อไหรก็ตามที่ เหตุการณนั้นเกิดขึ้นหรือมีการเปลี่ยนแปลงในเหตุการณนั้นแลว กลไกจะทําการแจงขาวนี้ไปใหกับผูที่สนใจ โดย เราจะเรียกกลุมของผูที่สนใจขาวหรือเหตุการณการวา Notification sink (ผูสนใจขาว) และเราจะเรียกผูที่สรางขาว หรือเหตุการณวา Notification source (แหลงขาว) อยางที่ไดกลาวมาในหัวขอกอนหนานี้แลววา Grid service จัดเตรียมกลไกอยาง Service Data Element (SDE) สําหรับจัดเก็บขอมูลของ Grid service ซึ่งเราสามารถนํากลไก Notification ไปดักจับเหตุการณหรือความ เปลี่ยนแปลงของขอมูลใน SDE ได
รูปที่ 3.2 กระบวนการทั้ง 5 ของ Notification
18
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
จากรูปที่ 3.2 ดานบนนี้ แสดงใหเห็นถึงกระบวนการของกลไก Notification ซึ่งการทํา Notification จะประกอบ ไปดวยกลุมของผูที่สนใจเหตุการณหรือขาว และเราจะเรียกกลุมนี้วา Notification sink ซึ่งอาจจะเปนโปรแกรม ทางฝง client หรืออาจจะเปน Grid service ก็ได โดยกลุมผูสนใจเหตุการณตองสมัครเขาใชบริการ Notification จาก Grid service ที่มีเหตุการณหรือขอมูลที่สนใจ และเราเรียก Grid service นี้วา Notification source โดย Notification source จะติดตอไปที่บริการหนึ่งที่เรียกวา Subscription Management เพื่อสราง Subscription Manager คืนไปที่ Notification sink โดย Subscription Manager จะมีหนาที่ในการจัดการรับขาวหรือเหตุการณที่ เกิดขึ้นจาก Notification source และเมื่อไหรก็ตามที่มีเหตุการณที่มีผูสนใจเกิดขึ้น ฝง Notification source จะทํา การแจงขาวกลับไปที่ Notification sink สรุปขั้นตอนของ Notification ทั้ง 5 ขั้นตอนตามที่แสดงไวในรูปที่ 3.2 ไดดังนี้ 1. โปรแกรม (หรืออาจจะเปน Grid service) ใดก็ตามที่ตองการรับรูเหตุการณใดๆที่เกิดกับ Grid service อื่นๆ โปรแกรมนั้นจะตองสมัครขอใชกลไก Notification (Notification subscription) ไปยัง Grid service ที่มีเหตุการณหรือขอมูลที่สนใจ 2. Grid service ที่มีผูขอรับฟงเหตุการณ จะติดตอไปที่บริการที่ชื่อ Subscription Management เพื่อขอ instance ของการจัดการ Notification ที่ชื่อ Subscription Manager 3. Grid service สง Subscription Manager กลับไปที่โปรแกรมที่สนใจเหตุการณ 4. ฝง Notification sink สามารถใช Subscription Manager ในการตรวจดูชวงเวลา (Lifetime) ของการ รับฟงเหตุการณไดวาเปนเวลาเทาไหรแลว ซึ่งถาหากเวลานี้เกินชวงเวลาที่ Notification sink สามารถรอได มันก็สามารถยกเลิกการรับฟงเหตุการณนี้ได 5. เมื่อไหรก็ตามที่มีเหตุการณที่โปรแกรมสนใจเกิดขึ้นที่ Grid service กลไก Notification จะสั่งให Notification source สงขอความแจงไปที่ Notification sink จากนั้นโปรแกรมที่สนใจเหตุการณ อาจจะมีการเรียก method หรือฟงกชันการทํางานบางอยางขึ้นเพื่อรองรับสถานการณที่เกิดจาก เหตุการณเหลานั้นได
19
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
บทที่ 4 การพัฒนา Grid service ในบทนี้ เราจะกลาวถึงการพัฒนาGrid service โดยการพัฒนาGrid serviceของเรานั้นจะตั้งอยูของ OGSI สําหรับการพัฒนาโดยJava แตอยางไรก็ตาม Globus Toolkit 3 ไดจัดเตรียม OGSI.NET ซึ่งเปน OGSI สําหรับการ พัฒนาโดย .NET Framework แตสําหรับในหนังสือเลมนี้ เราจะไมกลาวถึงการพัฒนาดวยวิธีดังกลาว สําหรับหัวขอยอยในบทนี้ เราจะเริ่มตนดวยการอธิบายถึงขั้นตอนเบื้องตนในการเขียนโปรแกรมใหเปน Grid service ตอจากนั้นเราจะกลาวถึงการ deploy เอา Grid service ไปติดตั้งที่ container โดยเราเนนวิธีการลงมือ ปฏิบัติจริงเปนหลัก โดยเราจะยกตัวอยาง Grid service ที่มีชื่อวา Math Service ที่ใหบริการ operation ที่ชื่อ add ซึง่ เปนฟงกชันเหมือนกับ counter ที่ทําหนาที่ในการสะสมคา อยางไรก็ตาม ในบทนี้เราจะไมกลาวถึงวิธีการติดตั้งชุด โปรแกรมพื้นฐานสําหรับการพัฒนาโปรแกรมไวในบทนี้ ซึ่งทานผูอานสามารถเขาไปดูเนื้อหาเหลานี้ไดใน Appendix สําหรับหัวขอยอยสุดทายที่เราจะกลาวถึงคือการรัน Math service ที่ได deploy แลว และการเรียก โปรแกรมฝง client ใหไปใชบริการ Math service 4.1 ขั้นตอนพื้นฐานสําหรับเขียนโปรแกรมใหเปน Grid service ขั้นตอนพื้นฐานสําหรับเขียนโปรแกรมใหเปน Grid service มีดังตอไปนี้ 1. ออกแบบ interface ของ Grid service 2. สรางไฟล WSDL 3. ตกแตง WSDL ใหเปน GSDL 4. สรางโคด stubs จาก GSDL 5. สรางโคดการทํางานใหกับ Grid service 6. สรางโปรแกรมฝง client 4.1.1 ออกแบบ interface ของ Grid service ในขั้นตอนนี้ เปนการออกแบบ interface ของ Grid service ซึ่ง interface นั้นเปรียบเสมือนโครงสรางหรือ พิมพเขียวของ Grid service โดยอธิบายถึง method หรือ operation ที่ Grid service ใหบริการ แตทวาไมไดลง รายละเอียดลงไปวาการทํางานของ operation เปนเชนไร สําหรับ interface ของ Math Service นั้นมีโครงสรางดังนี้ package com.hpcnc.gridservice.math; public interface Math { public double add(double in0); }
20
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
เราใหชื่อ interface ของ Grid service คือ Math โดย Math มี operation ชื่อ add ซึ่งเราตั้งใจวาจะใหผูใชบริการนี้ใส parameter มาหนึ่งตัว (ผาน in0) แลวคาที่ใสเขาไปจะไปรวมกับคาเดิมของ Math อีกทีหนึ่ง ซึ่งทานผูอานจะเห็น ภาพชัดเจนยิ่งขึ้นใน 4.1.5 4.1.2 สรางไฟล WSDL อยางที่เราทราบแลววา WSDL เปนขอความที่ใชอธิบายการใชบริการ ซึ่งนับวาเปนสวนที่จําเปนสําหรับ การทําให Grid service (หรือ Web service) นั้นถูกใชงานไดอยางถูกตอง โดยวิธีในการสรางไฟล WSDL นั้น เรา อาจจะทําไดดวยตนเองผาน editor ใดๆก็ได แตถาหากวาเรามี interface อยูแลว (ที่ไดทําใน 4.1.1) การสราง WSDL ก็จะทําไดสะดวกและรวดเร็วยิ่งขึ้น เพราะวา Globus Toolkit 3 ไดจัดเตรียมเครื่องมือสําหรับการสราง WSDL โดยอิงตาม interface ที่ไดสรางไวแลว Globus Toolkit 3 ไดจัดเตรียมชุดของคลาสที่ชื่อวา Apache AXIS (ขอเรียกสั้นๆวา AXIS) โดย AXIS เปน SOAP Implementation และไดจัดเตรียมคลาสสําหรับการเขียนโปรแกรมแบบ Web service ไวอยางมาก ทีเดียว และยังไดจัดเตรียมคลาสที่ชื่อ Java2WSDL ซึ่งเปนคลาสที่ใชในการแปลง interface (ที่เขียนโดยภาษา Java) ไปเปนไฟลเอกสาร WSDL วิธีการใช Java2WSDL มีรูปแบบดังนี้ java org.apache.axis.wsdl.Java2WSDL [options] [Java interface]
ขอยกตัวอยาง จากการสราง WSDL โดยใช Java2WSDL โดยอางอิงตาม interface ที่ชื่อ Math ของเรา java org.apache.axis.wsdl.Java2WSDL -S Math -P MathPortType -o schema/math/math.wsdl -l "http://localhost:8080/ogsa/services/Math" -n "http://math.gridservice.hpcnc.com/stubs" com.hpcnc.gridservice.math.Math
จากตัวอยางการใช Java2WSDL ทานจะเห็นวามี option เพิ่มเติมเขามา 4 options ดวยกัน โดยแตละ option มี รายละเอียด ดังนี้ - S ระบุชื่อของ Grid service - P ระบุชื่อ Port type (Port type เปนหลักการของ Web service โดย Port type ก็คือ interface ที่ไดออกแบบไว แตถูกดัดแปลงใหใชไดกับการติดตอสื่อสารผานเครือขาย) - o ระบุไฟล WSDL ที่ตองการสราง - n ระบุ namespace ของ stubs ที่จะเกิดขึ้นในขั้นตอน 4.1.4
21
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
4.1.3 ตกแตง WSDL ใหเปน GSDL ขั้นตอนนี้เปนการสรางไฟล GSDL (Grid WSDL) โดยไฟลนี้เกิดจากการนํา WSDL ที่ไดจาก 4.1.2 มา แกไข ซึ่งเราอาจจะแกไขดวยตัวเอง แตวา Globus Toolkit 3 ไดจัดเตรียมคลาสชวยเหลือที่ชื่อ DecorateWSDL ซึ่ง คลาสนี้มีกลไกงายๆคือ คลาสนี้จะดึงเอา schema จากไฟลที่ชื่อ ogsi_bindings.wsdl มาแทรกไวในไฟล WSDL นั่นเอง วิธีการใช DecorateWSDL สามารถทําได ดังนี้ java org.globus.ogsa.tools.wsdl.DecorateWSDL [ogsi_bindings location] [WSDL file]
ขอยกตัวอยาง จากการสราง GSDL โดยใช DecorateWSDL โดยอางอิงตาม math.wsdl ของเรา java org.globus.ogsa.tools.wsdl.DecorateWSDL schema/ogsi_bindings.wsdl schema/math/math.wsdl
หลังจากเรียก DecorateWSDL แลว ไฟล math.wsdl จะถูกปรับแตงใหมใหเปนไฟล GSDL 4.1.4 สรางโคด stubs จาก GSDL หลังจากเราได GSDL ขั้นตอนนี้ก็จะเปนการสราง stubs โดยอิงจากไฟล GSDL โดย stubs ก็คือ กลุม ของคลาสที่มีหนาที่เสมือนคลาสตัวกลางที่ชวยในการสราง SOAP message (ซึ่งมีทั้ง SOAP request และ SOAP response) และทําหนาที่ในการติดตอสื่อสรางผานโปรแกรม SOAP โดย Globus Toolkit 3 ไดจัดเตรียมคลาสที่ชื่อ GSDL2Java สําหรับสราง stubs จาก GSDL ซึ่งวิธีการใช GSDL2Java มีรูปแบบดังนี้ java org.globus.ogsa.tools.wsdl.GSDL2Java [GSDL file]
สําหรับตัวอยางการเรียกใช GSDL2Java โดยสรางจากไฟล math.wsdl ทําไดดังนี้ java org.globus.ogsa.tools.wsdl.GSDL2Java schema/math/math.wsdl
22
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
หลังจากเรียกคําสั่งนี้แลว จะไดกลุมของคลาส stubs ซึ่งเก็บใน com.hpcnc.gridservice.math.stubs ซึ่งที่อยูนี้เปนที่ อยูที่เราไดระบุไวตอนสราง WSDL ในหัวขอ 4.1.2 ในสวนของ option -n โดย source code ของคลาส stubs ที่ เกิดขึ้นนั้น มีดังนี้ MathGridLocator.java Math.java MathLocator.java MathPortType.java MathSoapBindingStub.java ซึ่ง คลาสทั้ ง 5 ที่เ กิ ด ขึ้ นนี้ คลาสที่ เ ราได ใ ชจ ริ ง ๆในตอนเขี ย นโปรแกรมมี เ พีย ง 2 คลาสเท านั้ น คื อ MathGridLocator และ MathPortType โดยโปรแกรมฝง client เรียกใช MathGridLocator มีหนาที่ในการดึงเอา reference ของ instance ของ Grid service มาใชงาน สวน MathPortType เปนคลาสที่เกิดในขั้นตอนที่เราสราง WSDL (ดูจาก 4.1.2 ตรง option -P) ซึ่งโปรแกรมฝง client จะใชคลาสMathPortType เพื่อรับ reference ที่ไดจาก MathGridLocator 4.1.5 สรางโคดการทํางานใหกับ Grid service หลังจากเราได stubs แลว ขั้นตอนตอมาก็คือ การสรางโคดของการทํางานใหกับ Grid service โดย Grid service จะตองไดรับมรดกจาก MathPortType ที่เกิดในขั้นตอน 4.1.4 ซึ่งมรดกที่ไดก็คือ operation ที่เรากําหนดไว ใน interface ในขั้นตอน 4.1.1 นั่นเอง จากนั้น ใหเราเขียนโคดการทํางานใหกับ operation ที่ไดกําหนดไว (ซึ่งก็คือ operation ที่ชื่อ add นั่นเอง) นอกจากนี้ โคดการทํางานของ Grid service ยังตองรับมรดกจาก GridServiceImpl อีกดวย ซึ่งเปนขอกําหนดพื้นฐานของ OGSI วา Grid service ตองรับมรดกจากคลาสนี้นั่นเอง เราสรางคลาสใหมที่ชื่อ MathImpl ซึ่งเปนคลาสของการทํางานของ Grid service package com.hpcnc.gridservice.math.stubs; import java.rmi.RemoteException; import org.globus.ogsa.impl.ogsi.GridServiceImpl; public class MathImpl extends GridServiceImpl implements MathPortType { private double results = 0; public MathImpl() { super(); }
23
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
public double add(double in0) throws RemoteException { results += in0; return results; } }
คลาส MathImpl ไดสรางตัวแปรที่ชื่อ results โดยใหคาเริ่มตนเปนศูนย โดยเรามีวัตถุประสงควา ทุกครั้งที่มี โปรแกรมฝง client มาขอใชบริการผานทาง operation ที่ชื่อ add คาของ results จะถูกบวกหรือลบจากคาที่ client ใสเขามาทาง parameter ที่ชื่อ in0 ของ add 4.1.6 สรางโปรแกรมฝง client เราเขียนโปรแกรมทางฝง client เพื่อใหเรียกใชบริการจาก Math service แบบงายๆ ดังตัวอยาง ดังตอไปนี้
package com.hpcnc.gridservice.math.client; import java.net.URL; import org.globus.ogsa.utils.GridServiceFactory; import org.globus.ogsa.wsdl.GSR; import org.gridforum.ogsi.Factory; import org.gridforum.ogsi.GridService; import org.gridforum.ogsi.LocatorType; import org.gridforum.ogsi.OGSIServiceGridLocator; import com.hpcnc.gridservice.math.stubs.MathPortType; import com.hpcnc.gridservice.math.stubs.MathGridLocator; public class MathClient { public static void main(String[] args) throws Exception { URL GSH = new URL("http://127.0.0.1:8080/ogsa/services/Math/MathFactory");
24
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
OGSIServiceGridLocator gl = new OGSIServiceGridLocator(); Factory factory = gl.getFactoryPort(GSH); GridServiceFactory gfact = new GridServiceFactory(factory); LocatorType lt = gfact.createService(); MathGridLocator mathLocator = new MathGridLocator(); MathPortType mathPort = mathLocator.getMath(lt); System.out.println(mathPort.add(10)); System.out.println(mathPort.add(-3)); GridService service = (GridService)gl.getGridServicePort(lt); service.destroy(); } }
จากโคดของ MathClient อธิบายหลักการทํางานไดดังนี้ โคดนี้เปนการะบุที่อยูของ Factory ของ Math service โดยการสรางเปน instance ของ URL URL GSH = new URL("http://127.0.0.1:8080/ogsa/services/Math/MathFactory"); โคดนี้ใชในการรับคา reference ของ Factory ของ Math service ที่อยูใน container OGSIServiceGridLocator gl = new OGSIServiceGridLocator(); Factory factory = gl.getFactoryPort(GSH); GridServiceFactory gfact = new GridServiceFactory(factory); หลังจากได reference ของ Factory แลว เราก็ให Factory สราง instance ของ Math service โดยสิ่งที่คืนมาจากการ สราง Math service ก็คือที่อยูของ Math service ซึ่งอยูในรูปแบบของ LocatorType LocatorType lt = gfact.createService(); คลาส MathGridLocator ใชสําหรับดึงคา reference ของ instance ของ Math service โดย MathGridLocator จะมี method ที่ชื่อ getMath ที่ใชสําหรับดึงคา reference ของ MathPortType (ซึ่งก็คือ reference ของ instance ของ Math service นั่นเอง) โดยการสงคา LocatorType ที่ไดรับมาจากโคดกอนหนานี้ MathGridLocator mathLocator = new MathGridLocator();
25
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
MathPortType mathPort = mathLocator.getMath(lt); สําหรับสองบรรทัดตอไป คือการลองเรียก operation ของ Math service System.out.println(mathPort.add(10)); System.out.println(mathPort.add(-3)); 4.1.7 โครงสรางของไฟลที่ไดจากการเขียนโปรแกรม +---com | \---hpcnc | +---gridservice | | \---math | | | Math.class | | | Math.java | | | | | +---client | | | MathClient.class | | | MathClient.java | | | | | \---stubs | | Math.class | | Math.java | | MathGridLocator.class | | MathGridLocator.java | | MathImpl.class | | MathImpl.java | | MathLocator.class | | MathLocator.java | | MathPortType.class | | MathPortType.java | | MathSoapBindingStub.class | | MathSoapBindingStub.java | | _add.class | | _add.java | | _addResponse.class | | _addResponse.java 26
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
| | +---org | \---gridforum | \---ogsi | _add.class | _add.java | _addResponse.class | _addResponse.java | _createService.class | _createService.java | _createServiceResponse.class | _createServiceResponse.java | _deliverNotification.class | _deliverNotification.java | _destroy.class | _destroy.java | _destroyResponse.class | _destroyResponse.java | _findByHandle.class | _findByHandle.java | _findByHandleResponse.class | _findByHandleResponse.java | _findServiceData.class | _findServiceData.java | _findServiceDataResponse.class | _findServiceDataResponse.java | _remove.class | _remove.java | _removeResponse.class | _removeResponse.java | _requestTerminationAfter.class | _requestTerminationAfter.java | _requestTerminationAfterResponse.class | _requestTerminationAfterResponse.java | _requestTerminationBefore.class | _requestTerminationBefore.java
27
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
| _requestTerminationBeforeResponse.class | _requestTerminationBeforeResponse.java | _setServiceData.class | _setServiceData.java | _setServiceDataResponse.class | _setServiceDataResponse.java | _subscribe.class | _subscribe.java | _subscribeResponse.class | _subscribeResponse.java | +---schema | | ogsi.wsdl | | ogsi_bindings.wsdl | | | \---math | | math.wsdl | | | \---schema | ogsi.wsdl | ogsi_bindings.wsdl จากโครงสรางที่ไดแสดงใหดู ทานอาจสังเกตไดวามีคลาสอยูหลายตัวทีเดียวที่เกิดในระหวางการเขียนโปรแกรม อาธิเชน คลาสที่อยูใน package ชื่อ org.gridforum.ogsi เปนตน โดยคลาสเหลานี้เกิดขึ้นมาในระหวางขั้นตอนการ ทํา GSDL2Java โดยเปนคลาสที่ทาง OGSI ไดกําหนดขึ้นมาสําหรับการพัฒนาโปรแกรมโดยภาษาจาวา นอกจากนี้แลว เรายังตองจัดเตรียมไดเร็กทอรีในสวน schema/ กอนที่จะเขาสูขั้นตอนการ deploy ที่จะ กลาวในหัวขอถัดไป โดยภายใน schema/ นั้นจะเปนที่สําหรับจัดเก็บไฟล WSDL ที่สําคัญๆ และเราตองเตรียม โครงสรางดังที่ไดแสดงไวดานบน สําหรับไฟล ogsi.wsdl และ ogsi_bindings.wsdl นั้นสามารถคัดลอกไดจาก {GLOBUS_LOCATION}/schema/ogsi
28
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
4.2 การ deploy เอา Grid service ไปยัง container Container เปนไดจัดเตรียม runtime environment เพื่อให Grid service สามารถทํางานได โดย Globus Toolkit 3 ไดจัดเตรียม container ที่ชื่อวา Catalina (ซึ่งพัฒนาโดย Apache Software Foundation) แตอยางไรก็ตาม เราสามารถเลือก container ยี่หออื่นๆไดดวย ซึ่งเราจะไมลงรายละเอียดของการใช container รายอื่น ขั้นตอนในการ deploy มีดังตอไปนี้ 1. สรางไฟล WSDD 2. จัดทําแพ็คเก็จ (Packaging) 3. ลงมือ deploy 4.2.1 สรางไฟล WSDD WSDD ยอมาจาก Web Service Deployment Description โดย WSDD เปนไฟล XML ที่อธิบายถึงรายละเอียดใน การ deploy ตัว Grid service ขึ้นไปยัง container ซึ่ง WSDD สามารถถูกสรางไดโดยการใช editor ใดๆสรางขึ้นมา โดยการอธิบายรายละเอียดของ WSDD จะมี parameter อยูหลายตัวดวยกัน ซึ่งเราไมจําเปนตองระบุ parameter บางตัวลงไปในไฟล WSDD ก็ได ทั้งนี้ก็ขึ้นอยูกับวาเราตองการให Grid service ของเราใชความสามารถใดของ Grid service บาง (เชน ตองการมี Notification หรือไม หรือตองการระบุ Service data element หรือเปลา เปนตน) แตในที่นี้ เราจะกลาวถึงการระบุ parameter พื้นฐานของ Grid service เทานั้น WSDD สําหรับการ deploy Grid service มีอยู 2 ชนิด คือ WSDD สําหรับการ deploy Grid service ซึ่ง เปนWSDD และ WSDD สําหรับการ undeploy Grid service สําหรับ WSDD สําหรับการ undeploy จะอธิบายถึง การถอดถอนเอา Grid service ออกมาจาก container WSDD สําหรับการ deploy จะตองบันทึกลงไฟลชื่อ server-deploy.wsdd และสําหรับตัวอยาง Math service เราสามารถเขียน server-deploy.wsdd ออกมาไดดังนี้ <deployment name="defaultServerConfig" xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="Math/MathFactory" provider="Handler" style="wrapped"> <parameter name="name" value="Math Factory"/> <parameter name="instance-name" value="Math Instance"/> <parameter name="instance-schemaPath" value="schema/math/math.wsdl"/> <parameter name="instance-baseClassName" value="com.hpcnc.gridservice.math.stubs.MathImpl"/>
29
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
<parameter name="allowedMethods" value="*"/> <parameter name="persistent" value="true"/> <parameter name="className" value="org.gridforum.ogsi.Factory"/> <parameter name="baseClassName" value="org.globus.ogsa.impl.ogsi.PersistentGridServiceImpl"/> <parameter name="schemaPath" value="schema/ogsi/ogsi_factory_service.wsdl"/> <parameter name="handlerClass" value="org.globus.ogsa.handlers.RPCURIProvider"/> <parameter name="factoryCallback" value="org.globus.ogsa.impl.ogsi.DynamicFactoryCallbackImpl"/> <parameter name="operationProviders" value="org.globus.ogsa.impl.ogsi.FactoryProvider"/>
จาก parameter ที่ระบุลงไปในไฟล server-deploy.wsdd นั้น เฉพาะสวนที่เปนตัวหนังสือแบบหนา คือสวนที่ Grid service อื่นๆสามารถนําไปแกไขได สําหรับสวนอื่นๆใหคงไวเชนเดิม เพราะวา Grid service ทุกๆก็ใชสวนอธิบาย เหลานี้เหมือนกัน สําหรับรายละเอียดในการแกไข parameter แตละตัวถูกอธิบายในยอหนาตอไป Parameter แรกหรือ service name เปน parameter หลักซึ่งบงบอกถึงชื่อของ Factory ซึ่งจะถูกใชตอน deploy Grid service ขึ้นไปยัง container โดยชื่อนี้จะถูกนําไปตอเติมใน GSH ของ Factory โดยในที่นี้เราระบุเปน Math/MathFactory สมมติวา URL ของ OGSA ที่ติดตั้งเขาไปใน container คือ http://localhost:8080/ogsa เราจะสามารถอางอิงถึง URL (หรือ GSH) ของ Factory ไดดังนี้คือ http://localhost:8080/ogsa/services/Math/MathFactory <service name="Math/MathFactory" provider="Handler" style="wrapped">
30
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
Parameter ตอมาคือ “name” เปนตัวที่ใชในการระบุถึงชื่อของ Factory ของ Grid service ซึ่งในที่นี้เราระบุคาเปน Math Factory <parameter name="name" value="Math Factory"/> Parameter “instance-name” เปนตัวใชบอก instance ของ Grid service ซึ่งเราระบุเปน “Math Instance” <parameter name="instance-name" value="Math Instance"/> Parameter “instance-baseClassName” ระบุถึง instance ของคลาสของ Grid service ที่เปนมอบการทํางานของ operation ของ Grid service จากตั ว อย า ง Math service เราระบุ ด ว ยค า com.hpcnc.gridservice.math.stubs.MathImpl <parameter name="instance-baseClassName" value="com.hpcnc.gridservice.math.stubs.MathImpl"/> สําหรับ WSDD ในการ undeploy หรือ server-undeploy.wsdd ของ Math service สามารถเขียนไดดังนี้ <service name="Math/MathFactory" provider="Handler" style="wrapped" />
ไฟล server-undeploy.wsdd ระบุแคเพียง paramenter เดียวคือ service name โดยในที่นี้ เราจะระบุคาเปน Math/MathFactory ซึ่งคานี้จะตองสัมพันธกับ service name ที่เราไดระบุไวใน server-deploy.wsdd 4.2.2 จัดทําแพ็คเก็จ (Packaging) การทําแพ็คเก็จคือการสราง JAR (Java Archive) file กับ GAR (Grid Archive) file ขึ้นมา โดย JAR file จะจัดเก็บ class ของ stubs รวมถึงคลาสการทํางานของ Grid service เอาไว สวน GAR file จะจัดเก็บ JAR file ที่ ไดของคลาส รวมถึง WSDD และ WSDL ไฟลที่เกี่ยวของทั้งหมด เราสามารถทําแพ็คเก็จใหกับ Math service โดยใชเครื่องมือที่ชื่อ jar ซึ่งเปนเครื่องมือที่มากับ Java Development Kit โดยวิธีการใช jar จะเหมือนกับการใช tar ที่ใชกันบน Unix jar cvf math.jar com\hpcnc\gridservice\math\stubs\*.class
31
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
jar cvf math.gar math.jar server-deploy.wsdd server-undeploy.wsdd schema\
คําสั่งแรกคือ การสราง JAR file ของ stubs และคลาสการทํางานของ Math service เราตั้งชื่อ JAR file ไววา math.jar คําสั่งที่สองเปนการสราง GAR file โดยนํา WSDD และ WSDL ที่เราไดสรางเอาไวใสเขาไป โดยเราตั้ง ชื่อ GAR file ไววา math.gar 4.2.3 ลงมือ deploy ขั้นตอนนี้เปนการ deploy Grid service ขึ้นไปยัง container โดย Globus Toolkit 3 ไดเตรียมวิธีการ deploy ผานทางเครื่องมือ Apache Ant โดยหลังจากที่รูปแบบของการ deploy เปนดังนี้
ant deploy –Dgar.name={ที่อยูของ GAR}/{GAR file}
เรา deploy Math service ไดตามคําสั่งดังนี้ ant deploy –Dgar.name=/home/g4665304/MyGridService/math.gar
โดยที่อยูของ GAR คือ /home/g4665304/MyGridService และ GAR file คือ math.gar 4.3 รัน Grid service หลังจากทําการ deploy Grid service ขึ้นไปยัง container แลว เราสามารถรัน container ขึ้นมาทํางานได ดวยเครื่องมือ Ant ที่ {GLOBUS_LOCATION} หรือรัน globus-start-container ที่อยูใน {GLOBUS_LOCATION}/bin ก็ได วิธีการรัน container ดวย Ant จะตองรันที่ {GLOBUS_LOCATION} ซึ่งทําไดดังนี้
ant startContainer
32
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
และหยุด container ดวย ANT ก็ทําที่ {GLOBUS_LOCATION} ไดดังนี้ ant stopContainer
วิธีรัน container อีกวิธีคือ รันที่ {GLOBUS_LOCATION}/bin ซึ่งทําไดดังนี้ ./globus_start_container.sh
และหยุด container ที่ {GLOBUS_LOCATION}/bin ซึ่งทําไดดังนี้ ./globus_stop_container.sh
ในที่นี้เราจะลองเรียกโปรแกรมทางฝง client ขึ้นมาเพื่อเรียกใชบริการ Math service กอนเราตองรัน container ซึ่ง เมื่อเรารัน container แลว ควรจะมีขอความตอไปนี้แสดงขึ้นมา http://127.0.0.1:8080/ogsa/services/core/admin/AdminService http://127.0.0.1:8080/ogsa/services/core/management/OgsiManagementService http://127.0.0.1:8080/ogsa/services/core/registry/ContainerRegistryService http://127.0.0.1:8080/ogsa/services/core/jmsadapter/JMSAdapterFactoryService http://127.0.0.1:8080/ogsa/services/core/logging/OgsiLoggingManagementService http://127.0.0.1:8080/ogsa/services/core/notification/httpg/NotificationSubscriptionFactoryService http://127.0.0.1:8080/ogsa/services/core/ping/PingService http://127.0.0.1:8080/ogsa/services/Math/MathFactory http://127.0.0.1:8080/ogsa/services/samples/registry/VORegistryService http://127.0.0.1:8080/ogsa/services/samples/counter/notification/CounterService http://127.0.0.1:8080/ogsa/services/samples/counter/notification/CounterFactoryService http://127.0.0.1:8080/ogsa/services/samples/counter/encoded/CounterFactoryService ….
33
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
โดยผลลัพธจากการรัน container แลว ถาหากวา Math service ได deploy ขึ้นไปบน container สําเร็จ ควรจะมี รายชื่อ Math service ปรากฏขึ้นมาในขอความดวย ดังที่บรรทัดที่เปนตัวหนาไดแสดงไว แลวเรารันคลาสฝง client ไดดังนี้ java com.hpcnc.gridservice.math.client.MathClient
ผลลัพธที่ไดควรเปนดังนี้ 10 7
ซึ่งผลลัพธที่นั้นเกิดจากการเรียกใช Math service ที่บรรทัด System.out.println(mathPort.add(10)) System.out.println(mathPort.add(-3)) โดยผลลัพธที่ไดเปนการสะสมคาของ results
กับ
ผลลัพธที่ไดนั้นเปนการสะสมคาไดนั้น เพราะคุณสมบัติ stateful ของ Grid service นั่นเอง ถาหากวา เปน Web service ผลลัพธที่ไดก็จะเปนดังนี้ 10 -3
ที่ Web service ใหผลลัพธแบบไมสะสมคาก็เพราะวา Web service ขาดคุณสมบัติ stateful หรือกลาวอีก นัยหนึ่งคือ Web service จดจําคาแบบ stateless นั่นเอง
34
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
Appendix: การติดตั้งสภาพแวดลอมสําหรับพัฒนา Grid service ติดตั้งบนระบบปฏิบัติการ Linux A.1. Java Development kit Configuration Download : j2sdk-1_4_2_02-linux-i586-rpm.bin จาก http://www.java.sun.com • ทําการติดตั้ง J2SE 1.4.2 ลงในระบบของเรา ล็อกอินเปน root แลวใช command ตอไปนี้ # cd /usr/local/ # mkdir sun- java # cd sun- java # ./ j2sdk-1_4_2_02-linux-i586-rpm.bin # rpm –ivh j2sdk-1_4_2_02-linux-i586-rpm • ทําการปรับ Configure โดยทํา ใน /etc/profile หรือ .bashrc ดังนี้ ล็อกอินเปน root แลวใช command ตอไปนี้ # vi /etc/profile if [ -z “$INPUTRC” –a ! –f “$HOME/.inputrc”]; then INPUTRC=/etc/inputrc fi JAVA_HOME = /usr/local/sun-java/j2sdk1.4.2_02 PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC …(author omits lines) # . /etc/profile สําหรับปญหาที่เคยเกิดขึ้นในการใชงานกริดเซอรวิสคือการเรียกใชงานจากฝง Client มาที่ Server ซึ่งเกิด error เกี่ยวกับ Security ซึ่งเปน error ที่มาจาก rt.jar เมื่อเราใช J2SE 1.4.2_05 ดังนั้นขอแนะนําใหใช J2SE ที่ต่ํากวา 1.4.2_05 อยางเชน 1.4.2_02 และ 1.4.2_03 A.2. Apache Ant Configuration Download : apache-ant-1.6.2-bin.tar.gz จาก http://ant.apache.org • ทําการ Unzip ant ไปยังที่ๆเราตองการ ล็อกอินเปน root แลวใช command ตอไปนี้ # cd /usr/local/ 35
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
# mkdir apache-ant # cd apache-ant # tar –xzvf /apache/apache-ant-1.6.2-bin.tar.gz ตัวอยางผลของการติดตั้ง Apache Ant apache-ant-1.6.2/bin/ant apache-ant-1.6.2/bin/runant.pl apache-ant-1.6.2/bin/antRun apache-ant-1.6.2/bin/runant.py apache-ant-1.6.2/bin/antRun.pl apache-ant-1.6.2/bin/complete-ant-cmd.pl apache-ant-1.6.2/ apache-ant-1.6.2/bin/ apache-ant-1.6.2/lib/ ...(author omits lines) apache-ant-1.6.2/etc/log.xsl apache-ant-1.6.2/LICENSE.xerces apache-ant-1.6.2/KEYS apache-ant-1.6.2/LICENSE.sax apache-ant-1.6.2/LICENSE.dom apache-ant-1.6.2/WHATSNEW apache-ant-1.6.2/welcome.html apache-ant-1.6.2/LICENSE apache-ant-1.6.2/README • ทําการ Configure โดยทําใน /etc/profile หรือ .bashrc ดังนี้ ล็อกอินเปน root แลวใช command ตอไปนี้ # vi /etc/profile if [ -z “$INPUTRC” –a ! –f “$HOME/.inputrc”]; then INPUTRC=/etc/inputrc fi ANT_HOME= /usr/local/apache-ant/ant1.6.1 JAVA_HOME = /usr/local/sun-/java/j2sdk1.4.2_02
36
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH export ANT_HOME export JAVA_HOME export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC …(author omits lines) # . /etc/profile A.3 Core OGSA Configuration Download : core-0.9.tar.gz จาก http://globus.org • ติดตั้ง Globus โดยการแก Unzip file core-0.9.tar.gz ล็อกอินเปน root แลวใช command ตอไปนี้ # mkdir globus # cd globus # tar zxvf core-0.9.tar.gz คําสั่ง ant dist ใขในการติดตั้ง OGSA โดยการ compile จาก source code # cd /home/globus/core-scr/impl/java # ant dist ตัวอยางผลที่ไดจารคําสั่ง ant dist Buildfile: build.xml setenv: [echo] Build environment for OGSA [echo] Flags (Note: If the {property name} is displayed, [echo] then the component is not present) [echo] Property values [echo] debug=true [echo] deprecation=true ...(author omits lines) [copy] Copying 31 files to /home/globus/core-src/impl/java/build/ogsa-3.2/docs [copy] Copying 17 files to /home/globus/core-src/impl/java/build/ogsa-3.2/licenses [copy] Copying 1 file to /home/globus/core-src/impl/java/build/ogsa-3.2 [copy] Copying 1 file to /home/globus/core-src/impl/java/build/ogsa-3.2
37
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
[copy] Copying 1 file to /home/globus/core-src/impl/java/build/ogsa-3.2 [copy] Copying 1 file to /home/globus/core-src/impl/java/build/ogsa-3.2 distJavaDoc: [mkdir] Created dir: /home/globus/core-src/impl/java/build/ogsa-3.2/docs/api [copy] Copying 1525 files to /home/globus/core-src/impl/java/build/ogsa3.2/docs/api dist: BUILD SUCCESSFUL Total time: 7 minutes 18 seconds • จากนั้นใหเรา Set Globus location โดยที่แกที่ /etc/profile หรือ .bashrc ดั งนี้ ล็อกอินเปน root แลวใช command ตอไปนี้ # vi /etc/profile if [ -z “$INPUTRC” –a ! –f “$HOME/.inputrc”]; then INPUTRC=/etc/inputrc fi GLOBUS_LOCATION = /home/globus/core-scr/impl/java/build/ogsa-3.2 ANT_HOME= /usr/local/apache-ant/ant1.6.1 JAVA_HOME = /usr/local/sun-/java/j2sdk1.4.2_02 PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH Export GLOBUS_LOCATION export ANT_HOME export JAVA_HOME export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC …(author omits lines) # . /etc/profile รันคําสั่ง ant setup ใชในการปรับแตง OGSA ใหเขากับระบปปฎิบัติการ # cd $GLOBUS_LOCATION # ant setup ตัวอยางผลที่ไดจากการใชคําสั่ง ant setup Buildfile: build.xml launchers: generateLaunchers: [echo] generating launcher scripts
38
Technical Report: Grid Services แปลและเรียบเรียงโดย ศิวดล ไชยศิริ Copyright 2003 © High Performance Computing and Networking Center, Thailand
setAbsoluteGlobusLocation: setClasspathScriptPath: generateLauncher: [echo] Creating launcher script globus-service-browser testUnix: generateUnix: [copy] Copying 1 file to /home/g4765412/globus/core-src/impl/java/bin …(author omits lines) setAbsoluteGlobusLocation: setClasspathScriptPath: generateLauncher: [echo] Creating launcher script ogsa-edit-wsdd testUnix: generateUnix: [copy] Copying 1 file to /home/g4765412/globus/core-src/impl/java/bin testWindows: generateWindows: testWindows: generateCoGLaunchersWindows: setup: BUILD SUCCESSFUL Total time: 7 seconds
39