D1 Read Replicas-இல் 6 வினாடிகள் தாமதம் (Lag) ஏற்பட்டது
டோக்கியோவில் உள்ள ஒரு D1 read replica, வட அமெரிக்காவில் செய்யப்பட்ட ஒரு write-ஐ விட 6.1 வினாடிகள் பின் தங்கியிருந்தது.
தவறான impressions-களைத் தடுக்கும் (throttling) ஒரு tracker மூலம் இதை நான் அறிந்துகொண்டேன். ஆவணங்கள் (documentation) eventual consistency பற்றி குறிப்பிடுகின்றன. ஆனால் திட்டமிடுவதற்குத் தேவையான ஒரு குறிப்பிட்ட நேரத்தை அவை வழங்கவில்லை.
உண்மையான எண்களைக் கண்டறிய நான் ஒரு staleness probe-ஐ உருவாக்கினேன். அந்த probe ஒரு UUID மற்றும் epoch உடன் ஒரு row-வை எழுதுகிறது. அந்த row தோன்றும் வரை அது replica-வை தொடர்ந்து சரிபார்க்கிறது (polls). பின்னர் அது தாமதத்தை (delay) பதிவு செய்கிறது.
ஆசியாவில் செய்யப்பட்ட 200 probes-லிருந்து கிடைத்த முடிவுகள்:
- p50: 800ms
- p95: 3,400ms
- p99: 6,100ms
உங்கள் primary வட அமெரிக்காவிலும், பயனர்கள் ஆசியாவிலும் இருந்தால், இந்தத் தாமதம் (lag) அதிகமாக இருக்கும்.
நான் ஒரு schema error-ஐயும் எதிர்கொண்டேன். Primary-இல் ஒரு migration நடந்தது. ஒரு Worker மீண்டும் தொடங்கப்பட்டது (restarted). புதிய table வருவதற்கு முன்பே முதல் சில requests ஒரு replica-வை சென்றடைந்தன. அந்த table இல்லை என்று பிழை (error) காட்டியது. உண்மையில் table அங்கிருந்தது, ஆனால் replica பின் தங்கியிருந்தது.
இந்தத் தாமதத்தைத் தவிர்க்க (routing around the lag) வழிவகை செய்வதன் மூலம் இதை நான் சரிசெய்தேன். நான் அதைத் தடுக்க முயலவில்லை.
எனது வடிவமைப்பு (design) இதோ:
- Writer, row-வில் ஒரு written_at epoch-ஐச் சேர்க்கிறது.
- Writer, response-இல் ஒரு X-D1-Written-At header-ஐச் சேர்க்கிறது.
- Reader, அந்த header-ஐ replica-விலிருந்து வரும் தரவோடு ஒப்பிடுகிறது.
- Replica தரவு அந்த header-ஐ விடப் பழையதாக இருந்தால், reader KV-க்கு மாறுகிறது (falls back to KV).
அதே பிராந்தியத்தில் (region) KV 500ms-க்கும் குறைவான நேரத்தில் இயங்குகிறது. இது ஒரு நாளைக்கு 10M reads வரை இலவசம். இது முக்கியமான flags-களுக்குப் புதிய தரவைப் பெறுவதற்கான ஒரு மலிவான வழியாகும்.
Replica பின் தங்கியிருக்கும் அந்தச் சிறிய கால இடைவெளியில் மட்டுமே நீங்கள் KV-யைப் பயன்படுத்துவீர்கள். Replica தரவைச் சரிசெய்து கொண்டவுடன் (catches up), பெரும்பாலான reads சாதாரணமாக D1-ஐயே சென்றடையும்.
முழுமையான script மற்றும் migration pattern ஆகியவற்றை எனது விரிவான பதிவில் பகிர்ந்துள்ளேன்.