คุณจัดการกับแนวคิดที่แบ่งใช้ในสถาปัตยกรรม microservice ได้อย่างไร?


39

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

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

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

คำตอบ:


34

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

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

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


1
สิ่งนี้ช่วยฉันได้มาก ฉันเริ่มต้นด้วยการเขียนกรณีการใช้ UI สองสามกรณีที่จะใช้สแต็กและทุกอย่างก็เข้าที่
anjunatl

1
ในตัวอย่างนี้เราควรจะทำเช่น 10 การโทรไปยังบริการผู้ใช้เพื่อรับข้อมูลผู้ใช้หากเรามี 10 ภาพในรายการของเรา? มันจะไม่เพิ่มค่าใช้จ่ายจำนวนมาก?
Ricardo Souza

1
@rcdmk คุณสามารถเพิ่มจุดสิ้นสุด REST ซึ่งรับรายการ ID หลายรายการเป็นอินพุตและส่งกลับภาพถ่ายหลายรูปเป็นเอาต์พุต มักจะทำในทางปฏิบัติด้วยเหตุผลด้านประสิทธิภาพ บางครั้งการออกแบบ API เป็นการประนีประนอมระหว่างความบริสุทธิ์และข้อควรพิจารณาในทางปฏิบัติ
Michał Kosmulski

@ MichałKosmulskiฉันต้องเริ่มการสนทนา แต่การออกแบบ StackExchange ทำให้พวกเขา :) สิ่งที่ฉันไม่ชอบเกี่ยวกับวิธีไมโครบริการในตัวอย่างนี้คือแบบสอบถามโดยตรงไปยังฐานข้อมูลพื้นฐาน (ที่ผู้ใช้และรูปภาพถูกเก็บไว้) อาจมีประสิทธิภาพมากกว่า ลองนึกภาพว่าบริการอัปสตรีมเหล่านี้ขึ้นอยู่กับบริการอัปสตรีมอื่น ๆ และอื่น ๆ การสอบถามโดยตรงไปยังแหล่งข้อมูลนั้นปลอดภัยกว่ามาก แค่ 5 เซ็นต์ของฉัน - ไม่มีอะไรเพิ่มเติม อีกครั้งฉันอยากจะอภิปรายอย่างมีประสิทธิผลในหัวข้อ แต่ StackExachange ไม่ใช่สถานที่ที่ดีสำหรับเรื่องนั้น (คุณสามารถแนะนำฟอรัมสนทนาเกี่ยวกับ microservices ได้หรือไม่)
ajukraine

@ajukraine ฉันคิดว่ามีการแชทใน stackexchange ซึ่งอาจเป็นสถานที่ที่ดีสำหรับการอภิปราย สำหรับประสิทธิภาพการทำงาน: 1. Microservices มีค่าใช้จ่ายด้านประสิทธิภาพและ 2. Microservices นั้นดีสำหรับบางสถานการณ์ แต่ไม่ใช่สำหรับผู้อื่น สำหรับการอ้างอิง: ในการเก็บข้อมูลด้วย microservice คุณมักทำสำเนาข้อมูลในเครื่องและใช้การส่งข้อความแบบอะซิงโครนัสเพื่อลดจำนวนการพึ่งพา เป็นการเปลี่ยนแปลงทางสถาปัตยกรรมที่แท้จริงไม่ใช่เพียงแค่เปลี่ยนแต่ละโมดูลของแอปพลิเคชันเป็นแอปพลิเคชันแยกต่างหากโดยอัตโนมัติ
Michał Kosmulski

4

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

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

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


คำตอบนี้และคำตอบของมิคาลช่วยให้ฉันเข้าใจ แต่คำแนะนำของเขาช่วยฉันจัดทำแผนที่บริการที่ฉันต้องการ ฉันติดอยู่ในความคิดที่ต้องการแสดงวัตถุแบบเต็มแทนที่จะเป็นเพียงการอ้างอิงถึงวัตถุ (วัตถุผู้ใช้เทียบกับ ID ผู้ใช้) ชื่นชมมากขอบคุณ!
anjunatl

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