भाग 1: पद्धत (indigo, 1–4) · भाग 2: बांधणीचे ठोकळे (amber, 5–12) · भाग 3: प्रत्येक box मध्ये लागू होणारे (red, 13–16) · भाग 4: सोडवलेल्या रचना (green, 17–18). प्रत्येक आकृती खऱ्या lab वरून काढलेली आहे — design/demo.py जे आकडे print करते तेच — आणि प्रत्येकीखाली एक lab आहे जिथे तुम्ही ते बदलू शकता. वर्तुळातले क्रमांक 1 → 2 → 3 या क्रमाने पाहा.
1 📋 गरजा आणि मर्यादा
नियोजन कार्यालय काढण्याआधी विचारते — functional, non-functional, मर्यादा (constraints), आणि काय कक्षेबाहेर आहे.
🧒 सोप्या शब्दांत
शाळा सांगते: 5 million पालकांसाठी सूचना फलक app बनवा. Dipika अजून काहीच काढत नाही. आधी ती विचारते: काय करायचे, किती जलद हवे, आणि मर्यादा काय. आपण काय बनवणार नाही, जसे chat, तेही ती लिहिते. आता सगळे एकच गोष्ट आखतात.
📖 नवे शब्दfunctional — app ने काय करायचे: शिक्षिका post करते, पालक वाचतात, तातडीच्या सूचनांची notificationnon-functional — ते किती चांगले चालायला हवे: read p99 < 200 ms, 99.9% availableconstraints — ठरलेल्या मर्यादा: 4 जणांची team, AWS, मराठी + English, 3 महिन्यांत launchout of scope — आत्ता काय बनवणार नाही, मोठ्याने सांगितलेले: chat, payments, video
⏪ आधी
Teams नी 'सूचना फलक app बनवा' ऐकले आणि लगेच boxes काढले, मग खऱ्या गरजा launch नंतर कळल्या.
💡 काय
गरजा म्हणजे नियोजन कार्यालय आधी विचारते: काय करायचे, किती चांगले, कोणत्या मर्यादेत, आणि काय बाहेर ठेवायचे.
शाळेच्या कार्यक्रमासाठी खुर्च्या आणण्याआधी पाहुणे मोजतात. Dipika app साठी तेच गणित करते. दिवसाला 1 million सूचना म्हणजे सेकंदाला सुमारे 12. Reads 100 पट जास्त, आणि गर्दीचा तास नेहमीच्या 3 पट. म्हणून ती सेकंदाला 3,507 requests आणि 12 servers साठी योजना करते.
📖 नवे शब्दestimate — कागदावरचा ढोबळ अंदाज, आकार निवडायला पुरेसाpeak — सर्वात गर्दीचा क्षण; इथे सरासरीच्या 3 पट, 3,507 req/sstorage — किती data साठतो: 2 KB × दिवसाला 1M × 5 वर्षे × 3 प्रती = 10.95 TB10^5 — एक दिवस 86,400 s, म्हणजे सुमारे 10^5 सेकंद: दिवसाला 1M ≈ सेकंदाला 12
⏪ आधी
योजनांत 'खूप पालक' एवढेच लिहिलेले असे आणि machines अंदाजाने ठरत, म्हणून काही लहान पडत आणि काही खूप महाग.
💡 काय
Capacity अंदाज म्हणजे कार्यालयाचे कागदावरचे ढोबळ गणित: पालक ते requests, peak, storage आणि servers.
⚙️ कसे
दिवसाला 1M सूचना म्हणजे 11.6 writes/s आणि 1,157 reads/s; peak ×3 ला 3,507 req/s, 12 servers; 5 वर्षांत 10.95 TB.
🎯 का
आकडे आकार दाखवतात: writes लहान, reads जड, म्हणून reads cache करा आणि एक database cluster पुरेसा आहे.
🚀 पुढे
पुढचा धडा आधी करार लिहितो: resources, status codes, idempotency keys आणि cursor pagination.
🧪 इथे करून पाहा — envelope calculator — blocks.py मधील estimate(); slider हलवा आणि आकार बदलताना पाहा
आधी करार (contract) — resources, status codes, idempotency keys, cursor pagination आणि versioning.
🧒 सोप्या शब्दांत
Canteen उघडण्याआधी कार्यालय सगळ्यांसाठी एकच मागणी-फॉर्म छापते. App आणि server आधी त्याच फॉर्मवर सहमत होतात. शिक्षिकेने post दोनदा दाबले तरी फॉर्मवरची key दुहेरी सूचना थांबवते. मोठ्या यादीसाठी पुन्हा page 1 पासून मोजण्याऐवजी bookmark ठेवायचा.
📖 नवे शब्दresource — पत्ता असलेली गोष्ट, जसे /classes/3A/noticesstatus code — छोटा उत्तर-क्रमांक: 201 created, 403 तुमचा वर्ग नाही, 429 हळूIdempotency-Key — request वरचे तिकीट, म्हणजे retry मुळे सूचना कधी दोनदा लागत नाहीcursor — bookmark: page 5,000 ला 20 rows, OFFSET सारख्या 100,000 नाहीत
⏪ आधी
Screens आणि servers वेगवेगळे बनले आणि उशिरा जुळवले, आणि page 5,000 ला database ला प्रत्येक row चालावी लागली.
💡 काय
API design म्हणजे कार्यालयाचा मागणी-फॉर्म, बांधण्याआधी ठरलेला: resources, स्पष्ट errors आणि सुरक्षित retries.
⚙️ कसे
Idempotency-Key सह POST /classes/3A/notices ला 201 मिळतो; page 5,000 वर OFFSET 100,000 rows चालतो, cursor फक्त 20.
🎯 का
Teams दोन्ही बाजू एकाच वेळी बांधतात, retry मुळे सूचना दोनदा लागत नाही, आणि खोल pages पण page 1 इतकेच जलद.
🚀 पुढे
पुढचा धडा आपण विचारणार त्या प्रश्नांवरून data मांडतो, आणि मग store निवडतो.
🧪 इथे करून पाहा — OFFSET ने किंवा cursor ने पान N पर्यंत जा — मग Idempotency-Key सह आणि त्याशिवाय POST चा retry करा
तुम्ही जे प्रश्न विचाराल त्यांचे model करा, मग store निवडा — मूलतः relational, इतर खऱ्या कारणांसाठीच.
🧒 सोप्या शब्दांत
ग्रंथालय वाचक विचारतात त्या प्रश्नांनुसार पुस्तके लावते, जसे विषयानुसार. Dipika आधी प्रश्नांची यादी करते: वर्ग 3A च्या नव्या सूचना दाखवा. मग ती नेमक्या त्यासाठी एक table आणि एक index बनवते. साधा relational database हा तिचा सुरक्षित default. नवा प्रश्न आला तरच ती दुसरे stores जोडते.
📖 नवे शब्दaccess pattern — app data ला पुन्हा पुन्हा विचारतो तो प्रश्नrelational — joins आणि transactions असलेली tables; सुरक्षित default (PostgreSQL)key-value — एक key, एक value: ठरलेल्या lookups साठी प्रचंड scale वर खूप जलदindex — rows पटकन शोधणारी क्रमवार यादी: (class_id, created_at DESC)
⏪ आधी
प्रत्येक नवे app आधी फॅशनचा database निवडे, मग स्वतःच्या प्रश्नांची उत्तरे मिळवण्यासाठी वर्षानुवर्षे झगडे.
💡 काय
Data model म्हणजे कार्यालयाचे कपाट, त्याला विचारल्या जाणाऱ्या प्रश्नांवरून आखलेले; relational हा default.
⚙️ कसे
notices(id, class_id, …) हे एक table आणि (class_id, created_at DESC) index '3A च्या नव्या सूचना' पटकन देतात.
🎯 का
एक table, एक index, एक जलद उत्तर; S3, search किंवा vectors फक्त खरा access pattern मागेल तेव्हाच जोडायचे.
🚀 पुढे
पुढचा धडा भाग 2 पहिल्या बांधणीच्या ठोकळ्याने उघडतो: caching, प्रती कुठे आणि किती ठेवायच्या.
🧪 इथे करून पाहा — data ला काय लागते ते tick करा — choose_store() आपले नियम तपासते आणि पहिला जुळणारा नियम जिंकतो
प्रती कुठे ठेवायच्या, किती मोठ्या, किती काळ — hit-ratio वक्र आणि काय invalidate करायचे.
🧒 सोप्या शब्दांत
कार्यालय सर्वात जास्त मागितल्या जाणाऱ्या सूचनांच्या झेरॉक्स प्रती समोरच्या टेबलावर ठेवते. बहुतेक पालकांना त्याच थोड्या सूचना हव्या असतात, म्हणून कपाट कमी वेळा उघडावे लागते. Dipika ट्रेचा आकार तपासते. 10% वर्ग ठेवले तरी 64% reads ची उत्तरे मिळतात. सूचना बदलली की जुनी प्रत फेकून दिली जाते.
📖 नवे शब्दcache — लोकप्रिय data ची जवळची प्रत, म्हणजे database ला कमी विचारावे लागतेhit ratio — प्रत किती वेळा मिळाली: आकार वाढतो तसे 33.8%, 64.0%, 83.1%LRU — least recently used: भरल्यावर, सर्वात जास्त काळ न मागितलेले काढून टाकाinvalidate — खरी सूचना बदलली की प्रत फेकून द्या, किंवा छोटा TTL वापरा
⏪ आधी
प्रत्येक feed read database कडे जाई, सेकंदाला 1,157 reads, आणि database च bottleneck बनला.
💡 काय
Cache म्हणजे कार्यालयाचा झेरॉक्स ट्रे: लोकप्रिय सूचनांच्या प्रती जवळ, म्हणजे कपाट कमी वेळा उघडावे लागते.
पाहुणे आणि keys पसरवा — L4 vs L7, health checks, आणि असा ring जिथे server जोडल्यावर फक्त त्याचा वाटा हलतो.
🧒 सोप्या शब्दांत
Gate वरचा द्वारपाल प्रत्येक पालकाला उघड्या खिडकीकडे पाठवतो. सूचना वर्गानुसार 4 कपाटांत वाटलेल्या आहेत. नियम 'वर्ग क्रमांक mod 4' असेल, तर 5 वे कपाट आले की जवळजवळ प्रत्येक file हलते. Ring वर, नवे कपाट फक्त स्वतःचा वाटा घेते, 5 पैकी 1.
📖 नवे शब्दload balancer — requests निरोगी servers वर पसरवणारा द्वारपालhealth check — नियमित 'बरे आहात का?', म्हणजे traffic आजारी server टाळतेconsistent hashing — servers ची ring; नवा server सुमारे 1/N keys हलवतो (20%, 80% नाही)L4 vs L7 — L4 फक्त TCP पाहतो आणि जलद; L7 HTTP paths आणि headers वाचतो
⏪ आधी
Keys hash % N ने ठेवल्या जात, म्हणून एक cache server जोडला की जवळजवळ सगळे हलत आणि caches रिकामे होत.
💡 काय
Load balancing म्हणजे कार्यालयाचा द्वारपाल पालकांना उघड्या खिडक्यांकडे पाठवतो; hash ring प्रत्येक key ला ठरलेले घर देते.
⚙️ कसे
4 servers वर 10,000 वर्ग, 5 वा जोडला: hash % N 8,001 keys (80%) हलवतो, ring फक्त 1,975 (20%).
🎯 का
नवा server फक्त स्वतःचा वाटा घेतो, म्हणून caches गरम राहतात आणि servers वाढवणे शांतपणे होते.
🚀 पुढे
पुढचा धडा पटकन उत्तर देतो आणि हळू काम नंतर करतो: queues, workers, retries आणि DLQ.
🧪 इथे करून पाहा — hash ring वर 10,000 class keys (खरा md5) — server जोडा किंवा काढा आणि कोण हलते ते मोजा
पटकन उत्तर द्या, सावकाश काम नंतर करा — jobs, workers, retries, DLQs आणि at-least-once delivery.
🧒 सोप्या शब्दांत
कार्यालयात तुम्ही फॉर्म ट्रेमध्ये टाकता आणि लगेच शिक्का मिळतो. कारकून सगळे काम करेपर्यंत तुम्ही थांबत नाही. App 5 million SMS चे तेच करते. ते शिक्षिकेला 50 ms मध्ये उत्तर देते आणि queue वर एक job ठेवते. 50 workers असले तर सगळे SMS 33 मिनिटांत जातात.
📖 नवे शब्दqueue — नंतर क्रमाने करायच्या jobs ची रांगworker — queue वरून jobs घेणारा मदतनीस; जास्त workers म्हणजे लवकर काम पूर्णDLQ — dead-letter queue: सगळ्या retries नंतरही अपयशी jobs साठी कप्पाat-least-once — एक job दोनदा चालू शकतो, म्हणून दोनदा करणे सुरक्षित हवे
⏪ आधी
Post request स्वतःच 5M तातडीचे SMS पाठवायचा प्रयत्न करी, म्हणून शिक्षिका थांबून राही आणि request timeout होई.
💡 काय
Queue म्हणजे कार्यालयाचा in-tray: कारकून लगेच मागणीवर शिक्का मारतो, आणि workers हळू काम नंतर करतात.
⚙️ कसे
Request ~50 ms मध्ये 201 देतो; 50 SMS/s वेगाने 10 workers ला 166.7 min, 50 workers ला 33.3 min, 200 ला 8.3 min.
🎯 का
Request जलद राहतो, काम तुम्ही पैसे द्याल तितक्या वेगाने होते, आणि अपयश retry होते किंवा DLQ मध्ये थांबते.
🚀 पुढे
पुढचा धडा एका घटनेला अनेक ऐकणारे देतो: pub/sub events, fan-out आणि outbox.
🧪 इथे करून पाहा — "5M तातडीचे SMS पाठवा" — request एक job रांगेत टाकते; तो किती workers रिकामा करतील ते तुम्ही ठरवा
एक तथ्य, अनेक ऐकणारे — pub/sub, fan-out on write vs read, आणि DB व broker यांच्यामध्ये कधीही event (घटना) न गमावणे.
🧒 सोप्या शब्दांत
सूचना post झाली की अनेक जण प्रतिसाद देतात: email, SMS, search. कार्यालय एकदाच घोषणा करते आणि ज्यांना हवे ते ऐकतात. पण कारकुनाने सूचना save केली आणि मग तो बेशुद्ध पडला, तर घोषणा हरवते. म्हणून चिठ्ठी सूचनेसोबत outbox मध्ये जाते. Crash नंतरही एक मदतनीस ती नंतर पाठवतो.
📖 नवे शब्दevent — भूतकाळातील घटना, जसे NoticePostedpub/sub — एकदा publish करा, प्रत्येक subscriber ला स्वतःची प्रत मिळतेoutbox — data सोबत एकाच transaction मध्ये save केलेला event, नंतर relay पाठवतोfan-out — push प्रत्येक inbox लिहितो (200 writes); pull वाचताना गोळा करतो (1,200 lookups)
⏪ आधी
App सूचना save करी, मग broker ला सांगे; मधेच crash झाला तर NoticePosted हरवे आणि कोणत्याच पालकाला कळत नसे.
💡 काय
Event म्हणजे कार्यालयाची घोषणा: एक घटना, अनेक ऐकणारे; outbox म्हणजे पाठवेपर्यंत ठेवलेली चिठ्ठी.
⚙️ कसे
Outbox असेल तर crash नंतर NoticePosted थांबून राहते आणि relay ते publish करतो; push ला 200 writes, pull ला 1,200 lookups.
🎯 का
Database आणि broker मध्ये कोणताही event हरवत नाही, आणि email, SMS, search प्रत्येक स्वतंत्रपणे प्रतिसाद देतात.
🚀 पुढे
पुढचा धडा विचारतो एक deploy की अनेक: modular monolith ने सुरुवात करा आणि प्रत्येक hop ची किंमत मोजा.
🧪 इथे करून पाहा — DB आणि broker च्या मधे crash सह सूचना post करा — dual write विरुद्ध outbox; मग fan-out push विरुद्ध pull
modular monolith ने सुरुवात करा — प्रत्येक जास्तीच्या hop ची किंमत latency आणि availability मध्ये का मोजावी लागते, आणि कधी विभागायचे.
🧒 सोप्या शब्दांत
स्पष्ट टेबलांचे एक कार्यालय चालवायला सोपे असते. प्रत्येक टेबल वेगळ्या इमारतीत गेले, तर प्रत्येक प्रश्नासाठी फेरी मारावी लागते. प्रत्येक फेरीला वेळ लागतो आणि ती अपयशी होऊ शकते. सलग आठ फेऱ्यांनी page हळू आणि कमी भरवशाचे होते. म्हणून Dipika एका कार्यालयाने सुरुवात करते आणि खऱ्या कारणानेच टेबल बाहेर हलवते.
📖 नवे शब्दmodular monolith — आत स्पष्ट modules असलेला एक deploy; सुरक्षित सुरुवातmicroservice — एक team एकटी deploy करते अशी छोटी service, network वरून बोलावली जातेhop — एक network call; 20 ms चे 8 hops = 160 ms आणि 99.20% availabledistributed monolith — एकत्रच deploy कराव्या लागणाऱ्या अनेक services: सगळा खर्च, फायदा नाही
⏪ आधी
Teams नी पहिल्याच दिवशी app चे डझनभर services केले, आणि तरीही ते सगळे एकत्रच deploy करावे लागले.
💡 काय
Modular monolith म्हणजे स्पष्ट टेबलांचे एक कार्यालय; team किंवा scale ची गरज असेल तेव्हाच service वेगळी करायची.
⚙️ कसे
प्रत्येक hop 20 ms आणि 99.9% up: 1 hop ला 99.90%, 3 hops ला 99.70%, आणि 8 hops ला 160 ms व फक्त 99.20%.
🎯 का
कमी hops म्हणजे जलद pages, जास्त availability आणि सोपे transactions, विभागण्याचे खरे कारण येईपर्यंत.
🚀 पुढे
पुढचा धडा प्रतींमध्ये एकमत ठेवतो: strong की eventual, R + W > N quorums आणि CAP ची निवड.
🧪 इथे करून पहा — services च्या रांगेतून जाणारी एक request — call_chain(hops, ms_each, availability_each)
Strong की eventual — replicas, quorums (R + W > N), read-your-writes आणि फूट पडल्यावर CAP ची निवड.
🧒 सोप्या शब्दांत
कार्यालय सूचना रजिस्टरच्या 3 प्रती ठेवते. शिक्षिका 'exam on Monday' बदलून 'Tuesday' करते, पण एक प्रत अजून बदललेली नाही. एकच प्रत पाहिली तर Monday वाचले जाऊ शकते. दोन पाहिल्या तर त्यातली एक नक्की Tuesday सांगते. गुणांसाठी पुरेशा प्रती तपासा; likes साठी एक पुरे.
📖 नवे शब्दstrong — प्रत्येक read नवीनतम write पाहतो; हळू पण नेहमी बरोबरeventual — प्रती थोड्या वेळाने जुळतात; एखादा read क्षणभर जुना असू शकतोquorum — R + W > N: 3 प्रती असताना 2 write आणि 2 read नेहमी एकमेकांना छेदतातCAP — network split च्या वेळी उत्तर द्या (कदाचित जुने) किंवा नकार द्या (बरोबर राहा)
⏪ आधी
Data ची एकच प्रत नेहमी बरोबर असे, आणि ती प्रत बंद पडली की पूर्ण app बंद पडे.
💡 काय
Consistency म्हणजे कार्यालय आपल्या 3 रजिस्टरमध्ये एकमत कसे ठेवते, म्हणजे पालक जुनी सूचना वाचत नाहीत.
⚙️ कसे
N=3 असताना R=1 W=1 'exam on Monday' वाचू शकते; R=2 W=2 एकमेकांना छेदतात आणि 'exam moved to Tuesday' वाचतात.
🎯 का
प्रत्येक data साठी निवडता: गुण आणि पैशांसाठी strong, थोडे मागे राहू शकणाऱ्या likes आणि counts साठी eventual.
🚀 पुढे
पुढचा धडा services मध्ये सगळे किंवा काहीच नाही करतो: two-phase commit, तो का अडतो, आणि undo करणारे sagas.
🧪 इथे करून पहा — सूचना नोंदवहीच्या N प्रती — R आणि W निवडा, नवीन version लिहा, मग वाचा आणि ते शिळे आहे का ते पहा
services ओलांडून सगळे किंवा काहीच नाही — two-phase commit आणि ते का अडकते, compensations सह sagas.
🧒 सोप्या शब्दांत
शाळेच्या सहलीसाठी seat, payment आणि bus लागते. Katrina ची seat राखली जाते आणि ₹500 घेतले जातात. मग bus भरलेली निघते. म्हणून कार्यालय प्रत्येक पायरी उलट क्रमाने रद्द करते: Katrina ला ₹500 परत करते आणि seat मोकळी करते. प्रत्येक पायरीचा स्वतःचा undo असतो.
📖 नवे शब्द2PC — two-phase commit: सगळे मत देतात, मग सगळे commit; coordinator गेला तर BLOCKEDsaga — local पायऱ्यांची साखळी, पुढची अपयशी झाली तर प्रत्येकीला undocompensation — undo पायरी, जसे Katrina ला ₹500 परत करणेlock — data वरची पकड, तुमचे होईपर्यंत दुसरे कोणी बदलू शकत नाही
⏪ आधी
एकाच database मध्ये सगळे असे, म्हणून एक transaction पुरे; services वेगळे झाले आणि bookings अर्धवट राहू लागली.
💡 काय
Saga म्हणजे कार्यालयाची सहलीची यादी: प्रत्येक पायरीला undo असतो, म्हणून अपयशी पायरीनंतर क्रमाने मागे जाता येते.
⚙️ कसे
Coordinator गेला तर 2PC BLOCKED होतो; saga seat राखते, Katrina ला ₹500 लावते, bus भरली, ₹500 परत करते.
🎯 का
Services मध्ये global locks नाहीत, आणि अर्धवट अपयश स्वच्छ संपते: Katrina ला पैसे परत मिळतात आणि seat मोकळी होते.
🚀 पुढे
पुढचा धडा कार्यालयाला पुरापासून वाचवतो: token bucket vs sliding window, प्रत्येक user साठी आणि एकूण.
🧪 इथे करून पहा — शाळेच्या सहलीचे booking — two-phase commit मध्ये मत द्या, coordinator बंद पाडा, मग saga ची कोणतीही पायरी अयशस्वी करा
कार्यालयाला लोंढ्यांपासून वाचवा — token bucket vs sliding window, प्रति user, प्रति key, जागतिक पातळीवर.
🧒 सोप्या शब्दांत
प्रत्येक पालकाच्या app ला canteen coupons सारखे tokens मिळतात. प्रत्येक request एक वापरते, आणि दर सेकंदाला थोडे परत मिळतात. Aishwarya चा phone अडकला आणि अर्ध्या सेकंदात 17 requests पाठवल्या. Bucket ने 12 आत सोडल्या आणि बाकीच्यांना 'हळू' सांगितले. बाकी सगळ्यांना सेवा मिळत राहिली.
📖 नवे शब्दtoken bucket — tokens ठराविक वेगाने भरतात आणि burst ची सूट: 5/s, burst 10sliding window — प्रत्येक कालावधीची पक्की मोजणी: 1 s ला 10, म्हणून 17 पैकी 10 जातात429 — 'खूप जास्त requests' हे उत्तर, Retry-After सोबत पाठवलेलेburst — नेहमीच्या वेगापेक्षा जास्त, थोड्या वेळासाठी परवानगी असलेली गर्दी
⏪ आधी
एक सदोष app सतत requests पाठवून बाकी सगळ्या पालकांसाठी कार्यालय मंद करू शकत असे.
💡 काय
Rate limiting म्हणजे कार्यालयाची token खिडकी: प्रत्येक पालकाला tokens मिळतात, token नसेल तर उत्तर 429.
⚙️ कसे
0.5 s मध्ये 17 requests: token bucket (5/s, burst 10) 12 आत सोडतो, sliding window (10 per 1 s) फक्त 10.
🎯 का
एक गोंगाट करणारे app बाकीच्यांना उपाशी ठेवू शकत नाही; त्याला Retry-After सह 429 मिळतो, counters Redis मध्ये.
🚀 पुढे
पुढचा धडा भाग 3 उघडतो: प्रत्येक dependency अपयशी होते, म्हणून page budget मध्ये प्रत्येकाला timeout द्या.
🧪 इथे करून पहा — burst बदला (count@second, किंवा count@start-end समान वाटून) आणि दोन्ही limiters ची तुलना करा
Page 800 ms मध्ये तयार हवे. Dipika त्यातच प्रत्येक मदतनीसाला वेळमर्यादा देते: 50 ms, 150 ms आणि 300 ms. Photo मदतनीस नसला तरी page सूचना दाखवते, फक्त photos शिवाय. सतत अपयशी होणाऱ्या मदतनीसाला कार्यालय बोलावणे थांबवते, आणि नंतर पुन्हा प्रयत्न करते.
📖 नवे शब्दtimeout — पुढे जाण्याआधी मदतनीसासाठी थांबायची जास्तीत जास्त वेळretry with jitter — थोडा random वेळ थांबून पुन्हा प्रयत्न, म्हणजे सगळे एकदम retry करत नाहीतcircuit breaker — अपयशी भागाला काही वेळ बोलावणे थांबवा, मग पुन्हा तपासाdegrade — तुटलेल्या भागाशिवाय page चालू ठेवा, जसे photos शिवाय सूचना
⏪ आधी
एक हळू photo service उत्तर देईपर्यंत प्रत्येक page अडवून ठेवे, म्हणून छोट्या दोषाने पूर्ण app बंद पडे.
💡 काय
Resilience म्हणजे कार्यालयाची प्रत्येक टेबलाची पर्यायी योजना: ठराविक वेळच थांबा, हळूवार retry करा, त्याशिवाय काम चालू ठेवा.
⚙️ कसे
800 ms चे page budget: auth 50 ms, notices DB 150 ms, photos 300 ms; photos बंद तर photos शिवाय सूचना.
🎯 का
अपयशी भाग एक feature घालवतो, page नाही; breaker थांबलेला असताना पालक सूचना वाचत राहतात.
🚀 पुढे
पुढचा धडा विचारतो कोण काय करू शकतो: प्रत्येक box ला STRIDE, आणि प्रत्येक object साठी authorization.
🧪 इथे करून पाहा — 800 ms चे पानाचे बजेट auth, सूचनांचा DB आणि फोटो service मध्ये वाटा — मग फोटो service मोडून पाहा
प्रत्येक box ला STRIDE विचारा — identity, प्रत्येक object साठी authorization, encryption, secrets, गैरवापर.
🧒 सोप्या शब्दांत
नवी इमारत उघडण्याआधी कोणीतरी फिरून प्रत्येक दार आणि खिडकी तपासते. Dipika योजनेचे तेच करते. प्रत्येक box ला ती 6 प्रश्न विचारते: कोण बोलावतो, बदलले का, नाकारता येईल का, कोण वाचू शकते, पूर येईल का, कोणी boss होऊ शकतो का. पालकांना फक्त आपल्या मुलांचे वर्ग दिसतात.
📖 नवे शब्दSTRIDE — धोक्यांचे 6 प्रश्न: Spoofing, Tampering, Repudiation, Info, DoS, Elevationauthentication — तुम्ही कोण आहात ते सिद्ध करणे, उदाहरणार्थ OIDC नेauthorization per object — प्रत्येक सूचनेसाठी हा पालक ती वाचू शकतो का ते तपासणेleast privilege — प्रत्येक भागाला खरोखर लागते तेवढाच access द्या
⏪ आधी
Security म्हणजे launch आधीचा एक checkbox, म्हणून पालक class id ओळखून दुसऱ्या वर्गाच्या सूचना वाचू शकत.
💡 काय
Security by design म्हणजे कार्यालयाची कुलपांची यादी: बांधण्याआधी योजनेतील प्रत्येक box ला STRIDE विचारा.
⚙️ कसे
Notice API ला STRIDE चे 6 प्रश्न, spoofing पासून elevation पर्यंत; पालकांना फक्त आपल्या मुलांचे वर्ग दिसतात.
launch आधीच निरोगी म्हणजे काय ते ठरवा — SLOs, error budgets, RED आणि USE, logs, metrics, traces.
🧒 सोप्या शब्दांत
Check-up आधी डॉक्टर ठरवतात की निरोगी म्हणजे काय. Dipika ते launch आधी ठरवते: 99.9% requests चालायला हव्यात. त्यामुळे महिन्याला 43 मिनिटांची अडचण चालते, हेच error budget. पालकांना त्रास जाणवतो तेव्हा alarm वाजतो, फक्त machine व्यस्त असताना नाही.
📖 नवे शब्दSLO — दिलेले उद्दिष्ट, जसे 99.9% requests चालणेerror budget — SLO किती अपयश चालू देते: 30 दिवसांत 43.2 मिनिटेRED — प्रत्येक API साठी: Rate, Errors, Durationtrace — एका request चा तिने स्पर्श केलेल्या प्रत्येक service मधून घेतलेला माग
⏪ आधी
रात्री जास्त CPU वर alerts वाजत पण पालकांना काही त्रास नसे, आणि खरे outages तासनतास लक्षात येत नसत.
💡 काय
Observability म्हणजे कार्यालयाचा आरोग्य तक्ता: निरोगी म्हणजे काय ते ठरवा, मग rate, errors आणि वेळ पाहा.
⚙️ कसे
99.9% SLO मुळे 30 दिवसांत 43.2 मिनिटांचे error budget मिळते; 99.99% ला फक्त 4.3 मिनिटे.
🎯 का
Alert पालकांना जाणवते त्यावर, CPU वर नाही, आणि budget सांगते कधी ship करायचे आणि कधी थांबायचे.
🚀 पुढे
पुढचा धडा प्रत्येक box ला बिल आणि कारण देतो: पहिला cost model आणि एका पानाची निर्णयाची नोंद.
🧪 इथे करून पाहा — SLO चे error budget मध्ये रूपांतर करा — मग ते incidents वर खर्च करा आणि किती उरते ते पाहा
प्रत्येक box ला एक बिल आणि एक कारण असते — पहिले cost model आणि एका पानाची निर्णयाची नोंद (ADR).
🧒 सोप्या शब्दांत
योजनेतल्या प्रत्येक box चे बिल असते: servers, storage, बाहेर पाठवलेला data, requests. Dipika बेरीज करते: महिन्याला $1,216. मग Redis का निवडले आणि त्याची किंमत काय, हे ती एका पानावर लिहिते. पुढच्या वर्षी नवी सहकारी वाद पुन्हा सुरू करण्याऐवजी ते पान वाचते.
📖 नवे शब्दcost model — प्रत्येक box चे बिल एकत्र: इथे महिन्याला $1,216egress — users कडे बाहेर पाठवलेला data; अनेकदा सर्वात मोठी ओळ, इथे $450trade-off — देवाणघेवाण (trade-off): एक मिळवता, दुसऱ्याने किंमत मोजता, जसे वेगासाठी 60 s उशीरADR — एका पानाची निर्णयाची नोंद (ADR): संदर्भ, निर्णय, परिणाम
⏪ आधी
Redis का आहे किंवा app ला किती खर्च येतो कोणालाच माहीत नसे, म्हणून प्रत्येक नवा माणूस तोच वाद पुन्हा घाले.
💡 काय
Cost model आणि ADR म्हणजे कार्यालयाचे बिल आणि इतिवृत्त: प्रत्येक box ला किती खर्च आणि तो का निवडला.
⚙️ कसे
पहिले बिल: servers $360, storage $46, egress $450, requests $360, एकूण $1,216; ADR 001 feeds Redis मध्ये cache करतो.
🎯 का
प्रत्येक देवाणघेवाण (trade-off) परिणामांसह एकदाच लिहिली जाते, म्हणून नंतरच्या teams जाणीवपूर्वक ठेवतात किंवा बदलतात.
🚀 पुढे
पुढचा धडा पूर्ण पद्धत तीन classic designs वर वापरतो: URL shortener, notifications आणि chat.
🧪 इथे करून पाहा — पहिले मासिक बिल — आकार आणि उदाहरणातल्या किंमती बदला; मग ती निवड समजावणारी ADR लिहा
तीन क्लासिक रचना, त्यांना आकार देणारे आकडे — short ids, fan-out, connections आणि ordering.
🧒 सोप्या शब्दांत
आता Dipika त्याच यादीने तीन प्रसिद्ध apps आखते. Short links: 6 billion links साठी 6 अक्षरे पुरतात. Notifications: साध्या शिक्षिका प्रत्येक inbox मध्ये push करतात, पण 2 million followers असलेल्या star चे वाचताना आणले जाते. Chat: 1 million online लोकांसाठी 20 gateway servers लागतात.
📖 नवे शब्दbase62 — 0-9, a-z, A-Z: 6 अक्षरांतून 62^6 ≈ 56.8 billion ids301/302 — browser ला लांब link कडे पाठवणारी redirect उत्तरेWebSocket — उघडे ठेवलेले connection, म्हणजे chat messages लगेच पोहोचतातsequence number — प्रत्येक message वरचा क्रमांक, म्हणजे ते योग्य क्रमाने दिसतात
⏪ आधी
Classic designs चित्रांसारखी पाठ केली जात, म्हणून आकड्यांत छोटा बदल झाला की design समजावता येत नसे.
💡 काय
Worked designs म्हणजे कार्यालय आपली यादी सुरुवातीपासून शेवटपर्यंत वापरते: दर वेळी आकडे आकार ठरवतात.
⚙️ कसे
6 billion links ला 6 base62 अक्षरे पुरतात; 2M followers च्या लेखकासाठी pull; 1M online chat ला 20 gateways.
🎯 का
प्रत्येक box एका आकड्यावरून समजावता येतो, म्हणून नवे काम अंदाज न राहता design बनते.
🚀 पुढे
पुढचा धडा तीन जड designs घेतो: chunks सह file storage, CDN सह video, आणि AI search साठी RAG.
🧪 इथे करून पाहा — तीन calculators — URL shortener, notification fan-out आणि chat service — आणि sequence number नुसार क्रम लावणे
तीन जड रचना — chunks आणि dedupe, renditions आणि CDN egress, AI search साठी ingest vs ask.
🧒 सोप्या शब्दांत
मोठ्या files चे तुकडे केले जातात, म्हणून एक शब्द बदलला तर 12 पैकी फक्त 2 तुकडे upload होतात. Video 4 आकारांत ठेवला जातो, आणि तो पाहणाऱ्यांकडे पाठवणे ठेवण्यापेक्षा खूप महाग असते. AI search साठी शाळेचे documents आधीच 400,000 छोटे तुकडे होतात. प्रश्न सर्वोत्तम 5 शोधतो आणि sources सह उत्तर देतो.
📖 नवे शब्दchunk — content hash ने नाव दिलेला file चा तुकडा; सारखा तुकडा एकदाच साठवला जातोrendition — video चा एक आकार: 1080p, 720p, 480p किंवा 240pCDN egress — CDN कडून पाहणाऱ्यांकडे गेलेला video: 1M views साठी 187.5 TBRAG — आधी योग्य chunks शोधा, मग AI ला त्यांतून sources सह उत्तर देऊ द्या
⏪ आधी
जड designs चा खर्च फक्त storage वरून काढला जाई, आणि खरे बिल, uploads आणि CDN egress, धक्का देऊन येई.
💡 काय
जड designs म्हणजे कार्यालयाच्या सर्वात मोठ्या योजना: files चे chunks, videos चे renditions, RAG साठी documents.
⚙️ कसे
एक शब्द बदलला तर 12 पैकी 2 chunks upload; 1M video views म्हणजे 187.5 TB CDN egress; RAG 400,000 chunks index करते.
🎯 का
तीच पद्धत कोणत्याही आकारात चालते: गरजा, आकडे, API, data, blocks, failure, security, cost, ADR.
🚀 पुढे
पुढे कुठे: traffic साठी Scaling school, data साठी Database school, आणि RAG साठी AI school.
🧪 इथे करून पाहा — तुम्ही बदललेली file chunk + dedupe करा, video ladder आणि त्याचे CDN बिल मोजा, आणि RAG index व prompt चा आकार काढा