ஒரு நாளைக்கு 18 டிரில்லியன் செய்திகளுக்கு மேல் ராப்ளாக்ஸ் அதன் காஃப்கா தளத்தை எவ்வாறு விரிவாக்கியது
திறமையான அமைப்புகளுக்கான முழுமையான மேம்பாடு

கடந்த இரண்டு ஆண்டுகளில், எங்கள் உள் செய்தி வரிசைத் தளத்தை ஒவ்வொரு ஆண்டும் 2.5 மடங்குக்கு மேல் விரிவுபடுத்தி, ஒரு நாளைக்கு 18 டிரில்லியன் செய்திகளுக்கு மேல் கையாளும் அளவுக்கு உயர்த்தியுள்ளோம். நாங்கள் தற்போது வினாடிக்கு 300 மில்லியனுக்கும் அதிகமான செய்திகளைச் செயலாக்குகிறோம், அதே நேரத்தில் 99.995% கிடைக்கும் தன்மையைப் பராமரிக்கிறோம். அப்பாச்சி கஃப்காவில் கட்டமைக்கப்பட்ட இந்தச் செய்தி வரிசைத் தளம், நிறுவனம் முழுவதும் தரவை நாங்கள் நகர்த்துவதற்கான ஒரு முக்கிய அங்கமாக மாறியுள்ளது. இது பகுப்பாய்வு நிகழ்வுகள், நெறிப்படுத்தல் குழாய்கள், பொருத்துதல் அமைப்புகள் மற்றும் பல போன்ற பணிச்சுமைகளை ஆதரிக்கிறது. இந்த எண்கள் உற்சாகமானவை, ஆனால் நாங்கள் எப்படி அங்கு சென்றோம் என்பதே மிகவும் முக்கியமான கதை.
முழுமையான மேம்படுத்தலின் தாக்கம்
பெரிய அளவிலான அமைப்புகளைப் பற்றிய ஒரு பொதுவான தவறான எண்ணம் என்னவென்றால், திறன் என்பது பெரும்பாலும் ஒரு வன்பொருள் சிக்கல் என்பதாகும். எங்கள் அனுபவத்தில், அளவிடுதலை ஒரு முழுமையான பொறியியல் சிக்கலாகக் கருதுவதன் மூலம் மிகத் தாக்கத்தை ஏற்படுத்தும் மேம்பாடுகள் செய்யப்படுகின்றன.
Roblox முழுவதும் உள்ள அணிகள், AI பயிற்சிப் பாதைகள், ஸ்ட்ரீம் செயலாக்கச் சுருக்கங்கள் மற்றும் டெலிமெட்ரி அமைப்புகள் உட்பட, செய்தி அனுப்பும் வரிசைக்கு மேல் பல்வேறு தளங்களை உருவாக்கியுள்ளன. இந்தத் தளங்களின் உரிமையாளர்களுடன் கூட்டு சேர்வது, தொகுத்தல் மற்றும் சுருக்கத்தை இயக்குவது போன்ற சிறந்த நடைமுறைகளைப் பின்பற்றுவதை உறுதிசெய்ய எங்களுக்கு உதவுகிறது. இது, இறுதிப் பயனர்களை விரிவான உள்ளமைவு அமைப்பில் ஈடுபடுத்தாமல், திறமையான அமைப்புகளை உருவாக்குகிறது.

