จัดเตรียม microservices


200

รูปแบบมาตรฐานของ microservices จัดรูปแบบคืออะไร

หาก microservice รู้เฉพาะเกี่ยวกับโดเมนของตัวเอง แต่มีการไหลของข้อมูลที่ต้องการให้บริการหลายอย่างมีปฏิสัมพันธ์ในบางลักษณะวิธีการเกี่ยวกับมันคืออะไร?

สมมติว่าเรามีสิ่งนี้:

  • ออกใบแจ้งหนี้
  • การส่งสินค้า

และเพื่อประโยชน์ของการโต้แย้งสมมติว่าเมื่อมีการส่งคำสั่งซื้อควรสร้างใบแจ้งหนี้

ที่ไหนสักแห่งมีคนกดปุ่มในGUI"ฉันเสร็จแล้วลองทำสิ่งนี้!" ในสถาปัตยกรรมบริการ monolith แบบคลาสสิกฉันจะบอกว่ามีทั้งการESBจัดการนี้หรือบริการการจัดส่งมีความรู้เกี่ยวกับบริการใบแจ้งหนี้และเพียงเรียกว่า

แต่อะไรคือวิธีที่ผู้คนจัดการกับสิ่งนี้ในโลกใหม่ที่กล้าหาญของการบริการระดับไมโคร?

ฉันเข้าใจว่าเรื่องนี้ถือได้ว่าเป็นความคิดเห็นอย่างสูง แต่มีด้านที่เป็นรูปธรรมสำหรับมันเนื่องจาก microservices ไม่ควรทำข้างต้น ดังนั้นจะต้องมี "สิ่งที่ควรตามนิยามทำแทน" ซึ่งไม่ได้อิงตามความคิดเห็น

ยิง.

คำตอบ:


316

Microservices อาคารหนังสืออธิบายรายละเอียดสไตล์ที่กล่าวถึงโดย @RogerAlsing ในคำตอบของเขา

ในหน้า 43 ภายใต้ Orchestration vs Choreography หนังสือเล่มนี้พูดว่า:

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

หนังสือเล่มนี้อธิบายวิธีสองสไตล์ orchestration style สอดคล้องกับแนวคิด SOA ของorchestration / task servicesในขณะที่สไตล์ท่าเต้นนั้นสอดคล้องกับท่อ dumb และจุดปลายอัจฉริยะที่กล่าวถึงในบทความของ Martin Fowler

สไตล์ออเคสตร้า

ภายใต้สไตล์นี้หนังสือด้านบนกล่าวถึง:

ลองคิดดูว่าการแก้ปัญหาออเคสตร้าจะเป็นอย่างไรสำหรับโฟลว์นี้ ที่นี่สิ่งที่ง่ายที่สุดที่ควรทำคือให้บริการลูกค้าของเราทำหน้าที่เป็นศูนย์กลางสมอง ในการสร้างมันพูดคุยกับธนาคารคะแนนความภักดีบริการอีเมลและบริการไปรษณีย์ [... ] ผ่านชุดของการร้องขอ / ตอบสนองการโทร ฝ่ายบริการลูกค้าสามารถติดตามตำแหน่งที่ลูกค้าอยู่ในกระบวนการนี้ สามารถตรวจสอบเพื่อดูว่าบัญชีของลูกค้าได้รับการตั้งค่าหรืออีเมลที่ส่งหรือโพสต์ส่ง เราจะนำ flowchart [... ] และวางมันลงในโค้ดโดยตรง เราสามารถใช้เครื่องมือที่ใช้สำหรับเราหรืออาจใช้เครื่องมือสร้างกฎที่เหมาะสม มีเครื่องมือทางการค้าสำหรับจุดประสงค์นี้ในรูปแบบของซอฟต์แวร์การสร้างแบบจำลองกระบวนการทางธุรกิจ สมมติว่าเราใช้คำขอ / ตอบสนองแบบซิงโครนัส เราสามารถทราบได้ว่าแต่ละขั้นตอนทำงาน [... ] ข้อเสียของแนวทางการประสานงานนี้คือการบริการลูกค้าสามารถกลายเป็นอำนาจการปกครองที่มากเกินไปหรือไม่ มันสามารถกลายเป็นฮับที่อยู่ตรงกลางของเว็บและเป็นจุดศูนย์กลางที่ตรรกะเริ่มมีชีวิตอยู่ ฉันได้เห็นวิธีการนี้ส่งผลให้บริการ“ เทพเจ้า” อันชาญฉลาดจำนวนน้อยบอกกับบริการ CRUD เกี่ยวกับโลหิตจางว่าควรทำอะไร

