k8s க்கான தயாரிப்பு-தயாரான படங்கள்

இந்தக் கதை, உற்பத்திச் சூழலில், குறிப்பாக குபெர்னெட்டஸில் கொள்கலன்களை எவ்வாறு பயன்படுத்துகிறோம் என்பது பற்றியது. கொள்கலன்களிலிருந்து அளவீடுகள் மற்றும் பதிவுகளை சேகரிப்பதற்கும், படங்களை உருவாக்குவதற்கும் கட்டுரை அர்ப்பணிக்கப்பட்டுள்ளது.

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

நாங்கள் ஃபின்டெக் நிறுவனமான Exness இலிருந்து வந்துள்ளோம், இது ஆன்லைன் வர்த்தகத்திற்கான சேவைகளையும், B2B மற்றும் B2Cக்கான fintech தயாரிப்புகளையும் உருவாக்குகிறது. எங்கள் R&D பல்வேறு குழுக்களைக் கொண்டுள்ளது, மேம்பாட்டுத் துறையில் 100+ பணியாளர்கள் உள்ளனர்.

எங்கள் டெவலப்பர்கள் குறியீட்டைச் சேகரித்து இயக்குவதற்கான தளத்திற்குப் பொறுப்பான குழுவை நாங்கள் பிரதிநிதித்துவப்படுத்துகிறோம். குறிப்பாக, பயன்பாடுகளில் இருந்து அளவீடுகள், பதிவுகள் மற்றும் நிகழ்வுகளை சேகரித்தல், சேமித்தல் மற்றும் புகாரளிக்க நாங்கள் பொறுப்பாவோம். நாங்கள் தற்போது உற்பத்தி சூழலில் தோராயமாக மூவாயிரம் டோக்கர் கொள்கலன்களை இயக்குகிறோம், எங்கள் 50 TB பெரிய தரவு சேமிப்பகத்தை பராமரிக்கிறோம் மற்றும் எங்கள் உள்கட்டமைப்பைச் சுற்றி கட்டமைக்கப்பட்ட கட்டடக்கலை தீர்வுகளை வழங்குகிறோம்: Kubernetes, Rancher மற்றும் பல்வேறு பொது கிளவுட் வழங்குநர்கள். 

எங்கள் உந்துதல்

என்ன எரிகிறது? யாரும் பதில் சொல்ல முடியாது. அடுப்பு எங்கே? புரிந்துகொள்வது கடினம். எப்போது தீப்பிடித்தது? நீங்கள் கண்டுபிடிக்கலாம், ஆனால் உடனடியாக இல்லை. 

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

சில கொள்கலன்கள் ஏன் நிற்கின்றன, மற்றவை விழுந்தன? எந்த கொள்கலன் குற்றம் சாட்டப்பட்டது? எல்லாவற்றிற்கும் மேலாக, கொள்கலன்களின் வெளிப்புறம் ஒன்றுதான், ஆனால் ஒவ்வொன்றின் உள்ளேயும் அதன் சொந்த நியோ உள்ளது.

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

எங்கள் டெவலப்பர்கள் திறமையான தோழர்களே. அவர்கள் நிறுவனத்திற்கு லாபம் தரும் நல்ல சேவைகளை செய்கிறார்கள். ஆனால் பயன்பாடுகள் கொண்ட கொள்கலன்கள் தவறான வழியில் செல்லும் போது தோல்விகள் உள்ளன. ஒரு கொள்கலன் அதிக CPU ஐப் பயன்படுத்துகிறது, மற்றொன்று நெட்வொர்க்கைப் பயன்படுத்துகிறது, மூன்றாவது I/O செயல்பாடுகளைப் பயன்படுத்துகிறது, நான்காவது சாக்கெட்டுகளில் என்ன செய்கிறது என்பது தெளிவாகத் தெரியவில்லை. எல்லாம் விழுந்து கப்பல் மூழ்கியது. 

முகவர்கள்

உள்ளே என்ன நடக்கிறது என்பதைப் புரிந்து கொள்ள, முகவர்களை நேரடியாக கொள்கலன்களில் வைக்க முடிவு செய்தோம்.

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

