เหตุใดจึงต้องใช้บริการ (REST / SOAP) แทนที่จะเป็นห้องสมุด


22

สมมติว่าคุณกำลังมองหาการแยกแอปพลิเคชันของคุณลงในบริการ มีเหตุผลที่ดีบ้างไหมในการนำแนวทาง SOA มาใช้กับการสร้างไลบรารี่ API ที่สามารถโหลดได้โดยแอพพลิเคชั่นที่ต้องการ


6
เฮ้เนทอ่านSteve Google แพลตฟอร์ม Google Rantมันให้ข้อมูลเชิงลึกที่ยอดเยี่ยมเกี่ยวกับแพลตฟอร์ม (บริการ) คำถามเกี่ยวกับผลิตภัณฑ์ (ห้องสมุด) ...
yannis

คำตอบ:


11

ความแตกต่างอาจบอบบางระหว่างทั้งสอง ตัวอย่างเช่นใน. NET world คุณอาจมีแอพพลิเคชั่นที่จะรู้สึกเหมือนเสาหินสำหรับผู้ใช้และจะทำงานบนเครื่องเดียวกัน แต่ภายในจะถูกแยกออกเป็นบริการ WCF คุณอาจมีสถาปัตยกรรมที่ห้องสมุดไม่ได้เชื่อมโยงอย่างแน่นหนา (addins / ปลั๊กอิน) และกำลังติดตามโพรโทคอลเมื่อพูดคุยกัน

หากเราหลีกเลี่ยงการพูดคุยเกี่ยวกับกรณีตัวกลางเหล่านั้นและจัดการเฉพาะกับไลบรารี API ที่เชื่อมโยงอย่างมากกับบริการ REST แยกต่างหากคุณอาจต้องพิจารณาประเด็นต่อไปนี้:

  1. API ไลบรารีถูกเรียกใช้ในเครื่องเดียวกัน บริการสามารถโฮสต์ได้ทุกที่และถูกเรียกจากที่ใดก็ได้ หากคุณกำลังนับการโฮสต์แอปพลิเคชันบนเครื่องหลายเครื่องเพื่อเหตุผลด้านประสิทธิภาพ / ความสามารถในการปรับขนาด / ความปลอดภัยโอกาสที่คุณจะต้องใช้บริการ

  2. สถานการณ์คล้ายกันเมื่อไปใช้หนึ่งบริการโดยแอปพลิเคชันที่ปรับใช้กับเครื่องหลายเครื่อง ตัวอย่างเช่นหากคุณกำลังทำแอปพลิเคชันสำหรับธนาคารที่ทำการคำนวณทางการเงินวิธีหนึ่งคือการปรับใช้แอพพลิเคชั่นขนาดใหญ่ทั้งหมดไปยังเดสก์ท็อปทุกเครื่องและถูกบังคับให้ทำการอัปเดตขนาดใหญ่ อีกวิธีหนึ่งก็คือการโฮสต์ส่วนการคำนวณบนเซิร์ฟเวอร์และปรับใช้กับเดสก์ท็อปเฉพาะแอพเบา ๆ ที่มีเพียง UI และการโทรไปยังเซิร์ฟเวอร์เหล่านั้น

  3. หากคุณกำลังโฮสต์บริการ REST ทุกคนสามารถใช้งานได้: ผู้ใช้ Mac บุคคลที่ใช้ Linux ฯลฯ หากคุณสร้างไลบรารี C # ด้วย Visual Studio และคุณแจกจ่ายเป็น DLL ให้ลืมผู้ใช้ (ลูกค้า) ?) ใครไม่มี Windows


9

ข้อดีอีกประการของบริการคือเมื่อคุณอัปเดตบริการจะมีการปรับใช้กับผู้ใช้บริการทุกรายทันที ดังนั้นหากคุณแก้ไขข้อผิดพลาดหรือปัญหาด้านประสิทธิภาพทุกคนจะได้รับประโยชน์ทันทีที่บริการที่อัปเดตเริ่มทำงานแทนที่จะต้องเผยแพร่การอัปเดตที่คนอาจเลือกเพิกเฉย


