- Wave 70 इंजीनियरों वाली $1.7B (2.3 ट्रिलियन KRW) की कंपनी है (अफ्रीका के लिए मोबाइल बैंकिंग सेवा प्रदान करती है)
- यह Postgres-आधारित Python monolith वाले मानक CRUD app आर्किटेक्चर पर बनी है
- सरल आर्किटेक्चर से शुरुआत कर और जटिलता को न्यूनतम रखते हुए समस्याएँ हल करके, इंजीनियर उपयोगकर्ताओं को मूल्य देने वाले काम पर ध्यान केंद्रित कर सके
- Stackoverflow ने एकल monolith को scale करके इतनी सफल वृद्धि की कि उसे $1.8B में अधिग्रहित किया गया
सरल आर्किटेक्चर की दक्षता के बावजूद ज़्यादातर मीडिया जटिल आर्किटेक्चर को पसंद करता है
- tech conferences में जटिल microservices-आधारित आर्किटेक्चर पर बहुत प्रस्तुतियाँ होती हैं, लेकिन सरल monolith पर लगभग कोई प्रस्तुति नहीं होती
- कई कंपनियाँ छोटे पैमाने के applications होने के बावजूद जटिल technologies की नकल करती हैं और उसी से conferences तथा HN पर लोकप्रियता पाती हैं
- हमारा इस्तेमाल किया जाने वाला आर्किटेक्चर इतना सरल है कि architecture diagram बनाने की भी ज़रूरत नहीं पड़ती
सरलता बनाए रखने के तरीके
- Wave synchronous Python का उपयोग करता है, जिसका मतलब है कि server process I/O का इंतज़ार करते समय block हो जाता है
- Eventlet जैसे asynchronous frameworks आज़माए गए, लेकिन उनमें इतने bugs थे कि उनकी लागत operational pain के लायक नहीं लगी
- जटिलता बढ़ाने के बजाय, जिन कामों का execution time लंबा होता है उन्हें queue में अलग करके संभाला जाता है
- data residency नियमों का पालन करने के लिए कुछ देशों में on-premise data centers चलाने पड़ते हैं
- सेनेगल/कोट द’ईवोआर cloud पर थे, लेकिन युगांडा और अन्य देशों में नियमों के कारण on-premise की आवश्यकता थी
- ऐसे समय में जटिल आर्किटेक्चर की तुलना में सरल आर्किटेक्चर कहीं अधिक आसान होता है
खरीदने के बजाय खुद बनाना
- छोटी टीम होने के कारण शुरुआत में software खरीदना पसंद था, लेकिन जब गंभीर bugs ठीक नहीं किए जा सके तो अपने tools विकसित किए गए
- अपने tools बनाना ऐसी जटिलता है जिसे हम उठाना नहीं चाहते, लेकिन कुछ product categories में व्यापक शोध के बाद भी ऐसा vendor नहीं मिला जो हमारे लिए उपयुक्त product दे सके
- core competency के बाहर भी कभी-कभी अपने tools बनाना और internal expertise बनाए रखना ज़रूरी होता है
जिन चुनावों पर पुनर्विचार है
- RabbitMQ, Celery, SQLAlchemy, Python जैसी technology choices पर पुनर्विचार किया जा रहा है, क्योंकि ये जटिलता बढ़ाती हैं या maintenance burden बढ़ाती हैं
- अगर नया codebase शुरू करना हो, तो इन technology choices पर बहुत सावधानी से विचार किया जाएगा
जिन चुनावों से संतुष्टि है
- GraphQL, custom transport protocol, Kubernetes जैसी choices से संतुष्ट हैं
- GraphQL के फायदे हैं जैसे self-documentation, code generation, GraphiQL interactive explorer आदि
- GraphQL के उपयोग में इसके फायदे नुकसान से अधिक माने जाते हैं
- फायदे
- सटीक return types के लिए self-documentation
- सटीक return types के code generation के कारण client अधिक सुरक्षित हो जाते हैं
- GraphiQL interactive explorer से productivity में सुधार
- अलग-अलग apps (user app, support app, Wave agent app आदि) ज़्यादातर एक ही API साझा कर सकते हैं, जिससे जटिलता घटती है
- configurable query language का उपयोग करने पर clients बिना बहुत से special-purpose endpoints बनाए, एक ही packet round trip में अपनी ज़रूरत का सटीक data ला सकते हैं
- RESTful API में क्या माना जाए, इस पर होने वाली bikeshedding (महत्वपूर्ण मुद्दों को टालकर कम महत्वपूर्ण बातों पर लंबी बहस करना) समाप्त होती है
- नुकसान
- जब GraphQL अपनाया गया था, उस समय GraphQL libraries बहुत अच्छी नहीं थीं
- default GQL encoding दोहरावपूर्ण है, और चूँकि कई ग्राहक low bandwidth का उपयोग करते हैं, इसलिए size limits पर बहुत ध्यान दिया जाता है
- Kubernetes का उपयोग देश-वार data center संचालन आवश्यकताओं को पूरा करने के लिए किया जाता है
निष्कर्ष
- application architecture को जितना संभव हो उतना सरल रखकर, जटिलता (और manpower) का budget वहाँ खर्च किया जा सकता है जहाँ वह business के लिए मददगार हो
- जब तक जटिलता जोड़ने का कोई मजबूत कारण न हो, काम को यथासंभव सरल तरीके से करने की सोच के कारण, हम अफ्रीका के financial business जैसे सामान्यतः कठिन माने जाने वाले क्षेत्र में काम करते हुए भी बहुत अधिक इंजीनियरों के बिना काफ़ी बड़ा business बना सके
9 टिप्पणियां
"build के बजाय buy" की जगह शायद "buy के बजाय build" सही लगता है।
आह, मैं ज़ोर देने की कोशिश कर रहा था, लेकिन शीर्षक अजीब हो गया था। मैंने उसे ठीक कर दिया है। धन्यवाद।
क्या यह आर्थिक चक्र के हिसाब से बदलने वाला ट्रेंड है? ट्रेंड से अलग, monolith से शुरुआत करना fixed cost घटाने और maintenance के लिहाज़ से फ़ायदेमंद है
समझने में आसान architecture को maintain करना भी आसान होता है।
मेरे हिसाब से किसी भी service को monolithic तरीके से शुरू करना बेहतर लगता है। अगर शुरुआत से ही MSA लेकर चलें, तो वह पैसों की बर्बादी है।
"जटिलता बढ़ने पर लागत (पैसा, लोग, समय...) भी बढ़ती है"
"जिस समस्या को सरल architecture से हल किया जा सकता है, उसे जटिल architecture से हल करने की कोशिश मत करो."
Hacker News राय
microservices पर एक engineer की सलाह
microservices पर एक talk
cognitive bias और simplicity
over-engineering और अनुभव की कमी
work-life balance को महत्व देने वाली company
Dan Luu के बारे में व्यक्तिगत अनुभव
simple architecture का महत्व
architecture और engineering team की social structure
simple architecture की preference
क्या आप कृपया "David Schmitz के माइक्रोसर्विस विफलताओं पर सुझावों को कवर करने वाले व्याख्यान" लिंक साझा कर सकते हैं?
यह https://www.youtube.com/watch?v=r8mtXJh3hzM है