AWS Lambda पर बड़े पैमाने पर Serverless अरबी EdTech ऐप कैसे चलाए
Alphazed AWS Lambda और Serverless Framework के साथ 50+ देशों में 95,000+ छात्रों को सेवा देने वाला अपना पूरा बैकएंड चलाता है। आर्किटेक्चर में API Gateway के पीछे Flask Lambda, RDS पर MySQL 8, कंटेंट डिलीवरी के लिए S3 और एक कस्टम एनालिटिक्स लेक (SQS → Kinesis Firehose → S3 → Glue → Athena) शामिल हैं। थिन Lambda हैंडलर कोल्ड-स्टार्ट विलंबता को अनुकूलित करते हैं और एक ही कोडबेस से 7+ ऐप्स रंटाइम कॉन्फ़िगरेशन स्विच के साथ सर्व किए जाते हैं।
अWhy Serverless EdTech के लिए उपयुक्त है?
- शैक्षिक ऐप के लिए अप्रत्याशित उपयोग पैटर्न:
- सप्ताह के दिनों में सुबह: बच्चे को स्कूल भेजने से पहले अभिभावक ऐप डाउनलोड करते हैं (ट्रैफिक स्पाइक)
- दोपहर के बाद स्कूल अभ्यास सत्र (लगातार लोड)
- सप्ताहांत: भारी अभ्यास (2-3 गुना लोड)
- रमजान के दौरान शाम के उपयोग में वृद्धि (परिवार क़ुरआन सेशन्स)
- स्कूल छुट्टियाँ: अलग पैटर्न
- Serverless के लाभ:
- पे-पर-रिक्वेस्ट कीमत: आप केवल उपयोग के लिए भुगतान करते हैं, वायरल स्थिति में स्केल तुरंत
- कोल्ड स्टार्ट शून्य के करीब: "हमेशा वॉर्म" Lambda परतें बारंबार कॉल किए जाने वाले एंडपॉइंट्स के लिए
- ऑटो-स्केलिंग: 10 से लेकर 10,000 उपयोगकर्ताओं तक स्वचालित स्केलिंग
- शून्य सर्वर रखरखाव: टीम पाठ्यक्रम और AI पर केंद्रित
आर्किटेक्चर विवरण
[क्लाइंट ऐप] (iOS, Android, Web)
↓
[API Gateway] (HTTP रूटिंग, रेट लिमिटिंग)
↓
[Lambda हैंडलर्स] (Flask ऐप, 512MB मेमोरी, 28s टाइमआउट)
├── ऐप रूट्स: /app/* (मोबाइल एंडपॉइंट)
├── यूजर रूट्स: /user/* (प्रमाणीकृत एंडपॉइंट)
└── एडमिन रूट्स: /boss/* (एडमिन डैशबोर्ड)
↓
[MySQL 8 ऑन RDS] (स्थायी डेटा)
↓
[प्रतिक्रिया] (JSON ग्राहक को वापस)
गति के लिए थिन Lambdas
हमारे अधिकांश Lambdas बहुत ही कम कोड वाले हैं:
import json
import pymysql
def get_user_progress(event, context):
user_id = event['pathParameters']['user_id']
conn = pymysql.connect(host='rds.aws.com', user='app', password='...', database='amal')
cursor = conn.cursor()
cursor.execute(
'SELECT concept_id, accuracy FROM user_memory WHERE user_id = %s',
(user_id,)
)
rows = cursor.fetchall()
conn.close()
return {
'statusCode': 200,
'body': json.dumps([{'concept': r[0], 'accuracy': r[1]} for r in rows])
}
कोई Flask या SQLAlchemy ORM नहीं। परिणामस्वरूप ~500ms कोल्ड स्टार्ट बनाम 5-10 सेकंड Flask ऐप का। भारी एंडपॉइंट पूर्ण Flask का उपयोग करते हैं।
प्रत्येक ऐप के लिए टेबल प्रीफिक्स
एक RDS इंस्टेंस 7+ ऐप्स के लिए डाटाबेस स्तर पर अलगाव के साथ सेवा देता है:
CREATE TABLE amal_users (...)
CREATE TABLE thurayya_users (...)
CREATE TABLE qais_users (...)
डिप्लॉय समय पर `APP_NAME` पर्यावरण चर से प्रीफिक्स चुना जाता है।
एनालिटिक्स लेक
डेटाबेस से सीधे एनालिटिक्स धीमा कर सकते हैं, इसलिए हमने असिंक्रोनस एनालिटिक्स पाइपलाइन बनायी है:
[मोबाइल ऐप]
↓ (इवेंट भेजता है)
[API एंडपॉइंट] → [SQS क्यू] (असिंक्रोनस)
↓ (तुरंत जवाब)
↓ (एनालिटिक्स के लिए प्रतीक्षा नहीं)
[Kinesis Firehose] (5 मिनट में बैच)
↓
[S3] (पार्टिशन किया गया)
↓
[AWS Glue] (स्कीमा पठान)
↓
[Athena] (SQL क्वेरी)
↓
[डैशबोर्ड] (रियल-टाइम इनसाइट)
यदि एनालिटिक्स विफल रहता है, तो DEAD LETTER QUEUE पर संदेश भेजे जाते हैं और API प्रभावित नहीं होता।
लागत अनुकूलन रणनीतियाँ
- थिन Lambdas से कोल्ड स्टार्ट का समय कम किया गया, प्रति दिन $0.86 व्यय, प्रति माह ~$500 बचत।
- RDS रिजर्व्ड इंस्टेंस के साथ 60% तक छूट।
- ElastiCache (Redis) के साथ 70% कम RDS क्वेरी।
एक कोडबेस से 7+ ऐप्स की सेवा
| ऐप | प्रिफिक्स | DB टेबल्स | Lambda स्टैक | स्थिति |
|---|---|---|---|---|
| Amal | amal_ | 40+ | शेयर किया हुआ | उत्पादन |
| Thurayya | thurayya_ | 40+ | शेयर किया हुआ | उत्पादन |
| Qais | qais_ | 35+ | शेयर किया हुआ | बीटा |
| KidElite | kidelite_ | 40+ | शेयर किया हुआ | उत्पादन |
| Alphazed School | school_ | 50+ | शेयर किया हुआ | बीटा |
| Alphazed Montessori | montessori_ | 45+ | शेयर किया हुआ | आंतरिक |
एक ही बैकएंड, एक डिप्लॉयमेंट पाइपलाइन, 6 ऐप्स समानांतर में। नए ऐप लॉन्च कुछ हफ़्तों में।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
प्रश्न: Lambda में 15 मिनट का टाइमआउट सीमा है, क्या यह लंबी प्रक्रियाओं के लिए समस्या है?
उत्तर: हाँ लेकिन भारी काम के लिए SQS + Step Functions के साथ असिंक्रोनस जॉब्स का उपयोग होता है।
प्रश्न: डेटाबेस डाउन होने पर क्या होता है?
उत्तर: RDS में Multi-AZ फेलओवर है जो लगभग 60 सेकंड में स्वचालित बहाली करता है। ग्राहक को थोड़ी देर के टाइमआउट दिखते हैं।
प्रश्न: स्टेटलेस Lambda में DB कनेक्शन पूलिंग कैसे संभालते हैं?
उत्तर: हर Lambda इंस्टेंस एक कनेक्शन पूल बनाता है जो वार्म आवृत्तियों के बीच पुन: उपयोग होता है। RDS Proxy कनेक्शन सीमाओं का प्रबंधन करता है।



