మీ స్కేలబుల్ బ్యాకెండ్ ఒక టికింగ్ టైమ్ బాంబా?

చాలా మంది డెవలపర్లు స్కేలింగ్ అంటే మరిన్ని సర్వర్‌లను జోడించడం అని అనుకుంటారు. ఎక్కువ మంది వినియోగదారులను హ్యాండిల్ చేయడానికి వారు క్లౌడ్-నేటివ్ టూల్స్ మరియు డిస్ట్రిబ్యూటెడ్ డేటాబేస్‌లను ఉపయోగిస్తారు. కానీ ఇది తరచుగా ఒక కొత్త సమస్యను సృష్టిస్తుంది. మీరు ఒక కోటను నిర్మించడం లేదు. మీరు ఒక పేకమేడను నిర్మిస్తున్నారు.

సరైన ప్రణాళిక లేకుండా హారిజాంటల్ స్కేలింగ్ చేయడం వల్ల మీ ఫెయిల్యూర్ డొమైన్‌లు (failure domains) పెరుగుతాయి మాత్రమే. మీ సిస్టమ్‌లో ఫాల్ట్ టాలరెన్స్ (fault tolerance) లేకపోతే, ఒక చిన్న తప్పు కూడా మొత్తం వ్యవస్థను కుప్పకూల్చగలదు.

నిజమైన సిస్టమ్‌ను నిర్మించడానికి మీరు రెండు అంశాలపై దృష్టి పెట్టాలి:

  1. ఫాల్ట్ టాలరెన్స్ (Fault Tolerance) మరిన్ని ఇన్‌స్టెన్స్‌లను జోడించడం వల్ల కోరిలేటెడ్ ఫెయిల్యూర్స్ (correlated failures) నివారించలేరు. వైఫల్యాలు వ్యాపించకుండా ఉండటానికి మీరు వాటిని ఐసోలేట్ (isolate) చేయాలి.
  • మల్టిపుల్ అవైలబిలిటీ జోన్స్ (Availability Zones) ఉపయోగించండి.
  • రెండు పెద్ద ఇన్‌స్టెన్స్‌ల కంటే చిన్న సర్వీస్ ఇన్‌స్టెన్స్‌లను విస్తృతంగా ఉపయోగించండి.
  • Raft లేదా Paxos వంటి క్వోరమ్-ఆధారిత కన్సెన్సస్ (quorum-based consensus) ఉపయోగించండి. ఇది రెండు రీజియన్లు తామే లీడర్ అని భావించే 'స్ప్లిట్-బ్రెయిన్' (split-brain) పరిస్థితులను నివారిస్తుంది.
  • నెట్‌వర్క్ స్ప్లిట్ సమయంలో లోపభూయిష్టమైన రీజియన్లను నిలిపివేయడానికి ఫెన్సింగ్ మెకానిజమ్స్ (fencing mechanisms) ఉపయోగించండి.
  1. డేటా కన్సిస్టెన్సీ (Data Consistency) ఈవెంచ్వల్ కన్సిస్టెన్సీ (Eventual consistency) వేగానికి మంచిది. కానీ క్లిష్టమైన బిజినెస్ లాజిక్ కోసం ఇది అస్సలు పనికిరాదు. పేమెంట్స్ లేదా అకౌంట్ బ్యాలెన్స్‌ల కోసం మీకు స్ట్రాంగ్ కన్సిస్టెన్సీ (strong consistency) అవసరం.
  • మీ సిస్టమ్‌ను నెమ్మదింపజేసే డిస్ట్రిబ్యూటెడ్ ట్రాన్సాక్షన్స్ (distributed transactions) పై ఆధారపడకండి.
  • ట్రాన్సాక్షనల్ అవుట్‌బాక్స్ ప్యాటర్న్ (Transactional Outbox Pattern) ఉపయోగించండి.
  • మీ ప్రధాన డేటాను మరియు ఒక "అవుట్‌బాక్స్" టాస్క్‌ను ఒకే ట్రాన్సాక్షన్‌లో మీ లోకల్ డేటాబేస్‌కు వ్రాయండి.
  • ఆ టాస్క్‌లను మెసేజ్ క్యూకి పంపడానికి ఒక రిలేయర్ (relayer) ఉపయోగించండి.
  • మీ డౌన్‌స్ట్రీమ్ సర్వీసెస్ ఐడెంపోటెంట్ (idempotent) గా ఉండేలా చూసుకోండి, తద్వారా అవి డూప్లికేట్ మెసేజ్‌లను సురక్షితంగా హ్యాండిల్ చేయగలవు.

నిజమైన స్కేలబిలిటీ అనేది రెసిలియెన్స్ (resilience) గురించి. మీరు ఈ సూత్రాలను విస్మరిస్తే, మీరు వైఫల్యాల కోసం ఒక పెద్ద మైదానాన్ని నిర్మిస్తున్నట్లే. నేడే అత్యంత అధ్వాన్నమైన పరిస్థితిని (worst-case scenario) దృష్టిలో ఉంచుకుని డిజైన్ చేయండి.

మూలం: https://dev.to/prabashanadev/is-your-scalable-backend-a-ticking-time-bomb-6o7