𝗜𝘀 𝗬𝗼𝘂𝗿 𝗦𝗰𝗮𝗹𝗮𝗯𝗹𝗲 𝗕𝗮𝗰𝗸𝗲𝗻𝗱 𝗮 𝗧𝗶𝗰𝗸𝗶𝗻𝗴 𝗧𝗶𝗺𝗲 𝗕𝗼𝗺𝗯?
കൂടുതൽ സെർവറുകൾ ചേർക്കുന്നതാണ് സ്കെയിലിംഗ് എന്ന് പല ഡെവലപ്പർമാരും കരുതുന്നു. കൂടുതൽ ഉപയോക്താക്കളെ കൈകാര്യം ചെയ്യാൻ അവർ ക്ലൗഡ്-നേറ്റീവ് ടൂളുകളും ഡിസ്ട്രിബ്യൂട്ടഡ് ഡാറ്റാബേസുകളും ഉപയോഗിക്കുന്നു. എന്നാൽ ഇത് പലപ്പോഴും പുതിയൊരു പ്രശ്നത്തിന് കാരണമാകുന്നു. നിങ്ങൾ ഒരു കോട്ടയല്ല നിർമ്മിക്കുന്നത്, മറിച്ച് തകരാൻ സാധ്യതയുള്ള ഒരു കാർഡ് വീടാണ് (house of cards).
കൃത്യമായ പ്ലാനില്ലാതെ ഹൊറിസോണ്ടൽ സ്കെയിലിംഗ് നടത്തുന്നത് നിങ്ങളുടെ ഫെയിലർ ഡൊമെയ്നുകളെ (failure domains) വർദ്ധിപ്പിക്കുകയേയുള്ളൂ. നിങ്ങളുടെ സിസ്റ്റത്തിന് ഫോൾട്ട് ടോളറൻസ് (fault tolerance) ഇല്ലെങ്കിൽ, ഒരു ചെറിയ പിശക് പോലും എല്ലാം തകരാൻ കാരണമായേക്കാം.
ഒരു യഥാർത്ഥ സിസ്റ്റം നിർമ്മിക്കുന്നതിന് നിങ്ങൾ രണ്ട് കാര്യങ്ങളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കണം:
- ഫോൾട്ട് ടോളറൻസ് (Fault Tolerance) കൂടുതൽ ഇൻസ്റ്റൻസുകൾ ചേർക്കുന്നത് കോറിലേറ്റഡ് ഫെയിലറുകളെ (correlated failures) തടയുന്നില്ല. പിശകുകൾ പടരാതിരിക്കാൻ അവയെ ഐസൊലേറ്റ് (isolate) ചെയ്യേണ്ടതുണ്ട്.
- ഒന്നിലധികം അവയ്ലബിലിറ്റി സോണുകൾ (Availability Zones) ഉപയോഗിക്കുക.
- രണ്ട് വലിയ ഇൻസ്റ്റൻസുകൾക്ക് പകരം ചെറിയ സർവീസ് ഇൻസ്റ്റൻസുകൾ വിതരണം ചെയ്യുക.
- Raft അല്ലെങ്കിൽ Paxos പോലുള്ള ക്വോറം അധിഷ്ഠിത കൺസെൻസസ് (quorum-based consensus) ഉപയോഗിക്കുക. രണ്ട് റീജിയനുകൾ തങ്ങളാണ് ലീഡർ എന്ന് കരുതുന്ന 'സ്പ്ലിറ്റ്-ബ്രെയിൻ' (split-brain) സാഹചര്യങ്ങൾ ഇത് തടയുന്നു.
- നെറ്റ്വർക്ക് സ്പ്ലിറ്റ് സമയത്ത് തകരാറിലായ റീജിയനുകളെ ഓഫ് ചെയ്യാൻ ഫെൻസിംഗ് മെക്കാനിസങ്ങൾ (fencing mechanisms) ഉപയോഗിക്കുക.
- ഡാറ്റാ കൺസിസ്റ്റൻസി (Data Consistency) വേഗതയ്ക്ക് 'ഇവഞ്ചുവൽ കൺസിസ്റ്റൻസി' (eventual consistency) മികച്ചതാണ്. എന്നാൽ നിർണ്ണായകമായ ബിസിനസ് ലോജിക്കിന് ഇത് ഒട്ടും അനുയോജ്യമല്ല. പേയ്മെന്റുകൾക്കോ അക്കൗണ്ട് ബാലൻസിനോ വേണ്ടി നിങ്ങൾക്ക് 'സ്ട്രോങ്ങ് കൺസിസ്റ്റൻസി' (strong consistency) ആവശ്യമാണ്.
- സിസ്റ്റത്തിന്റെ വേഗത കുറയ്ക്കുന്ന ഡിസ്ട്രിബ്യൂട്ടഡ് ട്രാൻസാക്ഷനുകളെ ആശ്രയിക്കരുത്.
- ട്രാൻസാക്ഷണൽ ഔട്ട്ബോക്സ് പാറ്റേൺ (Transactional Outbox Pattern) ഉപയോഗിക്കുക.
- നിങ്ങളുടെ പ്രധാന ഡാറ്റയും ഒരു "ഔട്ട്ബോക്സ്" ടാസ്ക്കും ഒരൊറ്റ ട്രാൻസാക്ഷനിലൂടെ ലോക്കൽ ഡാറ്റാബേസിലേക്ക് എഴുതുക.
- ആ ടാസ്ക്കുകൾ ഒരു മെസേജ് ക്യൂവിലേക്ക് അയക്കാൻ ഒരു റിലേയർ (relayer) ഉപയോഗിക്കുക.
- ഡ്യൂപ്ലിക്കേറ്റ് മെസേജുകൾ സുരക്ഷിതമായി കൈകാര്യം ചെയ്യാൻ നിങ്ങളുടെ ഡൗൺസ്ട്രീം സർവീസുകൾ ഐഡംപോറ്റന്റ് (idempotent) ആണെന്ന് ഉറപ്പാക്കുക.
യഥാർത്ഥ സ്കെയിലബിലിറ്റി എന്നത് റെസിലിയൻസിനെ (resilience) കുറിച്ചാണ്. ഈ തത്വങ്ങൾ നിങ്ങൾ അവഗണിക്കുകയാണെങ്കിൽ, പരാജയങ്ങൾക്കായി നിങ്ങൾ ഒരു വലിയ മൈതാനം ഒരുക്കുകയേയുള്ളൂ. ഏറ്റവും മോശമായ സാഹചര്യങ്ങളെ മുൻകൂട്ടി കണ്ട് ഇന്ന് തന്നെ ഡിസൈൻ ചെയ്യുക.
Source: https://dev.to/prabashanadev/is-your-scalable-backend-a-ticking-time-bomb-6o7