จริง แต่นี่อาจเป็นข้อเสีย เมื่อคุณทำการเปลี่ยนแปลงในบริการที่หลาย ๆ แอพพลิเคชั่นขึ้นอยู่กับคุณสามารถทำลายฟังก์ชันการทำงานในแอพพลิเคชั่นเหล่านั้นอย่างน้อยหนึ่งอย่าง นี่ไม่ใช่การทำให้ทุกคนกลัวบริการ แต่โปรดทราบว่าคุณต้องมั่นใจว่าผู้ใช้บริการทั้งหมดยังคงทำงานอยู่ทุกครั้งที่คุณเปลี่ยนบริการ ยิ่งไปกว่านั้นคือทิ้งวิธีการให้บริการแบบดั้งเดิมไว้เพียงลำพังเมื่อมีการปรับใช้และสร้างวิธีการใหม่เมื่อคุณต้องการเปลี่ยนการใช้งาน
Lews Therin

8

ข้อดีห้องสมุด

ข้อดีบริการ:

  • ทุกคนได้รับการอัพเกรดทันทีและโปร่งใส (ยกเว้นข้อเสนอ API ที่มีรุ่น)
  • ผู้บริโภคไม่สามารถแปลรหัสได้
  • สามารถปรับขนาดฮาร์ดแวร์บริการแยกจากกัน
  • ผู้ไม่เชื่อเรื่องพระเจ้าเทคโนโลยี ด้วยห้องสมุดสาธารณะผู้บริโภคจะต้องใช้เทคโนโลยีที่รองรับ
  • ปลอดภัยยิ่งขึ้น UI ระดับสามารถเรียกบริการที่อยู่หลังไฟร์วอลล์แทนที่จะเข้าถึงฐานข้อมูลโดยตรง

"รหัสเนทีฟ" ไม่สมเหตุสมผลที่นี่: ก) บริการสามารถใช้ "เนทีฟโค้ด" ได้เช่นกันและข) การรวบรวมแบบทันเวลามักจะให้ประสิทธิภาพการทำงานเช่นเดียวกับรหัสเนทีฟ
sleske

จุดที่ถ่าย สิ่งที่ฉันหมายถึงเมื่อฉันพูดว่า "รหัสพื้นเมือง" คือห้องสมุดคือการโทร "ในกระบวนการ" ไม่มีค่าบริการของเลเยอร์ (เช่น HTTP หากทำการโทรผ่านเว็บ API)
Cory House

ใช่ค่าโสหุ้ยการโทรควรลดลงอย่างแน่นอน ฉันใช้เสรีภาพในการแก้ไขคำตอบของคุณเพื่อแทนที่การกล่าวถึง "native code" ด้วย "overhead call overhead" อย่าลังเลที่จะแก้ไขอีกครั้งหากคุณไม่เห็นด้วย :-)
sleske

สิ่งที่ฉันต้องการที่จะเพิ่มการใช้งานของการทำธุรกรรม โดยทั่วไปแล้วมันจะยากมากที่จะทำให้การทำธุรกรรมข้ามขอบเขตการให้บริการมากกว่าที่อยู่ในห้องสมุดสาธารณะ
c_mart

2

วิธี SOA ช่วยให้บริการต่างๆสามารถโฮสต์และดูแลรักษาแยกกัน นอกจากรหัสแล้วการปรับใช้บริการเฉพาะอาจต้องการการกำหนดค่าพิเศษจำนวนมาก (รหัสผ่านพอร์ตใบรับรอง ฯลฯ ) การใช้เซอร์วิส REST มีความซับซ้อนจำนวน จำกัด ซึ่งสามารถจัดทำเป็นเอกสารและเข้าใจได้ง่าย นอกจากนี้ยังมีความปลอดภัยมากขึ้นเนื่องจากคุณไม่จำเป็นต้องให้สิทธิ์การเข้าถึงฐานข้อมูลหรือทรัพยากรอื่น ๆ แก่ลูกค้า