இந்த முகவர்கள் ஒருவரையொருவர் உடைக்காத நிலையில் கொள்கலன்களை வைத்திருக்கும் திட்டங்களைக் கட்டுப்படுத்துகிறார்கள். முகவர்கள் தரப்படுத்தப்பட்டுள்ளனர், மேலும் இது கொள்கலன்களுக்கு சேவை செய்வதற்கான தரப்படுத்தப்பட்ட அணுகுமுறையை அனுமதிக்கிறது. 

எங்கள் விஷயத்தில், முகவர்கள் பதிவுகளை நிலையான வடிவத்தில், குறியிடப்பட்ட மற்றும் த்ரோட்டில் வழங்க வேண்டும். வணிக பயன்பாட்டுக் கண்ணோட்டத்தில் விரிவாக்கக்கூடிய தரப்படுத்தப்பட்ட அளவீடுகளையும் அவை எங்களுக்கு வழங்க வேண்டும்.

முகவர்கள் என்பது வெவ்வேறு படங்களை (டெபியன், ஆல்பைன், சென்டோஸ், முதலியன) ஆதரிக்கும் வெவ்வேறு ஆர்கெஸ்ட்ரேஷன் அமைப்புகளில் வேலை செய்யக்கூடிய செயல்பாடு மற்றும் பராமரிப்புக்கான பயன்பாடுகளைக் குறிக்கிறது.

இறுதியாக, டோக்கர் கோப்புகளை உள்ளடக்கிய எளிய சிஐ/சிடியை முகவர்கள் ஆதரிக்க வேண்டும். இல்லையெனில், கப்பல் உடைந்து விடும், ஏனெனில் கொள்கலன்கள் "வளைந்த" தண்டவாளங்களில் வழங்கத் தொடங்கும்.

செயல்முறை மற்றும் இலக்கு பட சாதனத்தை உருவாக்கவும்

எல்லாவற்றையும் தரமானதாகவும் நிர்வகிக்கக்கூடியதாகவும் வைத்திருக்க, சில வகையான நிலையான உருவாக்க செயல்முறையைப் பின்பற்ற வேண்டும். எனவே, கொள்கலன்கள் மூலம் கொள்கலன்களை சேகரிக்க முடிவு செய்தோம் - இது மறுநிகழ்வு.

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

இங்கே கொள்கலன்கள் திடமான வெளிப்புறங்களால் குறிப்பிடப்படுகின்றன. அதே நேரத்தில், "வாழ்க்கை ராஸ்பெர்ரி போல் தெரியவில்லை" என்று அவர்கள் விநியோக கருவிகளை வைக்க முடிவு செய்தனர். இது ஏன் செய்யப்பட்டது, கீழே விளக்குவோம்.
 
இதன் விளைவாக ஒரு உருவாக்கக் கருவி-குறிப்பிட்ட விநியோக பதிப்புகள் மற்றும் குறிப்பிட்ட ஸ்கிரிப்ட் பதிப்புகளைக் குறிப்பிடும் ஒரு பதிப்பு-குறிப்பிட்ட கொள்கலன்.

நாம் அதை எவ்வாறு பயன்படுத்துவது? எங்களிடம் டோக்கர் ஹப் உள்ளது, அதில் ஒரு கொள்கலன் உள்ளது. வெளிப்புற சார்புகளிலிருந்து விடுபட எங்கள் கணினியில் அதை பிரதிபலிக்கிறோம். இதன் விளைவாக மஞ்சள் நிறத்தில் குறிக்கப்பட்ட ஒரு கொள்கலன் உள்ளது. கொள்கலனில் நமக்குத் தேவையான அனைத்து விநியோகங்கள் மற்றும் ஸ்கிரிப்ட்களை நிறுவ ஒரு டெம்ப்ளேட்டை உருவாக்குகிறோம். அதன் பிறகு, பயன்படுத்தத் தயாராக இருக்கும் படத்தை நாங்கள் ஒன்று சேர்ப்போம்: டெவலப்பர்கள் அதில் குறியீடு மற்றும் சில சிறப்பு சார்புகளை வைக்கிறார்கள். 

