คุณจำการสาธิตประเด็นสำคัญของ RedisConf ได้ไหม ถ้าใช่ คุณอาจชอบที่จะได้เห็นการพัฒนาเบื้องหลังของแอปพลิเคชันการค้าปลีก (RedisMart) ที่นำเสนอ ถ้าไม่เช่นนั้นก็ถึงเวลาดู Yiftach และ Ash นำเสนอ นี่คือลิงก์ไปยังวิดีโออีกครั้ง:
บทความนี้เป็นบทความชุดแรก ซึ่งให้ข้อมูลเชิงลึกเกี่ยวกับข้อกำหนดหลักและสถาปัตยกรรมของแอปพลิเคชันการค้าปลีก RedisMart โดยดูจากวิธีใช้งานแคตตาล็อกผลิตภัณฑ์ สินค้าคงคลังแบบเรียลไทม์แบบกระจาย และการค้นหาผลิตภัณฑ์ที่ขับเคลื่อนด้วย AI นอกจากนี้ คุณยังจะได้เห็นวิธีที่ Redis Enterprise ขับเคลื่อนฟังก์ชันทั้งหมดเหล่านั้น
ข้อกำหนด
บ่อยครั้งในการพัฒนาซอฟต์แวร์ มาเริ่มด้วยการพูดถึงข้อกำหนดพื้นฐานบางอย่างกัน ต่อไปนี้คือเรื่องราวของผู้ใช้ที่บันทึกไว้อย่างไม่เป็นทางการ:
- ในฐานะลูกค้ารายย่อย:
- ฉันต้องการมี เร็ว (<100ms เวลาในการตอบสนองแบบ end-to-end) การเข้าถึงแคตตาล็อกและรายละเอียดผลิตภัณฑ์ โดยสามารถหาสินค้าได้ ตามเกณฑ์ต่างๆ (เช่น ข้อความแบบเต็ม ช่วงราคา การให้คะแนนของลูกค้ารายอื่น หรือการค้นหาแบบเหลี่ยม) เวลาตอบสนองที่สูงส่งผลให้อัตราตีกลับสูง
- หากฉันไม่ทราบชื่อแบรนด์ของผลิตภัณฑ์หรือต้องการสิ่งที่คล้ายกับที่ฉันซื้อมาก่อน ฉันต้องการซื้อผลิตภัณฑ์ตามภาพ คงจะดีถ้าหากล้องที่ใกล้เคียงหรือใกล้เคียงกับที่ฉันมี
- ฉันต้องการการจัดส่งที่ปลอดภัย หรือสามารถซื้อออนไลน์และรับที่ร้านหรือริมทาง (คลิกและรับ)
- ในฐานะผู้จัดการสินค้าคงคลัง:
- ฉันต้องมีมุมมองสินค้าคงคลังที่ถูกต้องและแบบเรียลไทม์เพื่อมอบประสบการณ์การเติมเต็มที่เหนือกว่าให้กับลูกค้าของฉัน
- ฉันต้องการเพิ่มประสิทธิภาพสินค้าคงคลังเพื่อเก็บสินค้าที่มีความต้องการสูงไว้ในสต็อกและลดสต็อกสินค้าที่เคลื่อนไหวช้า
- ฉันต้องการมุมมองแบบเกือบเรียลไทม์ของสินค้าคงคลังในร้านค้าต่างๆ และ/หรือศูนย์ปฏิบัติตามคำสั่งซื้อเพื่อเพิ่มประสิทธิภาพสต็อก
สถาปัตยกรรม
ตอนนี้เราทราบข้อกำหนดแล้ว ให้ฉันวาดแนวคิดว่า Redis สามารถช่วยเราได้อย่างไร:
- RediSearch ช่วยให้สามารถค้นหาผลิตภัณฑ์ที่หลากหลายด้วยตัวกรองตัวเลข การค้นหาข้อความแบบเต็ม การจัดทำดัชนีทางภูมิศาสตร์ การให้คะแนน และการรวม
- ฟีเจอร์ Active-Active ของ Redis Enterprise ให้การอัปเดตตามเวลาจริงที่จำลองตามภูมิศาสตร์ในสินค้าคงคลังทั้งหมดตั้งแต่แกะกล่อง
- RedisAI, RedisGears และ RediSearch ใช้ประโยชน์จากการสร้างไปป์ไลน์การเรียนรู้ของเครื่องที่ผสานรวมฐานข้อมูลสำหรับการอนุมานแบบเรียลไทม์และการค้นหาเวกเตอร์ที่คล้ายคลึงกัน
จากที่นั่น ไม่ยากเกินไปที่จะจินตนาการถึงการออกแบบต่อไปนี้:
กล่องสีน้ำเงินแสดงถึงบริการ กล่องสีแดงแสดงฐานข้อมูลที่ใช้โดยบริการเหล่านั้น
เราปฏิบัติตามแนวทางไมโครเซอร์วิสเช่น:
- หนึ่งที่เก็บข้อมูลต่อบริการ :แต่ละบริการมีที่เก็บข้อมูลของตัวเอง และข้อมูลจะถูกแลกเปลี่ยนผ่านอินเทอร์เฟซบริการแทนที่จะเข้าถึงที่เก็บข้อมูลของบริการอื่นโดยตรง
- การคงอยู่ของคนพูดได้หลายภาษา :แต่ละบริการใช้พื้นที่เก็บข้อมูลที่เหมาะสมที่สุดตามความต้องการ พูดคุยเกี่ยวกับความคงอยู่ของหลายภาษา:Redis เป็นแพลตฟอร์มข้อมูลที่ช่วยให้คุณสามารถรวมคุณลักษณะต่างๆ และโมเดลข้อมูลที่นำเสนอโดยโมดูลต่างๆ เพื่อสร้างที่เก็บข้อมูลที่เหมาะกับความต้องการของคุณ! อาจไม่แปลกใจเลยที่เราใช้ Redis และโมดูล Redis บางตัวเพื่อใช้งานกล่องสีแดง
การนำไปใช้
RedisMart นำเสนออินเทอร์เฟซผู้ใช้ที่ให้บริการโดยเว็บแอปพลิเคชันของร้านค้าบนเว็บ RedisMart มี UI ส่วนหน้า (เว็บไซต์ขายปลีกที่ติดต่อกับลูกค้า) และ UI แบ็กเอนด์ (สำหรับจัดการสินค้าคงคลัง) เราใช้บริการมากมายที่ใช้ประโยชน์จากแอปพลิเคชันเบื้องหลัง
- การจัดซื้อ: บริการจัดซื้อ (อย่างน่าประหลาดใจ) รองรับการซื้อของลูกค้า
- สินค้าคงคลัง: บริการสินค้าคงคลังตอบคำถามเกี่ยวกับจำนวนสต็อคภายในสินค้าคงคลัง และจำนวนจะลดลงเมื่อลูกค้าซื้อสินค้า การอัปเดตสินค้าคงคลังจะถูกจำลองแบบเกือบเรียลไทม์ไปยังสินค้าคงคลังในสถานที่อื่น ๆ โดยใช้ประโยชน์จากคุณลักษณะ Active-Active ของ Redis Enterprise Redis Enterprise ใช้ประโยชน์จากประเภทข้อมูลจำลองที่ไม่มีข้อขัดแย้งเพื่อจัดการกับการอัปเดตพร้อมกัน ในกรณีนี้ ชนิดข้อมูลตัวนับค่าลบที่เป็นค่าลบที่รีเซ็ตได้จะถูกใช้เพื่อป้องกันการสูญเสียจากการตอบโต้
- แคตตาล็อกผลิตภัณฑ์ :บริการแค็ตตาล็อกผลิตภัณฑ์ให้ข้อมูลที่เกี่ยวข้องกับผลิตภัณฑ์และเสนอวิธีการที่ซับซ้อนในการค้นหาผลิตภัณฑ์ ใช้ฐานข้อมูล Redis ที่มีการปรับใช้โมดูล RediSearch + RedisJSON RedisJSON ช่วยให้เราจัดเก็บรายละเอียดผลิตภัณฑ์โดยตรงเป็นเอกสาร JSON RediSearch สามารถจัดทำดัชนี ค้นหา และค้นหาเอกสาร JSON แบบเต็ม การอัปเดตผลิตภัณฑ์สามารถเผยแพร่ข้ามไซต์ต่างๆ ได้อย่างง่ายดายโดยใช้คุณลักษณะ Active-Active ของ Redis Enterprise
- การจดจำภาพ :สุดท้าย บริการจดจำภาพมีฟังก์ชันการแสดงโมเดล AI สำหรับการค้นหาเวกเตอร์ที่คล้ายคลึงกันบนรูปภาพ ใช้ฐานข้อมูล Redis ที่ติดตั้งโมดูล RedisGears, RedisAI และ RediSearch RedisGears ช่วยให้เราสร้างไปป์ไลน์ข้อมูลและดำเนินการใกล้กับที่ข้อมูลอยู่ เราใช้ประโยชน์จาก Redis AI สำหรับการให้บริการและการอนุมานแบบจำลอง AI RediSearch ใช้ประโยชน์จากการค้นหาจริงสำหรับรูปภาพที่คล้ายกันโดยพิจารณาจากผลลัพธ์ของโมเดล AI
ดังที่ได้กล่าวไว้ก่อนหน้านี้ นี่เป็นบทความแรกของซีรีส์ โปรดคอยติดตามเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีที่เรานำบริการส่วนบุคคลไปใช้
เรดิสมาร์ท
เมื่อเรามองไปหลังม่านแล้ว มาดูหน้าตาของแอพพลิเคชั่นบนเวทีกัน
หน้าแรกแสดงหมวดหมู่ผลิตภัณฑ์หลัก การคลิกที่หมวดหมู่จะทริกเกอร์คำค้นหาผ่านบริการแค็ตตาล็อกผลิตภัณฑ์โดยส่งคืนผลิตภัณฑ์ 16 รายการแรกที่อยู่ในหมวดหมู่ดังกล่าว
ฟิลด์ "ค้นหาผลิตภัณฑ์" ช่วยให้คุณทำการค้นหาผลิตภัณฑ์แบบเต็มข้อความ ซึ่งนำไปสู่หน้าผลการค้นหาต่อไปนี้:
หน้าผลการค้นหามีสองส่วน:การค้นหาแบบ Faceted และรายการผลลัพธ์จริง การค้นหาแบบเหลี่ยมเพชรพลอยสามารถใช้เพื่อจำกัดผลการค้นหาเพิ่มเติม คุณสามารถทำได้โดยกรองตามหมวดหมู่หลัก หมวดหมู่ย่อย ราคา และการให้คะแนน เราจะพูดถึงรายละเอียดการใช้งานว่าการค้นหาแบบเหลี่ยมเพชรพลอยเกิดขึ้นได้อย่างไรด้วย RediSearch ในส่วนที่สองของชุดบล็อก ให้ฉันให้คำแนะนำโดยให้คุณดูที่มุมมองการแก้ไขข้อบกพร่องของ RedisMart:
อย่างที่คุณเห็น แท็กและการรวมมีบทบาท
การคลิกที่ไอคอนรูปกล้องเล็กๆ ที่มุมขวาบนจะทำให้คุณสามารถถ่ายภาพของสิ่งที่คุณต้องการค้นหาในแค็ตตาล็อกผลิตภัณฑ์ได้ รูปภาพต่อไปนี้ของ Doug ไม่พบ Dougs อื่นใดในฐานข้อมูลของเรา…
…แต่ก็เจอหูฟังอย่างดี
สมมติว่าคุณตัดสินใจเลือกหูฟังและต้องการซื้อ หลังจากตัดสินใจเลือกแล้ว RedisMart อนุญาตให้คุณเพิ่มลงในตะกร้าสินค้าของคุณ ในระหว่างขั้นตอนการชำระเงิน คุณสามารถตัดสินใจว่าจะให้ไปส่งหรือไปรับที่สถานที่ใกล้เคียง
การค้นหาทางภูมิศาสตร์ของ RediSearch ให้พลังแก่คุณลักษณะการรับสินค้าในท้องถิ่นนี้ มุมมองดีบักช่วยให้คุณทราบอีกครั้งว่าสิ่งนี้เกิดขึ้นได้อย่างไรในเบื้องหลัง
ทันทีที่ลูกค้าทำการซื้อเสร็จสิ้น บริการสินค้าคงคลังจะเข้ามาเกี่ยวข้องโดยการลดจำนวนสินค้าในสต็อก สิ่งนี้นำเราไปสู่ส่วนหลังของแอปพลิเคชันโดยตรง ซึ่งช่วยให้เราจัดการสินค้าคงคลังได้ RedisMart แสดงให้เห็นภาพว่ามีการอัพเดทสินค้าคงคลังทันทีในแต่ละไซต์ที่จำลองแบบได้อย่างไร การซื้อในสหรัฐอเมริกา (GCP us-central1) ทำซ้ำได้ในพริบตาไปยังยุโรป (Azure North-Europe)
เราจะกล่าวถึงรายละเอียดเพิ่มเติมในภายหลังอีกครั้ง ประเด็นหลักในที่นี้คือคุณสามารถเข้าถึงข้อมูลจากตำแหน่งที่อยู่ใกล้เคียงได้ในเวลาแฝงของเครือข่ายที่ต่ำมาก ในขณะที่การป้องกันการสูญเสียจากการตอบโต้จะถูกป้องกันเมื่อมีการแก้ไขข้อมูลพร้อมกันในหลายไซต์
คุณสามารถดูการทำงานของแอปพลิเคชันได้โดยดูวิดีโอต่อไปนี้:
สรุป
เราหวังว่าคุณจะสนุกกับการอ่านส่วนแรกของบล็อกซีรีส์เกี่ยวกับการสร้างแอปพลิเคชันค้าปลีกที่มีคุณลักษณะครบถ้วนด้วย Redis อย่างที่คุณเห็น แพลตฟอร์มข้อมูลแบบเรียลไทม์ของ Redis ช่วยให้เราจัดการกับข้อกำหนดต่างๆ เช่น การเข้าถึงทันที (เวลาแฝงแบบ end-to-end น้อยกว่า 100ms) กับข้อมูลผลิตภัณฑ์โดยใช้ประโยชน์จากความสามารถฐานข้อมูลเอกสารของ RediSearch + RedisJSON การรวมกันของ RediSearch + RedisGears + RedisAI ช่วยให้สามารถค้นหารูปภาพที่ขับเคลื่อนด้วย AI เพื่อหาผลิตภัณฑ์ที่คล้ายกันภายในแค็ตตาล็อกผลิตภัณฑ์ นอกจากนี้ยังครอบคลุมคุณลักษณะต่างๆ เช่น เหลี่ยมเพชรพลอยและการค้นหาตามภูมิศาสตร์ สุดท้ายแต่ไม่ท้ายสุด เราได้แสดงให้คุณเห็นว่าคุณสามารถสร้างสินค้าคงคลังแบบเรียลไทม์ที่จำลองตามภูมิศาสตร์ได้ง่ายๆ โดยอิงตามฟีเจอร์ Active-Active ของ Redis Enterprise ทั้งหมดนี้ แพลตฟอร์ม Redis แบบเรียลไทม์ช่วยให้บริษัทค้าปลีกส่งผลกระทบเชิงบวกต่อประสบการณ์การซื้อโดยรวม มอบประสบการณ์การเติมเต็มที่ดีที่สุดให้กับลูกค้า และเพิ่มประสิทธิภาพสินค้าคงคลังด้วยวิธีที่คุ้มค่าที่สุด
คุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับบริการส่วนบุคคลที่เรานำไปใช้กับ RedisMart หรือไม่? แล้วคอยติดตามบทความบล็อกชุดต่อไป!
ต้องการลองด้วยตัวเอง? นี่คือลิงก์บางส่วนที่จะทำให้มือของคุณสกปรกด้วย Redis เป็นแพลตฟอร์มข้อมูลแบบเรียลไทม์:
- ข้อมูลเพิ่มเติมเกี่ยวกับโมดูล
- github.com/RediSearch
- github.com/RedisJSON
- github.com/RedisGears
- github.com/RedisAI
- Redis Enterprise Cloud
- Active-Active Geo-Distribution
เครดิต
ขอบคุณมากสำหรับทุกคนที่มีส่วนร่วมในแอปพลิเคชันเดโมนี้:
- Yiftach Shoolman และ Ash Sahu สำหรับการนำเสนอแอปพลิเคชันสาธิตระหว่าง RedisConf
- ทีมการตลาด Redis (และโดยเฉพาะอย่างยิ่ง Udi Gotlieb, Ash Sahu และ Doug Tidwell และ Bryson Coles) ที่มีส่วนร่วมในรายการข้อกำหนดของแอปพลิเคชันสาธิต จัดระเบียบ RedisConf ช่วยเหลือในการออกแบบ UI และมีส่วนร่วมในโพสต์บล็อกนี้ หลี่>
- ทีม Technical Enablement (และโดยเฉพาะอย่างยิ่ง Martin Forstner, Greg Georges และ David Maier) สำหรับการปรับใช้ ทดสอบ และออกแบบแอปพลิเคชันสาธิต และสำหรับการมีส่วนร่วมในบล็อกโพสต์นี้
- ทีม CTO (และโดยเฉพาะอย่างยิ่ง Leibale Eidelman, Guy Korland) สำหรับการพัฒนาโมดูลและบริการการจดจำภาพ
- ทีมจัดการผลิตภัณฑ์ (และโดยเฉพาะอย่างยิ่ง Pieter Cailliau, Emmanuel Keller, Jonathan Salomon และ Amiram Mizne) ที่มีส่วนร่วมในรายการข้อกำหนดของแอปพลิเคชันสาธิตและสำหรับการจัดหาคุณลักษณะของผลิตภัณฑ์
- และทุกคนที่เราลืมพูดถึงที่นี่
เราต้องการอุทิศชุดบล็อกนี้ให้กับ Martin Forstner ผู้พัฒนาแอปพลิเคชัน RedisMart เป็นหลัก มันมาพร้อมกับความโศกเศร้าอย่างยิ่งที่จะแบ่งปันว่าเขาเพิ่งเสียชีวิต ความรู้ พรสวรรค์ และอารมณ์ขันของมาร์ตินไม่เป็นสองรองใคร เขาเป็นมากกว่าวิศวกรซอฟต์แวร์ของ Redis—เขาเป็นเพื่อนร่วมงาน เพื่อนร่วมทีม พี่เลี้ยง และเพื่อน หลับให้สบายนะมาร์ติน พวกเราคิดถึงคุณ!