Manage Transaction for WebService Part 1

posted on 19 Apr 2005 21:19 by somkiat
ผมกำลังเกี่ยวกับการจัดการ transaction สำหรับ WebService โดย requirement มีดังนี้
- มี service อยู่ n service เช่น service การจอง (Booking) กับการจ่ายเงิน (payment) โดยแต่ละ service จะไม่เกี่ยวข้องกันเป็น service ที่แยกออกจากกันโดยชัดเจน แต่เมื่อนำทั้งสอง service มาใช้งานร่วมกันจะต้องมีความเป็น Atomic เช่น ถ้าสามารถจองได้แต่จ่ายเงินไม่ผ่านหรือ failed ดังนั้นกระบวนการทำงานจะต้อง rollback หรือยกเลิกการทำงานทั้งหมดคือ ยกเลิกการจอง จากการค้นหาข้อมูลทาง internet ผมได้พบ Specification เกี่ยวกับเรื่องนี้ดังนี้
1. BTP (Business Transaction Protocol) โดย OASIS
2. WS-TX (WS-Transaction) โดย Microsoft, IBM และ BEA
3. Activity Service โดย OMG

ผมไปอ่านบทความต่างๆ เกี่ยวกับ Transaction for WebService ทำให้ทราบเหตุผลว่าทำไมการจัดการ transaction ที่เราใช้กันอยู่ใน business application ปัจจุบัน (flat transaction) นั้นไม่เหมาะสมในการจัดการ transaction ใน webservice เนื่องจากเหตุผลดังต่อไปนี้
1. เนื่องจาก WebService application นั้นเป็นแบบ Loose coupling คือจะเป็นการนำ service ต่างๆ ที่ไม่เกี่ยวข้องหรือมีการทำงานแยกออกจากกันโดยชัดเจน ดังนั้นแต่ละ service ก็จะมีการจัดการ transaction ของตัวเองซึ่งเป็น Atomic ดังนั้น tx จะเริ่มต้นและสิ้นสุดใน service ของตัวเองดังนั้นจึงไม่สามารถนำการจัดการ tx แบบเก่ามาใช้ได้

2. Long-Running Transaction ใน WebService Application นั้นอาจจะมีการทำงานในแต่ละ TX เป็นเวลานาน ซึ่งในการจัดการ TX แบบเก่าจะใช้วิธีการ log record/resource ถ้านำวิธีการนี้มาใช้ในการรวม webservice แล้วแต่ละ service /server จะไม่มีความปลอดภัยเนื่องจากจะโดน DOS attack ได้

3. Transaction Context Propagation สิ่งที่ใช้ในปัจจุบันคือ JTS ซึ่งจะมีการจัดการผ่าน IIOP protocol แต่ว่าใน WebService นั้นจะเป็น XML-based transaction context propagation โดยผ่าน WebService protocol ( SOAP/HTTP )


edit @ 2005/04/19 21:21:07

Comment

Comment:

Tweet