หมายเหตุ: ฉันคิดว่าเมื่อผู้เขียนกล่าวถึงเครื่องมือเขาอ้างถึงบางสิ่งบางอย่างเช่นBPM (เช่นกิจกรรม , Apache ODE , Camunda ) ตามความเป็นจริงเว็บไซต์รูปแบบเวิร์กโฟลว์มีชุดรูปแบบที่ยอดเยี่ยมในการทำ orchestration ชนิดนี้และยังมีรายละเอียดการประเมินผลของเครื่องมือผู้จำหน่ายต่าง ๆ ที่ช่วยในการปรับใช้วิธีนี้ ฉันไม่คิดว่าผู้เขียนบอกเป็นนัยว่าจำเป็นต้องใช้เครื่องมืออย่างใดอย่างหนึ่งเหล่านี้เพื่อใช้การรวมรูปแบบนี้ แต่สามารถใช้เฟรมเวิร์ก orchestration น้ำหนักเบาอื่น ๆ เช่นSpring Integration , Apache CamelหรือMule ESB

อย่างไรก็ตามหนังสือเล่มอื่น ๆ ที่ฉันได้อ่านในหัวข้อของ Microservices และโดยทั่วไปบทความส่วนใหญ่ที่ฉันพบในเว็บดูเหมือนจะไม่ชอบแนวทางการประสานเสียงและแทนที่จะแนะนำให้ใช้หนังสือเล่มต่อไปแทน

สไตล์การออกแบบท่าเต้น

ภายใต้สไตล์การออกแบบท่าเต้นผู้เขียนพูดว่า:

ด้วยวิธีออกแบบท่าเต้นเราสามารถให้บริการลูกค้าปล่อยเหตุการณ์ในลักษณะอะซิงโครนัสแทนที่จะบอกว่าลูกค้าสร้างขึ้น บริการอีเมลบริการไปรษณีย์และธนาคารคะแนนความภักดีจากนั้นเพียงสมัครสมาชิกกับกิจกรรมเหล่านี้และตอบสนองตาม [... ] วิธีการนี้เป็นวิธีที่ดีกว่า หากบริการอื่น ๆ จำเป็นต้องเข้าถึงการสร้างลูกค้าเพียงแค่ต้องสมัครรับข้อมูลกิจกรรมและทำงานเมื่อจำเป็น ข้อเสียคือมุมมองที่ชัดเจนของกระบวนการทางธุรกิจที่เราเห็นใน [เวิร์กโฟลว์] ตอนนี้สะท้อนให้เห็นโดยเฉพาะในระบบของเรา [... ] ซึ่งหมายความว่าจำเป็นต้องมีงานเพิ่มเติมเพื่อให้แน่ใจว่าคุณสามารถตรวจสอบและติดตามสิ่งที่ถูกต้องได้ ที่เกิดขึ้น ตัวอย่างเช่น, คุณจะทราบได้ไหมว่าธนาคารคะแนนสะสมมีข้อผิดพลาดและด้วยเหตุผลบางอย่างไม่ได้ตั้งค่าบัญชีที่ถูกต้อง? วิธีหนึ่งที่ฉันชอบในการจัดการกับสิ่งนี้คือการสร้างระบบการตรวจสอบที่ตรงกับมุมมองของกระบวนการทางธุรกิจใน [เวิร์กโฟลว์] แต่จากนั้นติดตามว่าแต่ละบริการทำอะไรในฐานะองค์กรอิสระทำให้คุณเห็นข้อยกเว้นแปลก ๆ ผังกระบวนการที่ชัดเจนยิ่งขึ้น [flowchart] [... ] ไม่ใช่แรงผลักดัน แต่มีเพียงเลนส์เดียวที่เราสามารถเห็นได้ว่าระบบทำงานอย่างไร โดยทั่วไปแล้วฉันได้พบว่าระบบที่มีแนวโน้มมากขึ้นในการออกแบบท่าเต้นนั้นมีการเชื่อมโยงกันอย่างหลวม ๆ และมีความยืดหยุ่นและคล้อยตามการเปลี่ยนแปลงได้มากขึ้น อย่างไรก็ตามคุณต้องทำงานพิเศษเพื่อติดตามและติดตามกระบวนการข้ามขอบเขตระบบ ฉันพบว่าการใช้งานที่มีการเตรียมการอย่างหนักส่วนใหญ่มีความเปราะมากและมีค่าใช้จ่ายในการเปลี่ยนแปลงที่สูงขึ้น ด้วยความคิดนั้นฉันจึงชอบที่จะเล็งไปที่ระบบการออกแบบท่าเต้นที่ซึ่งการบริการแต่ละอย่างนั้นฉลาดพอที่จะเข้าใจบทบาทของมันในการเต้นทั้งหมด

