# एक राइड-शेयरिंग मैचिंग सिस्टम डिज़ाइन करें — System Design: Architecture, Scale और Trade-offs

Source: https://www.skillbyai.com/hi/system-design/sd-design-ride-sharing

> Geohash या quadtree indexes और atomic assignment से surges संभालने वाला ride-sharing matcher design करें।

## आवश्यकताएँ

ड्राइवर लगातार अपनी लोकेशन स्ट्रीम करते हैं; एक राइडर ट्रिप का अनुरोध करता है और कुछ सेकंड के भीतर किसी नज़दीकी उपलब्ध ड्राइवर से मिलाया जाना चाहिए; सिस्टम को बिना गिरे उछाल (कॉन्सर्ट खत्म होना) झेलना चाहिए।

## जियोस्पेशियल इंडेक्सिंग

**जियोहैशिंग** या एक **क्वाडट्री** का उपयोग करके मानचित्र को कोशिकाओं में बाँटें, और `cell -> उपलब्ध ड्राइवर` का एक इन-मेमोरी इंडेक्स रखें। एक मैच क्वेरी धरती के हर ड्राइवर को स्कैन करने के बजाय राइडर की कोशिका और उसके चारों ओर फैलती रिंग खोजती है।

## एयर ट्रैफ़िक कंट्रोल, फ़ोन बुक नहीं

आप हर ड्राइवर के सटीक पते की सूची स्कैन करके नज़दीकी ड्राइवर नहीं ढूँढ़ते, फ़ोन बुक की तरह। यह लाइव रडार ग्रिड देखते एयर ट्रैफ़िक कंट्रोल जैसा ज़्यादा है — ड्राइवर लगातार अपनी कोशिका अपडेट करते हैं, और मैचर केवल आसपास की मुट्ठी भर ब्लिप देखता है।

## रेस संभालें: दो राइडर, एक ड्राइवर

दो मैच रिक्वेस्ट एक साथ एक ही ड्राइवर को लक्ष्य बना सकती हैं। एक एटॉमिक compare-and-set (या प्रति-ड्राइवर लॉक) उपयोग करें ताकि ठीक एक रिक्वेस्ट ड्राइवर जीते और दूसरी अगले-नज़दीकी उम्मीदवार पर रिट्राई करे।

## अंतिम क्विज़ 1/8

अंतिम क्विज़

**Quiz:** कौन-सी non-functional requirement है?

- [ ] Users can post a message
- [ ] Users can edit a profile
- [x] p99 latency under 200ms
- [ ] Users can search orders

*Answer:* p99 latency under 200ms. Non-functional requirements गुणवत्ता बताती हैं: latency, availability, scale।

## अंतिम क्विज़ 2/8

अंतिम क्विज़

**Quiz:** 86.4M requests प्रति दिन का औसत QPS लगभग कितना है?

- [ ] 10
- [ ] 100
- [ ] 10,000
- [x] 1,000

*Answer:* 1,000. एक दिन में लगभग 86,400 seconds होते हैं, इसलिए 86.4M / 86,400 ≈ 1,000 QPS।

## अंतिम क्विज़ 3/8

अंतिम क्विज़

**Quiz:** Cache miss पर cache-aside क्या करता है?

- [x] The app loads from the database and fills the cache
- [ ] The cache calls the database itself
- [ ] The request fails
- [ ] The database writes to the CDN

*Answer:* The app loads from the database and fills the cache. Cache-aside में application cache load और populate करने की जिम्मेदारी संभालता है।

## अंतिम क्विज़ 4/8

अंतिम क्विज़

**Quiz:** Consistent hashing मुख्य रूप से कौन-सी समस्या हल करता है?

- [ ] Slow TLS handshakes
- [x] Massive key remapping when nodes change
- [ ] Duplicate messages
- [ ] SQL injection

*Answer:* Massive key remapping when nodes change. Node जुड़ने या हटने पर केवल कुछ keys ही move होती हैं।

## अंतिम क्विज़ 5/8

अंतिम क्विज़

**Quiz:** At-least-once consumers को idempotent क्यों होना चाहिए?

- [ ] Messages are always lost
- [ ] Queues are encrypted
- [x] Messages can be delivered more than once
- [ ] Ordering is guaranteed

*Answer:* Messages can be delivered more than once. Retries से duplicates बनते हैं, इसलिए काम दोहराना सुरक्षित होना चाहिए।

## अंतिम क्विज़ 6/8

अंतिम क्विज़

**Quiz:** Network partition में CP system क्या करेगा…

- [ ] Return stale data to everyone
- [ ] Ignore the partition
- [ ] Add more replicas automatically
- [x] Reject some requests to stay consistent

*Answer:* Reject some requests to stay consistent. CP partition के दौरान availability के बजाय consistency चुनता है।

## अंतिम क्विज़ 7/8

अंतिम क्विज़

**Quiz:** Circuit breaker क्या करता है?

- [x] Stops calling a failing dependency to prevent cascades
- [ ] Encrypts traffic
- [ ] Caches responses forever
- [ ] Shards the database

*Answer:* Stops calling a failing dependency to prevent cascades. यह तेज़ी से fail करता है ताकि एक धीमी dependency callers को न गिराए।

## अंतिम क्विज़ 8/8

अंतिम क्विज़

**Quiz:** Design interview में सबसे पहले क्या करें?

- [ ] Draw the database schema
- [x] Clarify requirements, users and scale
- [ ] Pick a cloud provider
- [ ] List every technology

*Answer:* Clarify requirements, users and scale. Requirements और scale आगे के हर निर्णय को तय करते हैं।
