31 December 2008

Java SOA คืออะไร

Java SOA Service Oriented Architecture คืออะไร

SOA (Service Oriented Architecture) เป็นรูปแบบในการออกแบบระบบ (system) หรือ โปรแกรมประยุกต์ (application) แบบหนึ่ง
อย่าง object oriented เวลาออกแบบระบบ เราจะมองเป็น object หรือ class
แยกแยะระบบออกมาเป็น class และความสัมพันธ์ (relations)
แต่ SOA จะมองระบบ ประกอบด้วยการทำงานหรือบริการ (service) ต่างๆ

แล้ว service คืออะไรล่ะ?
service ก็คล้าย function หรือ method นั่นแหละ คือมีหน้าที่ทำอะไรสักอย่าง ถึงเวลาเราก็เรียกใช้
แต่ service มีลักษณะ high level และเป็นมุมมองเชิงธุรกิจมากกว่า เช่น มองระบบธนาคารประกอบด้วยบริการถอน withdrawal service, บริการฝาก deposit service
แทนที่จะมองเป็น class Customer หรือ class Teller ที่มี operation withdrawal หรือ deposit

สิ่งที่ service ทำได้ แต่ method ทั่วไปทำไม่ได้ คือ distributed system
นั่นคือแต่ละ service สามารถถูกเรียกจากต่างระบบ, host หรือ JVM กันได้
แต่ละ service มีอิสระต่อกัน ไม่ได้กระจุกติดกันอยู่ใน application หรือ jar file หนึ่ง
พูดง่าย ๆ service ก็คือ method ที่ถูกดึงมาไว้ข้างนอกนั่นเอง

ข้อดีของ service คือ loose coupling และสามารถใช้ร่วมกันได้ บางคนอาจเถียงว่า method ก็สามารถใช้ร่วมกันได้
แต่ service สามารถใช้ร่วมกันระดับ application ครับ เช่น ธนาคาร A มี Deposit service
ธนาคาร B, C สามารถเขียน application มาเรียกใช้ Deposit service ของธนาคาร A ได้ นั่นคือเป็นการ reuse ระดับ high-level ขึ้นมาอีก

SOA กัน web services

ที่ SOA เป็นพูดถึงกันมากส่วนหนึ่งก็เพราะ web services นั่นเอง ความจริง SOA ไม่ใช่ของใหม่ ถ้าเราสังเกตลักษณะของ service จะมีส่วน implementation แยกกับ interface เสมอ
เพื่อลด coupling ระหว่าง service กับผู้เรียก ซึ่งแนวคิดนี้มีใน J2EE (RMI), CORBA และ COM อยู่แล้ว นั่นคือเราสามารถใช้ RMI technology (ซึ่งเป็น distributed technology) ทำ SOA ได้

แต่ว่า จุดขายที่สำคัญของ web services คือ platform independent ผู้เรียกกับ service ไม่จำเป็นต้องเป็น platform เดียวกัน (java application เรียกใช้ .NET service) ซึ่งต่างจาก RMI ที่ต้องเป็น java หรือ CORBA ที่ต้องเป็น Java หรือ C++

ในปัจจุบันถ้า web services คือหัวใจของ SOA, XML ก็คือเส้นเลือดหล่อเลี้ยงหัวใจ เพราะ XML ทำให้ Web services เป็น platform independent technology ซึ่งช่วยให้สามารถ communicate ระหว่าง B2B หรือ new system กับ legacy system ที่เป็นต่างภาษา หรือ platform ได้

XML เป็น markup language มีลักษณะเป็น text ใครก็เปิดอ่านได้ และอ่านรู้รื่องได้ไม่ยาก ขอให้ผู้เรียกกับ service เข้าใจ xml ก็เป็น web services ได้แล้ว
ซึ่ง technology ที่เกี่ยวกับ web services ส่วนใหญ่เกี่ยวข้องกับ XML ทั้งนั้น เช่น WSDL, SOAP, BPEL

SOA กับ web services จะเป็นเครื่องมือสำคัญในการพัฒนา enterprise application ในอนาคต ด้วยจุดเด่น คือ
1. loose coupling
2. ความคล่องตัว ปรับเปลี่ยนง่าย
3. high reusability
4. ที่สำคัญช่วยลด cost ในการ mainteinence

ตามหลักการแล้ว web service สามารถเรียกข้ามองค์กร (cross organization)ได้ แต่ว่า spec บางอย่างของ Web services ยังไม่นิ่ง เช่น security, trasaction, และ QoS ต่าง ๆ
ดังนั้น การใช้ SOA ส่วนใหญ่จึงเป็นการเรียกใช้ web service ภายในองค์กรของตัวเองเท่านั้น
สิ่งที่ทำได้ตอนนี้ คือ เกาะติดความก้าวหน้าของ SOA และพิจารณาความเสี่ยงเมื่อนำ SOA มาใช้อย่างรอบคอบ เพราะ SOA ก็มีต้นทุนสูง, learning curve พอสมควร
และที่สำคัญจะได้ไม่เป็นเหยื่อคำโฆษณาของเหล่า vendor นั่นเอง

จากบทความก่อนหน้า ผมบอกว่า web service (WS) ก็คล้าย method แต่ว่าถูกดึงออกมาอยู่ข้างนอกลอย ๆ
ที่นี้เราจะทำอย่างไร เพื่อเรียกใช้มันเพื่อสร้าง application หรือ business process ที่ประกอบด้วย web service หลาย อัน