หมายเหตุ: จนถึงวันนี้ฉันยังไม่แน่ใจว่าการออกแบบท่าเต้นเป็นเพียงอีกชื่อหนึ่งสำหรับสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ (EDA) แต่ถ้า EDA เป็นวิธีเดียวที่จะทำ (ดูที่ "การขับเคลื่อนเหตุการณ์" หมายถึงอะไรและความหมายของสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ ) นอกจากนี้ดูเหมือนว่าสิ่งต่าง ๆ เช่น CQRS และ EventSourcing จะสะท้อนเสียงดังมากด้วยรูปแบบสถาปัตยกรรมนี้ใช่ไหม

หลังจากนี้มาถึงความสนุกสนาน หนังสือ Microservices ไม่ถือว่า microservices นั้นจะถูกนำไปใช้กับ REST ตามความเป็นจริงในส่วนถัดไปในหนังสือพวกเขาดำเนินการพิจารณาโซลูชันที่ใช้ RPC และ SOA และในที่สุดก็ใช้ REST จุดสำคัญที่นี่คือ Microservices ไม่ได้หมายความว่า REST

ดังนั้นสิ่งที่เกี่ยวกับ HATEOAS (Hypermedia เป็นเอ็นจินของสถานะแอปพลิเคชัน)

ตอนนี้ถ้าเราต้องการทำตามวิธี RESTful เราไม่สามารถเพิกเฉยต่อ HATEOAS หรือ Roy Fielding จะยินดีมากที่จะพูดในบล็อกของเขาว่าโซลูชันของเราไม่ใช่ REST อย่างแท้จริง ดูโพสต์บล็อกของเขาในREST API ต้องเป็น Hypertext Driven :

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

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

ตาม HATEOAS ลิงก์เดียวที่ผู้ใช้ API ต้องการทราบอย่างแท้จริงคือลิงก์ที่เริ่มต้นการสื่อสารกับเซิร์ฟเวอร์ (เช่น POST / คำสั่งซื้อ) จากจุดนี้เป็นต้นไป REST จะดำเนินการไหลเนื่องจากในการตอบสนองของจุดสิ้นสุดนี้ทรัพยากรที่ส่งคืนจะมีลิงก์ไปยังสถานะที่เป็นไปได้ถัดไป ผู้บริโภค API จะตัดสินใจว่าลิงก์ใดที่จะติดตามและย้ายแอปพลิเคชันไปยังสถานะถัดไป

แม้จะฟังดูดีแค่ไหนลูกค้าก็ยังต้องรู้ว่าลิงค์นั้นต้องโพสต์โพสต์เอาต์แพทช์และอื่น ๆ และลูกค้ายังต้องตัดสินใจว่าเพย์โหลดใดจะผ่าน ลูกค้ายังต้องระวังว่าจะทำอย่างไรหากล้มเหลว (ลองอีกครั้งชดเชยชดเชยยกเลิกเป็นต้น)

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

ฉันคิดว่าเราสามารถใช้ HATEOAS กับการบรรเลงหรือการออกแบบท่าเต้น

รูปแบบเกตเวย์ API