பிளாட்ஃபார்மைப் பயன்படுத்தும் அணிகளுடன் வணிக முன்னுரிமைகள், அளவீடு மற்றும் வெற்றி அளவுகோல்கள் ஆகியவற்றில் ஒத்துப்போவது மிகவும் முக்கியமானது மற்றும் இது அணிகளுக்கு இடையேயான ஒத்துழைப்பை மேம்படுத்த உதவுகிறது. முக்கிய அளவீடுகள் அமைப்பின் அடுக்குகளைப் பொறுத்து வேறுபடுகின்றன: குறைவான இயந்திரங்களுடன் அதிக அளவு தரவை திறமையாகக் கையாள நாம் காஃப்கா சேவையகங்களை மேம்படுத்தலாம் என்றாலும், இறுதிப் பயனர்கள் மில்லிவினாடி அளவிற்கு எண்ட்-டு-எண்ட் தாமதத்தை மேம்படுத்த விரும்பலாம், அல்லது அவர்களின் பேட்ச் வேலை தரவை எழுதுவதை முடிக்க எடுக்கும் மொத்த நேரத்திற்காக மேம்படுத்த விரும்பலாம்.
அனைத்து டிராஃபிக்களும் சமமானவை அல்ல
நாம் கற்றுக்கொண்ட ஒரு முக்கிய பாடம் என்னவென்றால், பெரிய அளவிலான தளங்கள் அனைத்து டிராஃபிக்கையும் சமமாக நடத்தாதபோது அவை மிகவும் நம்பகமானவையாக இருக்கின்றன. சில பணிச்சுமைகளுக்கு மிகக் குறைந்த தாமதமும், உச்சப்படியான சுமைகளின் போது வலுவான பாதுகாப்பும் தேவைப்படுகிறது, எங்கள் மேட்ச்மேக்கிங் அமைப்புகளைப் போல, அவை 10 மில்லி வினாடிகளுக்கும் குறைவான முனையிலிருந்து-முனை தாமதத்துடன் செயல்படுகின்றன. மற்றவை, எங்கள் பகுப்பாய்வு நிகழ்வு உள்வாங்கும் குழாய்கள் (analytics event ingestion pipelines) போல, மிக அதிக அளவிலானவையாகவும் ஆனால் தாமதத்தை அதிகம் சகித்துக்கொள்ளக்கூடியவையாகவும் இருக்கும். இவை முழுமையான தாமதம் பல வினாடிகள் இருந்தாலும் கூட சீராக இயங்கும். இரண்டுமே ஒரே மாதிரியாகக் கையாளப்பட்டால், அதிக அளவிலான போக்குவரத்து, குறிப்பாக உச்ச நேரச் சுமையின் போது (peak load), வணிக ரீதியாக மிகவும் முக்கியமான போக்குவரத்தை இடம்பெயரச் செய்யக்கூடும்.
இந்தச் சிக்கலைத் தீர்க்க, ஒவ்வொரு பயன்பாட்டு நிகழ்வுத் தேவைகளின் அடிப்படையிலும் நாங்கள் டிராஃபிக்கைக் குழுவாக்குகிறோம், இதன் மூலம் ஒவ்வொன்றும் நன்கு ஆதரிக்கப்படுவதை உறுதிசெய்கிறோம். காஃப்காவில், முனையிலிருந்து-முனை தாமதம் மற்றும் த்ரூபுட் ஆகியவற்றுக்கு இடையிலான சமரசம், புதிய பயன்பாட்டு நிகழ்வுகளை அமைக்கும்போது கருத்தில் கொள்ள வேண்டிய முக்கியமான விஷயங்களில் ஒன்றாகும். தயாரிப்பாளர் முதல் சேவையகம் முதல் நுகர்வோர் வரையிலான தரவுப் பாதை முழுவதும் இது பொருந்தும்: இவற்றில் ஒவ்வொன்றிலும், த்ரூபுட் அல்லது தாமதத்திற்காக உகந்ததாக்கக்கூடிய உள்ளமைவுகள் உள்ளன. கிளையன்ட் பக்க உள்ளமைவுகளை தனிப்பட்ட பயன்பாட்டு நிகழ்வுகளுக்கு ஏற்ப சரிசெய்யலாம், ஆனால் சர்வர் பக்க உள்ளமைவுகள் குறைவான நெகிழ்வுத்தன்மை கொண்டவை, ஏனெனில் ஒவ்வொரு தனித்துவமான பயன்பாட்டு நிகழ்விற்கும் ஒரு பிரத்யேக கிளஸ்டரைப் பராமரிப்பது சாத்தியமற்றது.
ஒவ்வொரு கிளஸ்டரும் சேவை செய்யும் பயன்பாட்டு நிகழ்வுகளுக்காக அதை உகந்ததாக்கும் இந்த அணுகுமுறையை, ஸ்டேக்கின் கீழ் அடுக்கான வன்பொருள் அடுக்கு வரை நாங்கள் பயன்படுத்துகிறோம்.
வன்பொருள் இன்னும் முக்கியமானது
நாங்கள் RAID10 HDD இயந்திரங்களில் காஃப்காவை இயக்கியதன் மூலம் தொடங்கினோம். டிராஃபிக் அளவு அதிகரித்ததால், எங்கள் இயந்திரங்களின் டிஸ்க் I/O திறன், ஒரு சர்வர் காஃப்கா த்ரூபுட்-ஐக் கட்டுப்படுத்தும் முதன்மைத் தடையாக மாறியது. இதைச் சரிசெய்ய, நாங்கள் இரண்டு மேம்பாடுகளைச் செய்தோம். நாங்கள் பிரோக்கர்களை முடிந்தவரை SSD-களைப் பயன்படுத்த மாற்றியமைத்தோம், இதனால் தடையை டிஸ்க் I/O திறனிலிருந்து நெட்வொர்க் த்ரூபுட் அல்லது டிஸ்க் இடத்திற்கு (நாங்கள் வாங்கிய SSD-களில் குறைவான டிஸ்க் இடம் இருந்ததால்) மாற்றினோம். இது வட்டு I/O த்ரூபுட்டை 10 மடங்கு அதிகரித்தது. எங்கள் மீதமுள்ள HDDs-ஐ RAID10-லிருந்து RAID0-க்கு மாற்றவும் நாங்கள் தொடங்கினோம். RAID0-ல் ஒவ்வொரு எழுத்துக்கும் இரண்டு வட்டுகளில் எழுதுவதற்குப் பதிலாக ஒரு வட்டில் எழுத வேண்டியிருப்பதால், இது வட்டு I/O திறனை தோராயமாக இருமடங்காக்கியது.
இதில் உள்ள சமரசம் என்னவென்றால், ஒவ்வொரு செய்தியின் நகலும் இரண்டு வட்டுகளுக்குப் பதிலாக ஒரு வட்டில் எழுதப்படுவதால், RAID10-லிருந்து RAID0-க்கு மாறுவது நம்பகத்தன்மை அபாயத்தை ஏற்படுத்தக்கூடும். நம்பகத்தன்மையைப் பேணுவதற்காக, பல பிராந்தியங்களுக்கு நகலெடுப்பது உட்பட, 'அக்ஸ்' (acks) மற்றும் தரவு நகலெடுப்பை அதிகரிக்க முக்கிய பயன்பாட்டு நிகழ்வுகளுடன் நாங்கள் பணியாற்றினோம்.
ஒவ்வொரு இயந்திரத்தின் சேமிப்பு மற்றும் செயல்திறன் திறன்களை முழுமையாகப் பயன்படுத்திக்கொள்ள கூடுதல் வேலை தேவைப்பட்டது. காஃப்கா செய்திகளைத் தற்காலிகமாகச் சேமித்து, நினைவிலிருந்து வாசிப்புகளை அல்லது சமீபத்திய தரவை வழங்குவதற்கும், வரலாற்றுத் தரவைப் படிப்பது போன்ற அவசியமான சமயங்களில் மட்டுமே வட்டில் சென்று மதிப்புமிக்க IOPS-ஐப் பயன்படுத்துவதற்கும், எங்கள் நினைவக ஒதுக்கீடுகள் மற்றும் பக்கக் கேச் மேலாண்மை உள்ளமைவுகளை மேம்படுத்தினோம்.
வன்பொருள் வரம்புகளைப் புரிந்துகொள்ளவும், மென்பொருள் மட்டத்தில் நாம் என்ன வரம்புகளை அமைக்க வேண்டும் என்பதைத் தீர்மானிக்கவும் நாங்கள் செயல்திறன் அளவீடுகளை (performance benchmarks) நடத்துகிறோம். நடைமுறையில், இதன் பொருள் Kafka புரொக்கர் (broker) படித்தல் மற்றும் எழுதும் வரம்புகளை (throttles) அமைப்பதாகும், இவை கிளஸ்டர்கள் இயங்கும் வன்பொருளைப் பொறுத்து மாறுபடும். எங்கள் SSD இயந்திரங்கள் ஒரு புரொக்கருக்கு அதிக செயல்திறனைக் கையாளக்கூடியவை, அதேசமயம் எங்கள் HDD இயந்திரங்கள் வரலாற்றுத் தரவை நீண்ட காலத்திற்குத் தக்கவைக்க வேண்டிய பயன்பாட்டு நிகழ்வுகளுக்கு மிகவும் பொருத்தமானவை.
நம்பகத்தன்மைக்காக உருவாக்குதல்
வரிசைப்படுத்தல் தளம் Roblox-இன் உள்கட்டமைப்பின் ஒரு முக்கிய அங்கமாகும், மேலும் நம்பகத்தன்மையைப் பேணுவது மிகவும் அவசியம். முன்னோட்டப் பரிசோதனை மற்றும் தொடர்ச்சியான தோல்வி நிலைச் சோதனைகள் (சில நேரங்களில் 'கேம் டே எக்ஸர்சைஸ்' என்று அழைக்கப்படுபவை) ஆகியவை எங்கள் உள்கட்டமைப்பு ஒற்றை ஹோஸ்ட் தோல்வி, ரேக் தோல்வி, நெட்வொர்க்கிங் சிக்கல்கள் மற்றும் பல தோல்வி முறைகளைத் தாங்கும் திறன் கொண்டது என்பதைச் சரிபார்க்க உதவியுள்ளன. எங்கள் நம்பகத்தன்மை குழுவின் உள் கியோஸ் சோதனைத் தளம், பல்வேறு தோல்விச் சூழ்நிலைகளை உருவகப்படுத்துவதற்கான செயல்முறையை செயல்படுத்தி நெறிப்படுத்தியுள்ளது. இந்தச் சோதனைகள், எச்சரிக்கைகளைத் தவறாமல் சரிபார்ப்பதன் மூலமும், அரிதான சிக்கல்கள் உட்பட பல்வேறு சிக்கல்களைக் கையாள வேண்டிய படிகளைச் செயல்பாட்டாளர்கள் அறிந்திருப்பதை உறுதி செய்வதன் மூலமும், அமைப்பு மேம்பாடுகள் அல்லது பின்னடைவுகளைக் கண்டறியவும், செயல்பாட்டுத் திறனை வளர்க்கவும் உதவுகின்றன.
சார்பு பயன்பாட்டு நிகழ்வுகளுக்காக வரிசை செயல்பாட்டை விரைவாக மீட்டமைக்கக்கூடிய ஃபெய்லோவர் செயல்முறைகளையும் நாங்கள் வடிவமைத்து செயல்படுத்தியுள்ளோம். ஒரு தனிப்பட்ட கிளஸ்டரின் முழுமையான தோல்வி ஏற்பட்டாலும், போதுமான கொள்ளளவு கொண்ட ஒரு ஆரோக்கியமான கிளஸ்டருக்கு வாடிக்கையாளர்களை மாற்றுவதில் நாங்கள் सक्षमவாக இருக்கிறோம். எங்களிடம் போதுமான பயன்படுத்தப்படாத கொள்ளளவு இருப்பதை உறுதிசெய்ய, நாங்கள் ஒரு காத்திருப்பு காஃப்கா கிளஸ்டரைப் பராமரிக்கிறோம். இது நேரலை கிளஸ்டர்களுக்கு இடையில் போக்குவரத்தை மாற்றும்போது, இரைச்சலான அண்டை சிக்கல்கள் (noisy neighbor issues) ஏற்படும் அபாயத்தை நீக்க உதவுகிறது.
கீழே உள்ள வரைபடம் ஒரு ஃபெய்லோவரைச் செயல்படுத்துவதற்கான உயர்-நிலை படிகளைக் காட்டுகிறது. முதலில், ஒரு ஆபரேட்டர் ஃபெய்லோவரின் வரம்பை அடையாளம் காண்கிறார். பின்னர், ஒரு தானியங்கு மொத்த செயல்பாட்டின் மூலம் ஸ்டாண்ட்-பை கிளஸ்டரில் தலைப்புகள் மற்றும் அணுகல் கட்டுப்பாட்டுப் பட்டியல்கள் (ACLகள்) உருவாக்கப்படுகின்றன. இறுதியாக, ஆபரேட்டர் எங்கள் கட்டுப்பாட்டுத் தள சேவை உள்ளமைவுகளைப் புதுப்பிக்கிறார், இதை கிளையண்டுகள் ஏதேனும் மீண்டும் இணைப்பு தேவைப்படுகிறதா என்பதைத் தீர்மானிக்கப் பின்தொடர்கின்றன. கீழே உள்ள விளக்கம் பொதுவான நிகழ்நேரப் பயன்பாட்டு நிகழ்வுகளுக்கானது. மிரர் மேக்கர் 2-ஐப் பயன்படுத்தி டாபிக் மிரரிங், டேட்டா பேக்ஃபில் டூலிங் மற்றும் பலவற்றை உள்ளடக்கிய, மற்ற பயன்பாட்டு நிகழ்வுகள் மற்றும் சூழ்நிலைகளுக்காக எங்களிடம் கூடுதல் உத்திகள் மற்றும் கருவிகள் உள்ளன.