1

หากมีการเปลี่ยนแปลงบริการ SOA บริการ SOA นั้นจะต้องได้รับการพัฒนาใหม่ทดสอบซ้ำและปรับใช้ใหม่ แอปพลิเคชันทั้งหมดที่ใช้บริการนั้นสามารถดำเนินการต่อได้ การเปลี่ยนแปลงไลบรารีใน DLL จะหมายถึงผู้บริโภคทั้งหมดของไลบรารีนั้นจะต้องได้รับการพัฒนาใหม่เพื่ออ้างอิง DLL นั้นพวกเขาทั้งหมดจะต้องได้รับการทดสอบซ้ำและพวกเขาทั้งหมดจะต้องถูกปรับใช้ใหม่ นอกจากนี้ยังมีอันตรายที่อาจเกิดขึ้นไม่ถูกต้องและแอปพลิเคชันที่แตกต่างกันจะมี DLL รุ่นที่แตกต่างกัน บางครั้งสิ่งนี้อาจไม่เป็นปัญหา - บางทีทุกระบบควรมีเวอร์ชันของไลบรารีที่มีอยู่ ณ เวลาที่ใช้งาน (คุณอาจปรับปรุงระบบการบันทึกของคุณให้มีคุณสมบัติใหม่ที่เป็นประโยชน์จริง ๆ หรือไม่จำเป็นต้องอัปเดตทุกระบบด้วยหรือไม่) ในกรณีนี้ไลบรารีใช้ได้ แต่สมมติว่าคุณมีบริการสำหรับการคำนวณอัตราภาษีและการเปลี่ยนแปลงกฎหมายภาษี คุณไม่ต้องการอัปเดตทุกระบบเพื่อรวมการเปลี่ยนแปลงนี้จะเป็นการดีกว่าที่จะทำในที่เดียว ในกรณีนี้บริการเป็นตัวเลือกที่ดีกว่า


0

มีคำตอบที่ดีหลายอย่าง แต่ฉันต้องการเพิ่มสิ่งเพิ่มเติมในคำตอบที่ให้:

วิธีการไลบรารี API มีประโยชน์มากเมื่อคุณต้องการโต้ตอบกับสิ่งต่าง ๆ ด้วยค่าใช้จ่ายน้อยที่สุดเท่าที่จะทำได้ ผลที่ตามมาคือมีการเชื่อมต่อที่สูงขึ้นระหว่าง API และแอปพลิเคชันที่ใช้งาน บางครั้งมันก็โอเคสำหรับแอพพลิเคชั่นและจำเป็นอย่างไรก็ตามถ้าคุณมีระบบการกระจายที่มากหรือคุณคิดว่าการทำงานร่วมกันเป็นปัญหาใหญ่คุณอาจต้องก้าวไปข้างหน้าในสิ่งที่เป็นนามธรรมและใช้วิธีการสื่อสารอื่น ๆ โดยเฉพาะอย่างยิ่งถ้าคุณต้องการมีระบบกระจาย SOAP เป็นขั้นตอนต่อไปใน SOA แต่คุณจะยังคงพึ่งพาการพึ่งพาระหว่างหน่วยเนื่องจากพวกเขาต้องรู้ขั้นตอนของกันและกัน ส่วนที่เหลือนำไปสู่ระดับใหม่โดยอนุญาตให้เครื่องเรียนรู้บางอย่างเกี่ยวกับเนื้อหาในบริการอื่น ๆ ในลักษณะที่เป็นหนึ่งเดียว

ในกรณีของคุณหากใบสมัครของคุณไม่ได้รับการเผยแพร่ฉันไม่เห็นเหตุผลที่จะเปลี่ยนแอปพลิเคชันของคุณเป็น SOA

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.