Monday, 9 July 2007

เจาะแก่น SOA ตอนที่ 3 BPEL

จากบทความก่อนหน้า ผมบอกว่า 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 นั่นเอง

บทความที่เกี่ยวข้อง

1 comment:

supharat said...

ขอบคุณมากค่ะ ที่เขียนข้อความดีๆแบบนี้