ก่อนอื่นขอแบ่งประเภทของเว็บเซอร์วิสเป็น 2 ประเภท

1. Atomic web service - เว็บเซอร์วิสทำงานด้วยตัวเอง ไม่จำเป็นต้องพึ่งพาเว็บเซอร์วิส
2. Composite web service - เว็บเซอร์วิสที่ต้องเรียกใช้เว็บเซอร์วิสอื่น เพื่อสร้าง service ของตัวเอง

จากนั้นเราแบ่งจุดประสงค์ของการเรียกใช้ WS เป็น 2 แบบ

1. เรียกใช้ เพราะเราต้องใช้จริงๆ ผู้เรียกมักเป็นend user client เช่น ผู้ใช้ส่งข้อมูลไปยัง WS ของบริษัททัวร์ เพื่อซื้อ packageทัวร์
2. เรียกใช้ เพราะจะไปให้คนอื่นใช้ต่อ ก็คือ Composite WS นั่นละ ต้องเรียกใช้หลายๆ WS มาประกอบกันเพื่อสร้าง service ของตัวเอง
เช่น WS ของบริษัททัวร์ เรียกใช้ WS ของโรงแรมเพื่อจองห้อง, สายการบินเพื่อจองตั๋ว และธนาคารเพื่อตัดยอดเงิน

การเรียกใช้ web service มี 2 วิธีหลักๆ ได้แก่

1. ใช้ Web service client API เช่น WSIF, WSE เป็นต้น ก็คือเราเขียน application (ด้วยJava หรือ .NET) ของเราไปตามปกติ
เมื่อถึงเวลาต้องเรียกใช้ WS ก็เรียกใช้ API แทน เหมือนกับการเขียนโปรแกรมปกติทั่วไป วิธีนี้เหมาะกับ end user client ที่เป็นผู้ใช้ปลายทางจริงๆ
เพราะไม่ค่อยมีการเปลี่ยนแปลงบ่อย และมักเรียกเพียงไม่กี่ service
อย่างไรก็ตามวิธีนี้ไม่เหมาะกับการสร้าง Composite WS เพราะเรามักใช้ Composite WS เพื่อสร้าง business process
(business process คือ บริการที่เห็นหรือสัมผัสได้โดยตรงจากผู้ใช้หรือลูกค้า และให้ผลตอบแทนกับองค์กร นั่นก็คือservice นอกสุดที่ให้บริการลูกค้าโดยตรงนั่นเอง)
ซึ่งมี business logic ซึ่งอาจเปลี่ยนแปลงบ่อยๆ นอกจากนี้ business goal ของการสร้างapplication ด้วย WS ก็เพื่อความคล่องตัว (agility) ปรับเปลี่ยนง่าย จะได้สอดคล้องกับสภาพธุรกิจปัจจุบันที่มีการแข่งขันสูง ดังนั้นการผูกแต่ละ WS ไว้ด้วยการ coding แบบเก่านั้น จึงไม่เหมาะกับการสร้าง business process ด้วย WS
ตามหลักการของ SOA

2. ใช้ WS ตัวกลาง (mediator) มาเรียกใช้ sub-WS นั่นคือใช้ BPEL (Business Process Execution Language) นั่นเอง
การจะสร้าง business process หรือ composite WS จาก BPEL ต้องประกอบด้วย 2 ส่วน ได้แก่
2.1 BPEL file - BPEL เป็นภาษาที่ไว้ใช้กำหนด business process ซึ่งจริงๆ แล้ว เป็นภาษา xml
ลักษณะของ BPEL คือ เป็น procedural language คล้ายกับ flow chart ทำหน้าที่กำหนดว่าจะเรียก WS ไหน, เมื่อไหร่ และอาจเก็บตัวแปรด้วย
การทำงานจะไปข้างหน้าเรื่อย ๆ จนจบไฟล์ (ลองนึกถึง file build.xml ของ Ant อาจเข้าใจ การทำงานคล้ายอย่างงั้นเลย)
2.2 BPEL engine คือ ตัวที่จะมาอ่าน BPEL ที่เราเขียน และ สร้าง composite WS ให้ทำงานตามที่กำหนดใน BPEL นั่นเอง (คล้าย Ant tool ที่อ่าน build.xml)
client ที่เรียกใช้จะเห็น composite WS ที่สร้างขึ้นเป็นเหมือน WS ทั่วไป
BPEL engine ปัจจุบันก็เช่นBPEL manager ของ oracle ซึ่ง vendor ส่วนใหญ่จะมี BPEL designer ติดมาด้วย เพื่อสร้างและแปลง flow chart เป็น bpel (อย่างที่บอกว่าbpel เป็นภาษาที่เหมือน flow chart อยู่แล้ว ไม่มีแยก function มี control flow แค่switch-case, loop และก็อย่างอื่นอีกนิดหน่อย สามารถดูตัวอย่างได้ที่ link อ้างอิง)

นอกจากนี้ BPEL ยังสนับสนุนการทำงานแบบ concurrent, asynchronous และ exception handling ด้วย อย่างไรก็ตาม BPEL ก็คือ procedural language
ที่ไว้ใช้สร้าง Composite web service โดยการระบุการเรียกใช้ WS อื่นๆ เพื่อสนับสนุนแนวความคิดของ SOA นั่นเอง

Source: SOA Service Oriented Architecture information at ct.rmutr.ac.th

No comments:

Copyright 2007-2010 © SOA Service Oriented Architecture. All Rights Reserved