อีกรูปแบบที่น่าสนใจคือการแนะนำโดยคริสริชาร์ดที่ยังนำเสนอสิ่งที่เขาเรียกว่าแบบ API เกตเวย์

ในสถาปัตยกรรมแบบเสาหินไคลเอนต์ของแอปพลิเคชันเช่นเว็บเบราว์เซอร์และแอปพลิเคชันดั้งเดิมทำการร้องขอ HTTP ผ่านตัวโหลดบาลานซ์ไปยังอินสแตนซ์ N ตัวใดตัวหนึ่งของแอปพลิเคชัน แต่ในสถาปัตยกรรมไมโครเซอร์วิสเสาหินถูกแทนที่ด้วยชุดของบริการ ดังนั้นคำถามสำคัญที่เราต้องตอบคือลูกค้ามีปฏิสัมพันธ์กับอะไร

แอปพลิเคชันไคลเอนต์เช่นแอปพลิเคชันมือถือแบบดั้งเดิมสามารถส่งคำขอ RESTful HTTP ไปยังบริการส่วนบุคคล [... ] บนพื้นผิวสิ่งนี้อาจดูน่าสนใจ อย่างไรก็ตามมีแนวโน้มที่จะมีความไม่ตรงกันอย่างมีนัยสำคัญในเรื่องละเอียดระหว่าง APIs ของแต่ละบริการและข้อมูลที่ลูกค้าต้องการ ตัวอย่างเช่นการแสดงหน้าเว็บเดียวอาจต้องมีการโทรไปยังบริการจำนวนมาก ตัวอย่างเช่น Amazon.com อธิบายว่าบางหน้าต้องมีการโทรไปยังบริการ 100+ การร้องขอจำนวนมากแม้ผ่านการเชื่อมต่ออินเทอร์เน็ตความเร็วสูงทำให้เครือข่ายมือถือที่มีแบนด์วิดธ์ต่ำกว่าความหน่วงแฝงที่สูงกว่านั้นจะไม่มีประสิทธิภาพและทำให้ผู้ใช้มีประสบการณ์ที่ไม่ดี

วิธีที่ดีกว่ามากสำหรับลูกค้าที่จะทำการร้องขอจำนวนน้อยต่อหน้าอาจจะน้อยเพียงหนึ่งครั้งผ่านทางอินเทอร์เน็ตไปยังเซิร์ฟเวอร์ส่วนหน้าหรือที่เรียกว่าเกตเวย์ API

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

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

เกตเวย์ API ไม่เพียงเพิ่มประสิทธิภาพการสื่อสารระหว่างไคลเอนต์และแอปพลิเคชัน แต่ยังรวมถึงรายละเอียดของไมโครไซต์ สิ่งนี้ทำให้ microservices พัฒนาโดยไม่ส่งผลกระทบต่อลูกค้า ตัวอย่างเช่นสอง microservices อาจถูกรวมเข้าด้วยกัน microservice อื่นอาจถูกแบ่งพาร์ติชันเป็นสองบริการขึ้นไป ต้องอัปเดตเกตเวย์ API เท่านั้นเพื่อให้สอดคล้องกับการเปลี่ยนแปลงเหล่านี้ ลูกค้าไม่ได้รับผลกระทบ

ตอนนี้เราได้ดูว่า API เกตเวย์ไกล่เกลี่ยระหว่างแอปพลิเคชันและไคลเอนต์ตอนนี้มาดูวิธีการใช้การสื่อสารระหว่างไมโครไซต์

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


15
คำตอบที่ดี! คำถามหนึ่ง: ถ้าฉันรวม Microservices สไตล์ท่าเต้นกับ API-Gateway, API-Gateway จะไม่เปลี่ยนเป็นอำนาจการปกครองส่วนกลางที่คุณอธิบายว่าเป็นข้อเสียของ Microservices สไตล์ Orchestration หรือไม่? หรือกล่าวอีกนัยหนึ่งว่าความแตกต่างระหว่าง "รูปแบบ Orchestration" และรูปแบบ API-Gateway คืออะไร
Fritz Duchardt

