મલ્ટી-રીજન હેલ્થ-ચેક એગ્રીગેટર બનાવવું
સાઓ પાઉલોમાં એક યુઝર ડેડ એજ નોડ (dead edge node) પર પહોંચે છે. તેઓ બગ રિપોર્ટ ફાઇલ કરતા નથી. તેઓ ટેબ બંધ કરી દે છે અને બીજું કંઈક જોવા લાગે છે.
સામાન્ય અપટાઇમ મોનિટર આ બાબત ચૂકી જાય છે. મોટાભાગના મોનિટર સિંગલ લોકેશનથી પ્રોબ (probe) કરે છે. તે એક જ જગ્યાએથી બધું બરાબર (green) દેખાય છે.
જ્યારે વાસ્તવિક યુઝર્સ ટાઇમઆઉટ (timeouts) અનુભવતા હતા, ત્યારે અમારું સ્ટેટસ પેજ 100% અપટાઇમ બતાવતું હતું. એક ગ્લોબલ હેલ્થ ચેક અમને ખોટું કહી રહ્યું હતું.
અમે સત્ય જણાવતી સિસ્ટમ કેવી રીતે બનાવી તે અહીં છે.
The Problem: Sampling Bias જો તમારું મોનિટર એક જ ડેટા સેન્ટરમાં હોય, તો તે માત્ર એક જ વાસ્તવિકતા જોઈ શકે છે. જો તમારા સિંગાપોર અને સાઓ પાઉલો એજ કનેક્શન ડ્રોપ કરી રહ્યા હોય, તો પણ તમે બધું બરાબર (green) હોવાનું રિપોર્ટ કરી શકો છો.
વિડિયો ટ્રાફિક આ પરિસ્થિતિને વધુ ખરાબ બનાવે છે. સામાન્ય પ્રાદેશિક નિષ્ફળતાઓમાં (regional failures) નીચેનાનો સમાવેશ થાય છે:
- એક ખંડને અસર કરતા ખરાબ BGP રૂટ્સ.
- કેશ ઇવિક્શન (Cache evictions) ને કારણે સ્લો ઓરિજિન ફોલબેક (slow origin fallbacks).
- ડિસ્ક એરરને કારણે TLS હેન્ડશેક ટાઇમઆઉટ.
- ચોક્કસ લોકલ રિઝોલ્વર્સ (local resolvers) પર DNS સમસ્યાઓ.
એક સિંગલ "200 OK" રિસ્પોન્સ તમને લગભગ કંઈ જ કહેતો નથી.
Our Three Rules for Health: અમે સ્ટેટસ કોડ્સથી આગળ વધ્યા છીએ. અમે ત્રણ મેટ્રિક્સનો ઉપયોગ કરીને હેલ્થ વ્યાખ્યાયિત કરીએ છીએ:
- પહોંચની ક્ષમતા (Reachability): TCP અને TLS હેન્ડશેક 800ms ની અંદર પૂર્ણ થવા જોઈએ.
- લેટન્સી (Latency): અમે p95 Time-to-First-Byte (TTFB) ટ્રેક કરીએ છીએ. એવરેજ (Averages) એ સ્લો ટેલ (slow tail) ને છુપાવી દે છે જે યુઝર્સને પરેશાન કરે છે.
- સચોટતા (Correctness): રિસ્પોન્સ બોડીમાં અપેક્ષિત માર્કર હોવું જોઈએ. જો 200 OK એરર પેજ રિટર્ન કરે છે, તો તે નિષ્ફળતા છે.
The Solution: Multi-Region Probing અમે એક મોટું મોનિટર વાપરવાનું બંધ કર્યું. તેના બદલે, અમે સસ્તા પ્રાદેશિક VPS ઇન્સ્ટન્સ પર નાના Go બાઈનરીઝ (Go binaries) ડિપ્લોય કરીએ છીએ.
દરેક પ્રોબર (prober):
- લોકલ વન્ટેજ પોઈન્ટ (local vantage point) થી એજ ચેક કરે છે.
- સાચો TTFB ડેટા મેળવવા માટે httptrace નો ઉપયોગ કરે છે.
- પરિણામો સેન્ટ્રલ એગ્રીગેટર પર પોસ્ટ કરે છે.
અમે સ્ટોરેજ માટે SQLite નો ઉપયોગ કરીએ છીએ. તે સરળ છે અને ઝીરો ઓવરહેડ (zero overhead) સાથે અમારા વર્કલોડને હેન્ડલ કરે છે. અમે પ્રી-એગ્રીગેટડ ડેટાને બદલે રો (raw) સેમ્પલ્સ સ્ટોર કરીએ છીએ. આ અમને ઇતિહાસને ફરીથી સ્કોર કરવા અથવા પછીથી ચોક્કસ નિષ્ફળતાઓનું ડિબગ કરવા દે છે.
The Secret: Quorum નેટવર્ક ઘોંઘાટવાળું (noisy) હોય છે. એક ડ્રોપ થયેલ પેકેટ એ આઉટેજ (outage) નથી.
અમે ખોટા એલાર્મ અટકાવવા માટે ક્વોરમ સિસ્ટમનો ઉપયોગ કરીએ છીએ. જ્યારે અનેક પ્રદેશો સહમત થાય ત્યારે જ અમે એજને "ડાઉન" (
તમારે કોઈ ભારે ઓબ્ઝર્વેબિલિટી પ્લેટફોર્મની જરૂર નથી. તમારે લોકલ પ્રોબ્સ, રો ડેટા અને એક એવો નિયમ જોઈએ છે જે નોઈઝ (noise) ને કારણે ગભરાઈ ન જાય.