இந்த அணுகுமுறையில் என்ன நல்லது? 

  • முதலில், உருவாக்க கருவிகளின் முழு பதிப்பு கட்டுப்பாடு - கொள்கலன், ஸ்கிரிப்ட் மற்றும் விநியோக பதிப்புகளை உருவாக்கவும். 
  • இரண்டாவதாக, நாங்கள் தரநிலைப்படுத்தலை அடைந்துள்ளோம்: வார்ப்புருக்கள், இடைநிலை மற்றும் பயன்படுத்த தயாராக உள்ள படத்தை அதே வழியில் உருவாக்குகிறோம். 
  • மூன்றாவதாக, கொள்கலன்கள் நமக்கு பெயர்வுத்திறனை வழங்குகின்றன. இன்று நாம் Gitlab ஐப் பயன்படுத்துகிறோம், நாளை நாங்கள் TeamCity அல்லது Jenkins க்கு மாறுவோம், மேலும் எங்கள் கொள்கலன்களை அதே வழியில் இயக்க முடியும். 
  • நான்காவது, சார்புகளைக் குறைத்தல். நாங்கள் விநியோக கருவிகளை கொள்கலனில் வைப்பது தற்செயல் நிகழ்வு அல்ல, ஏனென்றால் ஒவ்வொரு முறையும் இணையத்திலிருந்து அவற்றைப் பதிவிறக்குவதைத் தவிர்க்க இது அனுமதிக்கிறது. 
  • ஐந்தாவது, உருவாக்க வேகம் அதிகரித்துள்ளது - படங்களின் உள்ளூர் பிரதிகள் இருப்பதால், உள்ளூர் படம் இருப்பதால், பதிவிறக்குவதில் நேரத்தை வீணடிப்பதைத் தவிர்க்க உங்களை அனுமதிக்கிறது. 

வேறு வார்த்தைகளில் கூறுவதானால், நாங்கள் கட்டுப்படுத்தப்பட்ட மற்றும் நெகிழ்வான சட்டசபை செயல்முறையை அடைந்துள்ளோம். முழு பதிப்புள்ள கொள்கலன்களை உருவாக்க அதே கருவிகளைப் பயன்படுத்துகிறோம். 

எங்கள் கட்டுமான செயல்முறை எவ்வாறு செயல்படுகிறது

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

சட்டசபை ஒரு கட்டளையுடன் தொடங்கப்பட்டது, செயல்முறை படத்தில் செயல்படுத்தப்படுகிறது (சிவப்பு நிறத்தில் சிறப்பிக்கப்பட்டுள்ளது). டெவலப்பரிடம் டோக்கர் கோப்பு உள்ளது (மஞ்சள் நிறத்தில் சிறப்பிக்கப்பட்டுள்ளது), நாங்கள் அதை வழங்குகிறோம், மாறிகளை மதிப்புகளுடன் மாற்றுகிறோம். மற்றும் வழியில் நாங்கள் தலைப்புகள் மற்றும் அடிக்குறிப்புகளைச் சேர்க்கிறோம் - இவை எங்கள் முகவர்கள். 

தலைப்பு தொடர்புடைய படங்களிலிருந்து விநியோகங்களைச் சேர்க்கிறது. மற்றும் அடிக்குறிப்பு எங்கள் சேவைகளை உள்ளே நிறுவுகிறது, பணிச்சுமை, பதிவு செய்தல் மற்றும் பிற முகவர்களின் துவக்கத்தை உள்ளமைக்கிறது, நுழைவு புள்ளியை மாற்றுகிறது, முதலியன. 

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

மேற்பார்வையாளரை நிறுவலாமா என்று நாங்கள் நீண்ட நேரம் யோசித்தோம். இறுதியில், அவர் எங்களுக்குத் தேவை என்று முடிவு செய்தோம். நாங்கள் S6 ஐ தேர்வு செய்தோம். மேற்பார்வையாளர் கொள்கலன் நிர்வாகத்தை வழங்குகிறார்: பிரதான செயல்முறை செயலிழந்தால் அதை இணைக்க உங்களை அனுமதிக்கிறது மற்றும் கொள்கலனை மீண்டும் உருவாக்காமல் கைமுறையாக நிர்வாகத்தை வழங்குகிறது. பதிவுகள் மற்றும் அளவீடுகள் என்பது கொள்கலனுக்குள் இயங்கும் செயல்முறைகள். அவர்களையும் எப்படியாவது கட்டுப்படுத்த வேண்டும், மேற்பார்வையாளரின் உதவியுடன் இதைச் செய்கிறோம். இறுதியாக, S6 வீட்டு பராமரிப்பு, சமிக்ஞை செயலாக்கம் மற்றும் பிற பணிகளை கவனித்துக்கொள்கிறது.

