डेटाबेस के बिना high-availability web service बनाना
खोज
- किसी नए startup के मामले में, आमतौर पर Rails, Django, Node जैसे web framework और MySQL, PostgreSQL, MongoDB जैसे database चुने जाते हैं
- लेकिन अगर web service और database instance को एक में मिलाया जा सके तो? इस तरह सभी data को RAM में स्टोर करने वाले तरीके से काम किया जा सकता है
- RAM को database की तरह इस्तेमाल करने पर SQL query से data को serialize करने की ज़रूरत नहीं रहती
- index को in-memory hash table का उपयोग करके implement किया जा सकता है
- background job को बड़े process के भीतर thread के रूप में संभाला जा सकता है
- अगर process crash हो जाए, तो RAM के snapshot समय-समय पर लेकर और बदलावों को disk पर लिखकर recovery की जा सकती है
विस्तार
- जब high availability चाहने वाले ग्राहक आने लगें, तो Raft consensus algorithm का उपयोग करके server को replicate किया जाता है
- leader server डाउन हो जाए तो नया leader चुना जाता है और वही request को संभालता है
- इस तरीके से server restart किए बिना rolling deploy भी किया जा सकता है
निष्कर्षण
- जब बड़े ग्राहक बढ़ने लगें, तो sharding के ज़रिए web service को विभाजित करके संभाला जा सकता है
- हर enterprise ग्राहक को dedicated cluster दिया जाता है
- मुख्य bottleneck commit thread की performance हो सकती है
हमारा stack
- Common Lisp का उपयोग: multi-threading support बहुत अच्छा है, और code hot reloading के लिए उपयुक्त है
- bknr.datastore और bknr.cluster का उपयोग: Raft implementation के लिए Baidu की Braft library का उपयोग किया जाता है
- image file स्टोर करने के लिए EFS का उपयोग: S3 की तुलना में error handling और testing आसान है
सारांश
- यह architecture नए startup के लिए उपयुक्त है, और Common Lisp का उपयोग करने पर कई tools पहले से उपलब्ध हैं
- bknr.datastore, Braft, और Raft के योगदान के लिए धन्यवाद
GN⁺ का सार
- यह लेख डेटाबेस के बिना high-availability web service बनाने के लिए एक नई architecture पेश करता है
- RAM को database की तरह इस्तेमाल किया जाता है, और Raft consensus algorithm के ज़रिए high availability सुनिश्चित की जाती है
- Common Lisp का उपयोग करके multi-threading और code hot reloading को support किया जाता है
- यह architecture नए startup के लिए उपयुक्त है, और तेज़ development व debugging संभव बनाती है
- मिलते-जुलते features वाले project में Redis और Memcached शामिल हैं
1 टिप्पणियां
Hacker News राय
SQLite का उपयोग किए बिना अपना खुद का transaction log बनाना अजीब है
MySQL, Postgres, Redis, MongoDB आदि का उपयोग किए बिना अपना in-memory database बनाना जटिल है
MySQL या Postgres के बुनियादी पहलुओं को सीखने से बचना समय की बर्बादी है
यह HashiCorp के Nomad, Consul, Vault जैसी architecture है
यह गलतफ़हमी है कि RAM बहुत सस्ती है
मैंने ऐसे projects देखे हैं जहाँ file system directories को table और JSON files को row की तरह इस्तेमाल किया गया
relational database का उपयोग करना ज़्यादा स्थिर है
जटिल चीज़ों से बचने के लिए अपना Raft consensus layer implement किया गया
आधुनिक desktop और mobile apps अक्सर SQLite जैसी database का उपयोग करते हैं
अपना in-memory database बनाना Postgres या SQLite install करने से आसान नहीं है