ராப்ளாக்ஸ்-க்கு பாதுகாப்புக்காக கடுமையான தேவைகள் உள்ளன, இது நம்பகத்தன்மையின் ஒரு முக்கிய பகுதியாகவும் உள்ளது. நாங்கள் பரிமாற்றத்தின் போது குறியாக்கம் (mTLS உடன்), சேமிப்பில் குறியாக்கம் (குறியாக்கப்பட்ட வட்டுடன்), தரவு தக்கவைப்பு கால தேவைகள், மற்றும் Kafka முதன்மைகள் மற்றும் ACL-களுடன் அங்கீகாரம்/அனுமதியளித்தல் போன்ற நிலையான பாதுகாப்பு அம்சங்களைச் செயல்படுத்தியுள்ளோம். பாதுகாப்பை மேலும் மேம்படுத்த, எங்கள் பயனர்களின் சான்றுகளையும் நாங்கள் தானாகவே சுழற்சி முறையில் மாற்றுகிறோம்.
இதற்கு மேலாக, வேகமான OS பேட்சிங் மற்றும் ரேக் டிரெய்ன்களை எளிதாக்க, எங்கள் கண்ட்ரோல் ப்ளேனில் பிரத்யேக கையாளுதலை உருவாக்கியுள்ளோம். OS பேட்சிங் போது, தரவை வட்டில் தக்கவைத்துக்கொள்கிறோம், இதனால் பேட்ச் செய்யப்பட்ட இயந்திரங்கள் Kafka கிளஸ்டரில் மீண்டும் இணைந்த பிறகு விரைவாக ஆரோக்கியத்தை மீட்டெடுக்க முடியும். இந்த வழியில், எங்கள் முழுமையான ஃப்ளீட்டையும், அது தொடர்ந்து வளர்ந்து கொண்டிருக்கும் போதும், 30 நாட்களுக்குள் எங்களால் பேட்ச் செய்ய முடியும். க்ரூஸ் கண்ட்ரோல் போன்ற கருவிகளைக் கொண்டு, எங்கள் தரவை ரேக்-அறிவுடன்கூடிய முறையில் பிரதிபலிக்கிறோம், இதனால் தரவுக் கிடைக்கும் தன்மையைப் பாதிக்காமல் முழு ரேக்குகளையும் பராமரிப்பு மற்றும் நெட்வொர்க் பேட்சிங்கிற்காக ஆஃப்லைனில் எடுக்க முடியும்.
முன்னோக்கிச் செல்லும் பாதை
எங்கள் வரிசைத் தளத்தின் அடுத்த அத்தியாயம், நெகிழ்வுத்தன்மை மற்றும் தனிமைப்படுத்தலைத் தொடர்ந்து மேம்படுத்தும் அதே வேளையில், டெவலப்பர்களுக்கு தளத்தை இன்னும் எளிதாக்குவதைப் பற்றியது. தயாரிப்பாளர் மற்றும் நுகர்வோர் ப்ராக்ஸிகள் மற்றும் முழுமையாக நிர்வகிக்கப்படும் இணைப்பான்கள் உள்ளிட்ட புதிய அருவங்களில் நாங்கள் முதலீடு செய்கிறோம். இந்த அமைப்புகள் பயன்பாட்டுக் குழுக்களை உள்கட்டமைப்புச் சிக்கல்களிலிருந்து மேலும் பிரித்து, எங்கள் தளங்களைப் பெரிய அளவில் எளிதாக ஏற்றுக்கொள்வதற்கும் நிர்வகிப்பதற்கும் உதவும். உதாரணமாக, ஒரு கன்ஸ்யூமர் ப்ராக்ஸி, போட்டி கன்ஸ்யூமர் பாணியை செயல்படுத்தும், இது பரந்த அளவிலான பயன்பாட்டு நிகழ்வுகளை ஆதரிக்கவும், Kafka பிரிவுகளின் அளவிடுதலில் இருந்து செயலி அளவிடுதலைப் பிரிக்கவும் தளத்தை அனுமதிக்கிறது. அறிவிப்புகளின் பெருமளவிலான வெடிப்புகளைச் செயலாக்குவது போன்ற, வரிசைப்படுத்தல் தேவையற்ற பயன்பாட்டு நிகழ்வுகளுக்கு இது மதிப்புமிக்கது, மேலும் முனை முதல் முனை டெலிவரி இலக்குகளை அடையக் கட்டுப்படுத்தப்படாமல், செயலிகளின் எண்ணிக்கையை தற்காலிகமாக அதிகரிக்க இது உதவுகிறது.
கஃப்காவை அளவிடுவது என்பது கிளஸ்டர்களின் எண்ணிக்கை மற்றும் அளவை அளவிடுவது மட்டுமல்ல. இது, ஒவ்வொரு நாளும் ஒரு பில்லியன் மக்களை நம்பிக்கையுடனும் நாகரிகத்துடனும் இணைக்கும் எங்கள் பயணத்தைத் தொடர, ராப்லாக்ஸ்-ஐ அனுமதிக்கும் பொறியியல் ஒழுக்கம், சுருக்கங்கள் மற்றும் செயல்பாட்டு மாதிரியை உருவாக்குவதாகும்.
நன்றியுரை: ராப்லாக்ஸ் வரிசைத் தளத்திற்கு அவர்களின் குறிப்பிடத்தக்க பங்களிப்புகளுக்காக டேனி யுவான் மற்றும் ஜார்ஜ் லி ஆகியோருக்கு நன்றி.