நாம் வெவ்வேறு ஆர்கெஸ்ட்ரேஷன் அமைப்புகளைப் பயன்படுத்துவதால், கட்டி இயக்கிய பிறகு, கொள்கலன் எந்த சூழலில் உள்ளது என்பதைப் புரிந்துகொண்டு சூழ்நிலைக்கு ஏற்ப செயல்பட வேண்டும். உதாரணத்திற்கு:
இது ஒரு படத்தை உருவாக்க மற்றும் வெவ்வேறு ஆர்கெஸ்ட்ரேஷன் அமைப்புகளில் இயக்க அனுமதிக்கிறது, மேலும் இந்த ஆர்கெஸ்ட்ரேஷன் அமைப்பின் பிரத்தியேகங்களை கணக்கில் எடுத்துக்கொண்டு இது தொடங்கப்படும்.

 k8s க்கான தயாரிப்பு-தயாரான படங்கள்

ஒரே கொள்கலனுக்கு, டோக்கர் மற்றும் குபெர்னெட்டஸில் வெவ்வேறு செயல்முறை மரங்களைப் பெறுகிறோம்:

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

பேலோட் S6 இன் மேற்பார்வையின் கீழ் செயல்படுத்தப்படுகிறது. சேகரிப்பாளர் மற்றும் நிகழ்வுகளில் கவனம் செலுத்துங்கள் - பதிவுகள் மற்றும் அளவீடுகளுக்குப் பொறுப்பான எங்கள் முகவர்கள் இவர்கள். குபெர்னெட்டஸிடம் அவை இல்லை, ஆனால் டோக்கருக்கு இருக்கிறது. ஏன்? 

"பாட்" இன் விவரக்குறிப்பைப் பார்த்தால் (இனி - குபெர்னெட்டஸ் பாட்), நிகழ்வுகள் கொள்கலன் ஒரு பாட்டில் செயல்படுத்தப்படுவதைக் காண்போம், அதில் அளவீடுகள் மற்றும் பதிவுகளை சேகரிக்கும் செயல்பாட்டைச் செய்யும் தனி சேகரிப்பான் கொள்கலன் உள்ளது. குபெர்னெட்டஸின் திறன்களை நாம் பயன்படுத்தலாம்: ஒரு பாட், ஒரே செயல்முறை மற்றும்/அல்லது நெட்வொர்க் இடத்தில் இயங்கும் கொள்கலன்கள். உண்மையில் உங்கள் முகவர்களை அறிமுகப்படுத்தி சில செயல்பாடுகளைச் செய்யுங்கள். அதே கொள்கலன் டோக்கரில் தொடங்கப்பட்டால், அது வெளியீட்டைப் போலவே அனைத்து திறன்களையும் பெறும், அதாவது, முகவர்கள் உள்நாட்டில் தொடங்கப்படுவதால், பதிவுகள் மற்றும் அளவீடுகளை வழங்க முடியும். 

அளவீடுகள் மற்றும் பதிவுகள்

அளவீடுகள் மற்றும் பதிவுகளை வழங்குவது ஒரு சிக்கலான பணியாகும். அவளுடைய முடிவில் பல அம்சங்கள் உள்ளன.
உள்கட்டமைப்பு பேலோடை செயல்படுத்துவதற்காக உருவாக்கப்பட்டது, மேலும் பதிவுகளை பெருமளவில் வழங்குவதற்காக அல்ல. அதாவது, இந்த செயல்முறை குறைந்தபட்ச கொள்கலன் வள தேவைகளுடன் செய்யப்பட வேண்டும். எங்கள் டெவலப்பர்களுக்கு உதவ நாங்கள் முயற்சி செய்கிறோம்: "டாக்கர் ஹப் கண்டெய்னரைப் பெற்று, அதை இயக்கவும், நாங்கள் பதிவுகளை வழங்க முடியும்." 

