ค้นหาข้อมูลข้ามหลายไมโครไซต์


13

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

คำตอบ:


21

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

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

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

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


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

7
@zencv น่าเสียดายที่ microservices มีค่าใช้จ่ายเช่นนี้ ความสามารถในการไต่ระดับในแนวนอนหมายความว่าการมีเพศสัมพันธ์จะต้องอ่อนแอและนี่หมายความว่าจะมีการทำสำเนาข้อมูลบ่อยครั้ง คุณยังได้รับปริมาณการใช้เครือข่ายมากขึ้นอีกด้วย ความสามารถในการปรับขนาดมักหมายถึงการลดลงของประสิทธิภาพต่อหน่วยฮาร์ดแวร์และการเลือกสถาปัตยกรรมหนึ่งไปยังอีกสถาปัตยกรรมหนึ่ง (เช่น microservices vs monolith) จะต้องคำนึงถึงการแลกเปลี่ยนนี้ด้วย
Michał Kosmulski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.