หนึ่งในหลักการออกแบบการบริการ SOA หลักคือหลักการบริการการรวมบริการ ( https://en.wikipedia.org/wiki/Service_composability_principle )
แนวคิดก็คือการสร้างบริการใหม่โดยใช้สิ่งที่มีอยู่เป็นหน่วยการสร้างจะสามารถพัฒนาบริการใหม่ได้อย่างรวดเร็ว ชนิดคล้ายกับวิธีที่คุณเรียกวิธีการที่มีอยู่ของวัตถุเมื่อคุณใช้วิธีการใหม่ นี่คือสิ่งที่การเพิ่มประสิทธิภาพการผลิตส่วนใหญ่จาก SOA ควรมาจาก
มีคนทำสิ่งนี้จริงๆในทางปฏิบัติหรือไม่? ฉันได้เห็นสิ่งนี้ซ้ำไปซ้ำมาอย่างไม่มีที่สิ้นสุดในข้อความที่เป็นลายลักษณ์อักษร แต่ยังไม่เคยมีประสบการณ์การใช้งานจริงมาใช้ ข้อความส่วนใหญ่ไม่ได้กล่าวถึงการจัดการธุรกรรมใด ๆซึ่งดูเหมือนว่าฉันจะเป็นอุปสรรคที่ใหญ่ที่สุดในการตระหนักถึงบริการที่รวบรวมได้
ก่อนอื่นคุณต้องแก้ไขปัญหาการทำธุรกรรมก่อนที่จะสามารถเขียนบริการที่ไม่สำคัญ แน่นอนถ้าตัวอย่างมีบริการ "findCurrentTime ()" และ "writeLogMessage ()" มันง่ายที่จะไม่กังวลเกี่ยวกับการทำธุรกรรม แต่ไม่เมื่อมีตัวอย่างในโลกแห่งความจริงเช่น "depositMoney ()" และ "drawMoney () "
ฉันรู้สองตัวเลือก:
- ใช้งานธุรกรรมจริงกับ WS-Atomic Transaction หรือ
- ใช้โซลูชันที่อิงตามค่าตอบแทนซึ่งชดเชยการเรียกไปยัง A ด้วย "CancA ()" หรือ somesuch หากการเรียกไปยัง B ล้มเหลว
ทั้งสองอย่างดูมีปัญหามาก / ใกล้จะใช้ไม่ได้กับฉัน:
- ธุรกรรม WS-Atomic
- จำนวนมากของความซับซ้อนคำแนะนำมากที่สุดที่ผมพบว่าเพียงแค่เตือน "อาการปวดในตูด, อย่าทำมัน"
- การสนับสนุนมี จำกัด ตัวอย่างเช่นถ้าคุณใช้ ESB แบบโอเพ่นซอร์สตัวเลือกหลัก ServiceMix, Mule หรือ WSO2 ไม่รองรับ
- ค่าตอบแทน
- การใช้การจัดการค่าตอบแทนนั้นซับซ้อนมากสำหรับฉัน เราจะทำอย่างไรถ้าบริการ A ประสบความสำเร็จและเราไม่เคยได้รับคำตอบจากบริการ B และไม่ทราบว่ามันล้มเหลวหรือสำเร็จ การจัดการตรรกะดังกล่าวด้วยตนเอง (ในฐานะผู้ดำเนินการด้านการจัดองค์ประกอบบริการ) ทำให้ฉันต้องการที่จะกรีดข้อมือ - นี่เป็นงานประเภทหนึ่งที่เครื่องมือบางอย่างควรทำเพื่อฉัน!
- ฉันยังไม่เห็นว่าคุณสามารถมีวิธีการชดเชยในบริการที่ไม่สำคัญได้อย่างไร บอกว่าบริการของคุณคือ "depositMoney ()" และประสบความสำเร็จการกระทำอื่น ๆ จะโอนเงินไปที่อื่นอย่างรวดเร็วและจากนั้นเราได้รับ "offsetateDepositMoney ()" เราจะทำอย่างไร ดูเหมือนเวิร์มกระป๋องขนาดใหญ่
สำหรับผมแล้วมันดูเหมือนว่าองค์ประกอบของบริการดังกล่าวเป็นหลักการ SOA พื้นฐานที่คุณจริงๆไม่ได้รับประโยชน์ของ SOA ถ้าคุณไม่สามารถ (สิ่งอำนวยความสะดวก) บริการให้เขียน ความจริงคืออะไร 90% ของผู้ใช้ SOA ใช้ "criplled SOA" โดยไม่ต้องใช้บริการจริงหรือไม่ หรือผู้ใช้ส่วนใหญ่ทำในความเป็นจริงใช้องค์ประกอบบริการและฉันกำลังพูดเกินจริงความยากลำบากของมัน?