இரண்டாவது அம்சம் பதிவுகளின் அளவைக் கட்டுப்படுத்துகிறது. பல கொள்கலன்களில் பதிவுகளின் அளவு அதிகரிப்பு ஏற்பட்டால் (பயன்பாடு ஒரு லூப்பில் ஸ்டேக்-ட்ரேஸை வெளியிடுகிறது), CPU, தகவல் தொடர்பு சேனல்கள் மற்றும் பதிவு செயலாக்க அமைப்பு ஆகியவற்றின் சுமை அதிகரிக்கிறது, மேலும் இது ஹோஸ்டின் செயல்பாட்டை பாதிக்கிறது. ஹோஸ்டில் உள்ள முழு மற்றும் பிற கொள்கலன்கள், சில நேரங்களில் இது ஹோஸ்டின் "வீழ்ச்சிக்கு" வழிவகுக்கும். 

மூன்றாவது அம்சம் என்னவென்றால், பெட்டிக்கு வெளியே முடிந்தவரை பல அளவீடுகள் சேகரிப்பு முறைகளை ஆதரிக்க வேண்டியது அவசியம். கோப்புகளைப் படிப்பது மற்றும் Prometheus-endpoint வாக்குப்பதிவு முதல் பயன்பாட்டு குறிப்பிட்ட நெறிமுறைகளைப் பயன்படுத்துவது வரை.

மற்றும் கடைசி அம்சம் வள நுகர்வு குறைக்க வேண்டும்.

Telegraf எனப்படும் திறந்த மூல Go தீர்வைத் தேர்ந்தெடுத்தோம். இது 140 க்கும் மேற்பட்ட வகையான உள்ளீட்டு சேனல்கள் (உள்ளீடு செருகுநிரல்கள்) மற்றும் 30 வகையான வெளியீடு சேனல்கள் (வெளியீட்டு செருகுநிரல்கள்) ஆதரிக்கும் உலகளாவிய இணைப்பாகும். நாங்கள் அதை இறுதி செய்துள்ளோம், இப்போது குபெர்னெட்ஸை உதாரணமாகப் பயன்படுத்தி அதை எவ்வாறு பயன்படுத்துகிறோம் என்பதை நாங்கள் உங்களுக்குச் சொல்வோம். 

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

ஒரு டெவலப்பர் பணிச்சுமையை வரிசைப்படுத்துகிறார் மற்றும் குபெர்னெட்டஸ் ஒரு பாட் ஒன்றை உருவாக்குவதற்கான கோரிக்கையைப் பெறுகிறார் என்று வைத்துக்கொள்வோம். இந்த கட்டத்தில், கலெக்டர் எனப்படும் ஒரு கொள்கலன் ஒவ்வொரு காய்க்கும் தானாகவே உருவாக்கப்படும் (நாங்கள் பிறழ்வு வெப்ஹூக்கைப் பயன்படுத்துகிறோம்). கலெக்டர் எங்கள் முகவர். தொடக்கத்தில், இந்த கொள்கலன் ப்ரோமிதியஸ் மற்றும் பதிவு சேகரிப்பு அமைப்புடன் வேலை செய்ய தன்னை கட்டமைக்கிறது.

  • இதைச் செய்ய, இது பாட் சிறுகுறிப்புகளைப் பயன்படுத்துகிறது, மேலும் அதன் உள்ளடக்கத்தைப் பொறுத்து, ஒரு ப்ரோமிதியஸ் இறுதிப் புள்ளியை உருவாக்குகிறது; 
  • பாட் விவரக்குறிப்பு மற்றும் குறிப்பிட்ட கொள்கலன் அமைப்புகளின் அடிப்படையில், பதிவுகளை எவ்வாறு வழங்குவது என்பதை இது தீர்மானிக்கிறது.

நாங்கள் Docker API மூலம் பதிவுகளை சேகரிக்கிறோம்: டெவலப்பர்கள் அவற்றை stdout அல்லது stderr இல் வைக்க வேண்டும், கலெக்டர் அதை வரிசைப்படுத்துவார். சாத்தியமான ஹோஸ்ட் ஓவர்லோடைத் தடுக்க பதிவுகள் சிறிது தாமதத்துடன் துண்டுகளாக சேகரிக்கப்படுகின்றன. 