4
@ FritzDuchardt ไม่ถูกต้อง ในขณะที่ api-gateway กลายเป็นจุดล้มเหลวเพียงจุดเดียว แต่ก็ไม่จำเป็นต้องมีอำนาจในการปกครองใด ๆ api-gateway ที่ง่ายมากอาจรับรองความถูกต้องของคำขอและมอบให้กับบริการเป้าหมายของพวกเขา รูปแบบ api-gateway ส่วนใหญ่สำหรับการลดความซับซ้อนของการโต้ตอบของลูกค้าแบ็กเอนด์ผ่านบริการเดียวมันไม่ได้แก้ปัญหาโดยตรงของการประสานงานหรือออกแบบท่าเต้นการบริการพร็อกซี API - เกตเวย์ (ซึ่งตัวเองเป็นบริการ)
Porlune

คำตอบที่ดี! คำถามเพียงข้อเดียวเกี่ยวกับเกตเวย์ API: GraphQL เป็นเกตเวย์ API รุ่นต่อไปและอาจแทนที่เกตเวย์ API ได้หรือไม่
kenneho

ฉันพยายามที่จะเข้าใจสิ่งนี้จากมุมมองที่ใช้งานได้จริง การออกแบบท่าเต้นควบคู่กันมากขึ้น -> ในกรณีนั้นควรเพิ่ม eventListener แบบไดนามิกในเมธอด api? มิฉะนั้นหากไม่ใช่วิธีการ API แต่ละวิธีจะตอบสนองต่อเหตุการณ์ที่ได้รับเสมอ (-> และดังนั้นจึงไม่ได้เป็นแบบคู่ขนานอย่างหลวม ๆ )
Vincent

ฉันไม่เห็นด้วยว่าการออกแบบท่าเต้นนั้นมีความสัมพันธ์กันอย่างหลวม ๆ ดังนั้นการประสานงานจึงจำเป็นต้องหลีกเลี่ยงด้วยไมโครไซต์ ผมได้พูดคุยเกี่ยวกับที่เช่นในberndruecker.io/complex-event-flows-in-distributed-systems คุณต้องการวิธีการที่สมดุลมากขึ้นในสถาปัตยกรรมของคุณ
Bernd Ruecker

35

พยายามรวมวิธีการต่าง ๆ ที่นี่

กิจกรรมโดเมน

วิธีการที่โดดเด่นสำหรับเรื่องนี้ดูเหมือนว่าจะใช้เหตุการณ์โดเมนที่แต่ละบริการเผยแพร่กิจกรรมเกี่ยวกับสิ่งที่เกิดขึ้นและบริการอื่น ๆ สามารถสมัครสมาชิกกับเหตุการณ์เหล่านั้น ดูเหมือนว่าสิ่งนี้จะเข้ากันได้กับแนวคิดของจุดปลายสมาร์ทท่อใบ้ที่ Martin Fowler อธิบายไว้ที่นี่: http://martinfowler.com/articles/microservices.html#SmartEndpointsAndDumbPipes

กิจกรรมโดเมน

หนังสือมอบฉันทะ

สิ่งที่ดูเหมือนเป็นเรื่องธรรมดาก็คือการปิดเส้นทางธุรกิจในบริการของตัวเอง จุดที่พร็อกซีจัดการการโต้ตอบระหว่างไมโครไซต์เช่นที่แสดงในภาพด้านล่าง:

ผู้รับมอบฉันทะ.

รูปแบบอื่น ๆ ขององค์ประกอบ

นี้หน้ามีรูปแบบองค์ประกอบต่างๆ


นี่คือวิดีโอที่ดีรูปแบบอื่น ๆ คืออะไรและคุณสามารถรวมวิดีโอเหล่านี้ได้อย่างไรyoutu.be/tSN1gOVQfPs?t=35m35sแนะนำให้เพิ่มพวกเขาในการตอบกลับของคุณ
Grygoriy Gonchar

รูปภาพ Nic @Roger เครื่องมือใดที่คุณใช้อยู่?
Selvakumar Esra

1
@SelvakumarEsra draw.io
Roger Johansson

7

ดังนั้น orchestration ของ microservices แตกต่างจาก orchestration ของบริการ SOA แบบเก่าที่ไม่ใช่ "micro" อย่างไร ไม่มากเลย

