คุณจำ demo keynote ของ RedisConf ไหม? ถ้าจำได้ คุณอาจชอบดูการพัฒนาด้านหลังม่านของแอปพลิเคชันรีเทล (RedisMart) ที่นำเสนอ ถ้ายังไม่เคยดู ก็ถึงเวลาดู Yiftach และ Ash นำเสนอแล้ว ลิงก์วิดีโอนี่แหละ:
บทความนี้เป็นบทความแรกของชุด มันให้ข้อมูลเชิงลึกเกี่ยวกับข้อกำหนดหลักและสถาปัตยกรรมของแอปพลิเคชันรีเทล RedisMart โดยดูว่าสามารถนำไปใช้ได้อย่างไร: แคตตาล็อกสินค้า สต็อกสินค้าจริงแบบกระจายแบบเรียลไทม์ และการค้นหาสินค้าด้วย AI ทั้งนี้คุณจะเห็นว่า Redis Enterprise จับฟังก์ชันทั้งหมดนี้ได้อย่างไร
ข้อกำหนด
เหมือนกันในการพัฒนาซอฟต์แวร์ มาเริ่มจากข้อกำหนดพื้นฐาน บางข้อ user stories แบบไม่เป็นทางการ:
- ในฐานะลูกค้ารีเทล:
- ฉันต้องการการเข้าถึง รวดเร็ว (<100ms end-to-end latency) แคตตาล็อกและรายละเอียดสินค้า โดยค้นหาสินค้าตามเกณฑ์หลากหลาย (เช่น full-text, ช่วงราคา, รีวิวลูกค้าอื่น, หรือ faceted search) เวลาตอบสนองสูงทำให้ bounce rate สูง
- ถ้าฉันไม่รู้แบรนด์สินค้าหรืออยากได้อะไรคล้ายกับที่เคยซื้อ ฉันอยากช็อปสินค้าด้วยรูปภาพ จะดีถ้าหากล้องที่ใกล้เคียงหรือคล้ายกันทางสายตาได้
- ฉันต้องการ การจัดส่งปลอดภัย หรือซื้อออนไลน์แล้วรับที่ร้านหรือ curbside (click and collect) ได้
- ในฐานะผู้จัดการสต็อก:
- ฉันต้องการมุมมองสต็อกที่แม่นยำ แบบเรียลไทม์ เพื่อให้ประสบการณ์ fulfillment ที่ดีที่สุดให้ลูกค้า
- ฉันต้องการเพิ่มประสิทธิภาพสต็อก รักษาสินค้าที่มีความต้องการสูง ให้มีสต็อก และลดสต็อกสินค้าที่ขายช้า
- ฉันต้องการมุมมองสต็อกข้ามร้านค้าและ/หรือศูนย์ fulfillment แบบ near real-time เพื่อเพิ่มประสิทธิภาพสต็อก
สถาปัตยกรรม
ตอนนี้เรารู้ข้อกำหนดแล้ว มาดูว่า Redis ช่วยเราได้อย่างไร:
- RediSearch ให้การค้นหาสินค้าที่ครบครันพร้อมตัวกรองตัวเลข full-text search, geo-indexing, scoring, และ aggregations
- ฟีเจอร์ Active-Active ของ Redis Enterprise ให้การจำลองข้ามภูมิภาคแบบเรียลไทม์ข้ามสต็อกทันที
- RedisAI, RedisGears, และ RediSearch ถูกนำมาใช้สร้าง ML pipeline ที่ผสานกับฐานข้อมูล สำหรับการอนุมานแบบเรียลไทม์และ vector-similarity search
จากนั้น ไม่นานเกินไปจึงจินตนาการได้ถึงการออกแบบต่อไปนี้:
กล่องสีฟ้าแทนบริการ กล่องสีแดงแสดงฐานข้อมูลที่บริการเหล่านั้นใช้
เราปฏิบัติตามแนวทางไมโครเซอร์วิสบางอย่าง:
- หนึ่ง datastore ต่อบริการ: แต่ละบริการมี datastore ของตัวเอง และข้อมูลแลกเปลี่ยนผ่าน interface ของบริการ ไม่ใช่เข้าถึง datastore ของบริการอื่นโดยตรง
- Polyglot persistence: แต่ละบริการใช้ datastore ที่เหมาะสมที่สุดตามข้อกำหนด พูดถึง polyglot persistence: Redis เป็นแพลตฟอร์มข้อมูลที่ให้คุณรวมฟีเจอร์และโมเดลข้อมูลจากโมดูลต่างๆ เพื่อสร้าง datastore ที่เหมาะกับข้อกำหนดของคุณ! อาจไม่ทำให้ประหลาดใจที่เราใช้ Redis และโมดูล Redis บางตัวเพื่อนำไปใช้กล่องสีแดง
การนำไปใช้
RedisMart ให้ UI ที่เสิร์ฟโดยเว็บแอป web-shop RedisMart มี frontend UI (เว็บไซต์รีเทลหน้าลูกค้า) และ backend UI (สำหรับจัดการสต็อก) เรานำบริการชุดหนึ่งมาใช้เบื้องหลังแอปพลิเคชัน
- Purchasing: บริการซื้อ (ซึ่งไม่ทำให้ประหลาดใจ) จัดการการซื้อของลูกค้า
- Inventory: บริการสต็อกตอบคำถามเกี่ยวกับจำนวนสต็อก และลดลงเมื่อลูกค้าซื้อ การอัปเดตสต็อกถูกจำลองแบบ near real-time ไปยังสต็อกในสถานที่อื่น โดยใช้ฟีเจอร์ Active-Active ของ Redis Enterprise Redis Enterprise ใช้ conflict-free replicated data types สำหรับจัดการการอัปเดตพร้อมกัน ในกรณีนี้ ใช้ resettable positive negative counter data type เพื่อป้องกันการสูญเสีย counter
- Product catalog: บริการแคตตาล็อกสินค้าให้ข้อมูลสินค้าและวิธีค้นหาที่ซับซ้อน ใช้ฐานข้อมูล Redis ที่มีโมดูล RediSearch + RedisJSON ติดตั้ง RedisJSON ให้เราจัดเก็บรายละเอียดสินค้าโดยตรงเป็นเอกสาร JSON RediSearch สามารถจัดดัชนี สอบถาม และค้นหา full-text เอกสาร JSON การอัปเดตสินค้าสามารถเผยแพร่ข้ามหลายไซต์ได้ง่ายด้วยฟีเจอร์ Active-Active ของ Redis Enterprise
- Image recognition: สุดท้าย บริการจดจำภาพเสนอ AI model-serving สำหรับ vector-similarity search บนภาพ ใช้ฐานข้อมูล Redis ที่มีโมดูล RedisGears, RedisAI, และ RediSearch ติดตั้ง RedisGears ให้เราสร้าง data pipeline และรันใกล้ที่ข้อมูลอยู่ เราใช้ประโยชน์จาก Redis AI สำหรับ AI model serving และ inference RediSearch ถูกใช้เพื่อค้นหาภาพคล้ายกันจริงๆ จาก output ของโมเดล AI
เหมือนที่กล่าวไว้ นี่คือบทความแรกของชุด โปรดติดตามเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการนำบริการแต่ละตัวไปใช้
RedisMart
ตอนนี้เราดูด้านหลังม่านแล้ว มาดูแอปพลิเคชันบนเวที
หน้าแรกแสดงหมวดหมู่สินค้าหลัก การคลิกหมวดหมู่จะเรียกคำค้นหาผ่านบริการแคตตาล็อกสินค้า โดยคืนค่า 16 สินค้าแรกที่อยู่ในหมวดหมู่นั้น
ช่อง "Search products" ให้คุณค้นหา full-text สินค้า นำไปสู่หน้าผลลัพธ์การค้นหา:
หน้าผลลัพธ์มี 2 ส่วน: Faceted search และรายการผลลัพธ์จริง Faceted search ใช้จำกัดผลลัพธ์เพิ่มเติมได้ โดยกรองผ่านหมวดหลัก หมวดย่อย ราคา และรีติ้ง เราจะพูดถึงรายละเอียดการนำ faceted search ไปใช้กับ RediSearch ในบล็อกชุดที่สอง มาให้ดู debug view ของ RedisMart เป็นคำใบ้:
เห็นได้ว่า tags และ aggregation มีบทบาท
การคลิกไอคอนกล้องเล็กๆ มุมขวาบน ให้คุณถ่ายภาพสิ่งที่อยากหาในแคตตาล็อก รูปถ่ายของ Doug ต่อไปนี้ไม่หา Doug คนอื่นในฐานข้อมูลของเรา…
…แต่มันหาหูฟังบางคู่ได้อย่างดี
สมมติคุณตัดสินใจซื้อหูฟังคู่นั้น หลังเลือก RedisMart ให้คุณเพิ่มเขตตะกร้า ระหว่าง checkout คุณเลือกจัดส่งหรือรับที่ใกล้บ้าน
Geo-search ของ RediSearch ขับเคลื่อนฟีเจอร์รับที่ร้าน Debug view ให้คำใบ้ว่าสิ่งนี้ทำงานเบื้องหลังอย่างไร
ทันทีที่ลูกค้าซื้อเสร็จ บริการสต็อกเข้ามาลดจำนวนสินค้าในสต็อก นี่นำเราไปสู่ backend ของแอปพลิเคชัน ซึ่งให้เราจัดการสต็อก RedisMart แสดงวิธีที่การอัปเดตสต็อกทันทีถูกสังเกตบนแต่ละไซต์ที่จำลอง การซื้อใน US (GCP us-central1) ถูกจำลองในพริบตาไปยังยุโรป (Azure north-europe)
อีกครั้ง เราจะรายละเอียดเพิ่มเติมภายหลัง จุดสำคัญคือคุณเข้าถึงข้อมูลจากสถานที่ใกล้เคียงได้ที่ network latency ต่ำมาก ในขณะที่การสูญเสีย counter ถูกป้องกันเมื่อข้อมูลถูกแก้ไขพร้อมกันข้ามหลายไซต์
คุณสามารถดูแอปพลิเคชันในการทำงานได้จากวิดีโอต่อไป:
สรุป
หวังว่าคุณจะเพลิดเพลินกับการอ่านส่วนแรกของชุดบล็อกเกี่ยวกับการสร้างแอปพลิเคชันรีเทลเต็มฟีเจอร์ด้วย Redis เห็นได้ว่าแพลตฟอร์มข้อมูลเรียลไทม์ Redis ช่วยให้เราตอบสนองข้อกำหนดอย่างการเข้าถึงทันที (น้อยกว่า 100ms end-to-end latency) ข้อมูลสินค้า โดยใช้ความสามารถ document database ของ RediSearch + RedisJSON การรวม RediSearch + RedisGears + RedisAI ให้ AI-powered image search สำหรับหาสินค้าคล้ายกันในแคตตาล็อก นอกจากนี้ ฟีเจอร์อย่าง faceted และ geo-search ก็ได้รับการครอบคลุม สุดท้ายแต่อย่างไรก็ตาม เราแสดงให้เห็นว่าคุณสามารถสร้าง geo-replicated real-time inventory ได้ง่ายๆ จากฟีเจอร์ Active-Active ของ Redis Enterprise ด้วยทั้งหมดนี้ แพลตฟอร์มเรียลไทม์ Redis ช่วยบริษัทรีเทลสร้างผลกระทบเชิงบวกต่อประสบการณ์ซื้อขายโดยรวม ให้ประสบการณ์ fulfillment ที่ดีที่สุด และเพิ่มประสิทธิภาพสต็อกอย่างคุ้มค่าที่สุด
อยากเรียนรู้เพิ่มเติมเกี่ยวกับบริการแต่ละตัวที่เรานำไปใช้สำหรับ RedisMart? ติดตามบทความบล็อกชุดถัดไป!
อยากลองเอง? ลิงก์เหล่านี้ช่วยให้คุณลอง Redis เป็นแพลตฟอร์มข้อมูลเรียลไทม์:
- More about Modules
- github.com/RediSearch
- github.com/RedisJSON
- github.com/RedisGears
- github.com/RedisAI
- Redis Enterprise Cloud
- Active-Active Geo-Distribution
เครดิต
ขอขอบคุณทุกคนที่มีส่วนร่วมในแอปพลิเคชัน demo นี้:
- Yiftach Shoolman และ Ash Sahu สำหรับการนำเสนอ demo app ระหว่าง RedisConf
- ทีม Redis Marketing (โดยเฉพาะ Udi Gotlieb, Ash Sahu, Doug Tidwell, และ Bryson Coles) สำหรับรายการข้อกำหนด demo app จัด RedisConf ช่วย UI design และมีส่วนร่วมในบล็อกโพสต์นี้
- ทีม Technical Enablement (โดยเฉพาะ Martin Forstner, Greg Georges, และ David Maier) สำหรับการนำไปใช้ ทดสอบ ออกแบบ demo app — และมีส่วนร่วมในบล็อกโพสต์นี้
- ทีม CTO (โดยเฉพาะ Leibale Eidelman, Guy Korland) สำหรับพัฒนาโมดูลและบริการจดจำภาพ
- ทีม Product Management (โดยเฉพาะ Pieter Cailliau, Emmanuel Keller, Jonathan Salomon, และ Amiram Mizne) สำหรับรายการข้อกำหนด demo app และให้ฟีเจอร์ผลิตภัณฑ์
- และทุกคนที่เราลืมระบุที่นี่
เราอุทิศชุดบล็อกนี้ให้กับนักพัฒนาหลักของแอปพลิเคชัน RedisMart คือ Martin Forstner มาพร้อมความเศร้ามากที่จะแบ่งปันว่าเขาได้จากไปเมื่อเร็วๆ นี้ ความรู้ ความสามารถ และความรู้สึกตลกของ Martin ยกย่องไม่ได้ เขามากกว่าแค่ Software Engineer สำหรับ Redis — เขาเป็นเพื่อนร่วมงาน ทีมเมท ที่ปรึกษา และเพื่อน ขอให้เขานิหลับในสันติภาพ Martin เราคิดถึงคุณ!