கொள்கலன்களில் பணிச்சுமை நிகழ்வுகள் (செயல்முறைகள்) முழுவதும் அளவீடுகள் சேகரிக்கப்படுகின்றன. எல்லாம் குறியிடப்பட்டுள்ளது: பெயர்வெளி, கீழ், மற்றும் பல, பின்னர் ப்ரோமிதியஸ் வடிவத்திற்கு மாற்றப்படும் - மற்றும் சேகரிப்புக்குக் கிடைக்கும் (பதிவுகளைத் தவிர). நாங்கள் பதிவுகள், அளவீடுகள் மற்றும் நிகழ்வுகளை காஃப்காவிற்கும் மேலும் மேலும் அனுப்புகிறோம்:

  • பதிவுகள் கிரேலாக்கில் கிடைக்கின்றன (காட்சி பகுப்பாய்வுக்காக);
  • பதிவுகள், அளவீடுகள், நிகழ்வுகள் நீண்ட கால சேமிப்பிற்காக Clickhouse க்கு அனுப்பப்படும்.

AWS இல் எல்லாமே ஒரே மாதிரியாகச் செயல்படும், நாங்கள் மட்டுமே கிரேலாக்கை காஃப்காவுடன் கிளவுட்வாட்சுடன் மாற்றுவோம். நாங்கள் அங்கு பதிவுகளை அனுப்புகிறோம், எல்லாம் மிகவும் வசதியாக மாறும்: அவை எந்த கிளஸ்டர் மற்றும் கொள்கலனைச் சேர்ந்தவை என்பது உடனடியாகத் தெளிவாகிறது. Google Stackdriver க்கும் இது பொருந்தும். அதாவது, எங்கள் திட்டம் காஃப்கா மற்றும் கிளவுட் ஆகிய இரண்டிலும் செயல்படுகிறது. 

எங்களிடம் காய்களுடன் குபெர்னெட்ஸ் இல்லையென்றால், திட்டம் இன்னும் கொஞ்சம் சிக்கலானது, ஆனால் அது அதே கொள்கைகளில் செயல்படுகிறது.

k8s க்கான தயாரிப்பு-தயாரான படங்கள்

அதே செயல்முறைகள் கொள்கலனுக்குள் செயல்படுத்தப்படுகின்றன, அவை S6 ஐப் பயன்படுத்தி ஒழுங்கமைக்கப்படுகின்றன. அனைத்து செயல்முறைகளும் ஒரே கொள்கலனில் இயங்குகின்றன.

இதன் விளைவாக,

பதிவுகள் மற்றும் அளவீடுகளை சேகரித்து வழங்குவதற்கான விருப்பங்களுடன் படங்களை உருவாக்க மற்றும் தொடங்குவதற்கான முழுமையான தீர்வை நாங்கள் உருவாக்கியுள்ளோம்:

  • படங்களை அசெம்பிள் செய்வதற்கான தரப்படுத்தப்பட்ட அணுகுமுறையை நாங்கள் உருவாக்கினோம், அதன் அடிப்படையில் CI டெம்ப்ளேட்களை உருவாக்கினோம்;
  • தரவு சேகரிப்பு முகவர்கள் எங்கள் டெலிகிராஃப் நீட்டிப்புகள். உற்பத்தியில் அவற்றை நன்கு சோதித்தோம்;
  • காய்களில் முகவர்கள் கொண்ட கொள்கலன்களை செயல்படுத்த, பிறழ்வு வெப்ஹூக்கைப் பயன்படுத்துகிறோம்; 
  • குபெர்னெட்ஸ்/ராஞ்சர் சுற்றுச்சூழல் அமைப்பில் ஒருங்கிணைக்கப்பட்டது;
  • ஒரே கண்டெய்னர்களை வெவ்வேறு ஆர்கெஸ்ட்ரேஷன் அமைப்புகளில் செயல்படுத்தி, நாம் எதிர்பார்க்கும் முடிவைப் பெறலாம்;
  • முற்றிலும் மாறும் கொள்கலன் மேலாண்மை உள்ளமைவை உருவாக்கியது. 

இணை ஆசிரியர்: இலியா ப்ருட்னிகோவ்

ஆதாரம்: www.habr.com

கருத்தைச் சேர்