Microservices มักจะสื่อสารโดยใช้ http (REST) ​​หรือการส่งข้อความ / กิจกรรม Orchestration มักเชื่อมโยงกับแพลตฟอร์ม orchestration ที่ให้คุณสร้างการโต้ตอบสคริปต์ระหว่างบริการเพื่อทำให้เวิร์กโฟลว์อัตโนมัติ ในอดีต SOA วันแพลตฟอร์มเหล่านี้ใช้ WS-BPEL เครื่องมือของวันนี้ไม่ใช้ BPEL ตัวอย่างของผลิตภัณฑ์ orchestration ที่ทันสมัย: Netflix Conductor, Camunda, Zeebe, Azure Logic Apps, Baker

โปรดทราบว่า orchestration เป็นรูปแบบผสมที่มีความสามารถหลายประการในการสร้างบริการที่ซับซ้อน บริการ Microservices มักถูกมองว่าเป็นบริการที่ไม่ควรมีส่วนร่วมในองค์ประกอบที่ซับซ้อน

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


ควรสังเกตว่า "เครื่องมือของวันนี้" ในโพสต์ของคุณยังคงใช้ประโยชน์จากกิจกรรมข้อมูลและกิจกรรมในบางรูปแบบเพื่อ "จำลอง" โฟลว์ - camunda ใช้ BPMN ซึ่งใกล้กับ BPEL และอื่น ๆ มีเพียง กำหนด DSL ของตนเองเพื่อแสดงแนวคิดที่คล้ายกัน
Hightower

5

ดังนั้นคุณมีสองบริการ:

  1. บริการไมโครใบแจ้งหนี้
  2. การจัดส่งบริการไมโคร

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

  • GUI ที่ใช้งานง่ายรู้บริการทั้งหมดของคุณและใช้งานกรณีการใช้งาน ("ฉันเสร็จแล้ว" เรียกบริการจัดส่ง)
  • เอ็นจินกระบวนการทางธุรกิจซึ่งรอเหตุการณ์ "ฉันเสร็จแล้ว" เครื่องยนต์นี้ใช้กรณีการใช้งานและการไหล
  • บริการไมโคร orchestration สมมุติว่าบริการประมวลผลคำสั่งนั้นรู้กรณีการไหล / การใช้โดเมนของคุณ
  • อะไรก็ได้ที่ฉันไม่ได้คิด

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

HTH มาร์ค


1

หากรัฐจำเป็นต้องได้รับการจัดการการจัดหากิจกรรมด้วย CQRS เป็นวิธีการสื่อสารในอุดมคติ อื่นระบบการส่งข้อความแบบอะซิงโครนัส (AMQP) สามารถใช้สำหรับการสื่อสารระหว่างไมโครบริการ

จากคำถามของคุณเป็นที่ชัดเจนว่า ES กับ CQRS ควรเป็นส่วนผสมที่เหมาะสม ถ้าใช้ java ลองดูที่ Axon framework หรือสร้างโซลูชันที่กำหนดเองโดยใช้ Kafka หรือ RabbitMQ


-2

ฉันได้เขียนบทความเล็กน้อยในหัวข้อนี้:

บางทีการโพสต์เหล่านี้อาจช่วยได้:

รูปแบบเกตเวย์ API - API ที่ทำให้เป็นเม็ดเล็กเทียบกับ apis ที่ละเอียด

https://www.linkedin.com/pulse/api-gateway-pattern-ronen-hamias/ https://www.linkedin.com/pulse/successfulapi-ronen-hamias/

API บริการแบบหยาบเทียบกับ Fine-grained

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


-2

คำตอบสำหรับคำถามเดิมคือรูปแบบ SAGA


4
สนใจที่จะขยายคำตอบของคุณ?
Patrick Mevzek

Saga พยายามเลียนแบบธุรกรรมสำหรับการดำเนินการแต่ละครั้งที่คุณให้การดำเนินการเลิกทำ หากสายการปฏิบัติการล้มเหลวการยกเลิกการดำเนินการจะถูกเรียกกลับไปที่จุดเริ่มต้น
sschrass

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