Yandex.Cloud இல் 10 நிகழ்வுகளை ஏற்கிறோம். பகுதி 000

அனைவருக்கும் வணக்கம், நண்பர்களே!

* இந்த கட்டுரை REBRAIN & Yandex.Cloud திறந்த பட்டறையை அடிப்படையாகக் கொண்டது, நீங்கள் வீடியோவைப் பார்க்க விரும்பினால், அதை இந்த இணைப்பில் காணலாம் - https://youtu.be/cZLezUm0ekE

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

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

எனவே, எங்கள் கதை: நாங்கள் கோலாங்கில் ஒரு விண்ணப்பத்தை எப்படி எழுதினோம், காஃப்கா vs rabbitmq vs yqs சோதனை செய்தோம், கிளிக்ஹவுஸ் கிளஸ்டரில் டேட்டா ஸ்ட்ரீமிங்கை எழுதினோம் மற்றும் yandex டேட்டாலென்ஸைப் பயன்படுத்தி தரவைக் காட்சிப்படுத்தினோம். இயற்கையாகவே, இவை அனைத்தும் டோக்கர், டெர்ராஃபார்ம், கிட்லாப் சிஐ மற்றும், நிச்சயமாக, ப்ரோமிதியஸ் வடிவில் உள்கட்டமைப்பு மகிழ்ச்சியுடன் பருவமடைந்தது. போகலாம்!

எல்லாவற்றையும் ஒரே அமர்வில் உள்ளமைக்க முடியாது என்பதை உடனடியாக முன்பதிவு செய்ய விரும்புகிறேன் - இதற்கு தொடரில் பல கட்டுரைகள் தேவைப்படும். கட்டமைப்பைப் பற்றி கொஞ்சம்:

பகுதி 1 (நீங்கள் படிக்கிறீர்கள்). தீர்வின் விவரக்குறிப்புகள் மற்றும் கட்டமைப்பை நாங்கள் முடிவு செய்வோம், மேலும் கோலாங்கில் ஒரு விண்ணப்பத்தை எழுதுவோம்.
பகுதி 2. நாங்கள் எங்கள் பயன்பாட்டை உற்பத்தியில் வெளியிடுகிறோம், அதை அளவிடக்கூடியதாக ஆக்குகிறோம் மற்றும் சுமையைச் சோதிக்கிறோம்.
பகுதி 3. செய்திகளை கோப்புகளில் இல்லாமல் ஒரு இடையகத்தில் ஏன் சேமிக்க வேண்டும் என்பதைக் கண்டுபிடிக்க முயற்சிப்போம், மேலும் காஃப்கா, ராபிட்எம்க் மற்றும் யாண்டெக்ஸ் கியூ சேவையையும் ஒப்பிடலாம்.
பகுதி 4 நாங்கள் கிளிக்ஹவுஸ் கிளஸ்டரைப் பயன்படுத்துவோம், அங்குள்ள இடையகத்திலிருந்து தரவை மாற்றுவதற்கு ஸ்ட்ரீமிங் சேவையை எழுதுவோம், மேலும் டேட்டாலென்ஸில் காட்சிப்படுத்தலை அமைப்போம்.
பகுதி 5 முழு உள்கட்டமைப்பையும் சரியான வடிவத்திற்கு கொண்டு வருவோம் - gitlab ci ஐப் பயன்படுத்தி ci/cd ஐ அமைக்கவும், ப்ரோமிதியஸ் மற்றும் தூதரகத்தைப் பயன்படுத்தி கண்காணிப்பு மற்றும் சேவை கண்டுபிடிப்பை இணைக்கவும்.

ТЗ

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

  1. Events.kis.im (kis.im என்பது அனைத்து கட்டுரைகளிலும் நாங்கள் பயன்படுத்தும் சோதனை டொமைன்) போன்ற ஒரு இறுதிப்புள்ளியை வைத்திருக்க விரும்புகிறோம், இது HTTPS ஐப் பயன்படுத்தி நிகழ்வுகளைப் பெற வேண்டும்.
  2. நிகழ்வுகள் போன்ற எளிய json: {“நிகழ்வு”: “பார்வை”, “os”: “linux”, “browser”: “chrome”}. இறுதி கட்டத்தில் நாம் இன்னும் கொஞ்சம் புலங்களைச் சேர்ப்போம், ஆனால் இது ஒரு பெரிய பாத்திரத்தை வகிக்காது. நீங்கள் விரும்பினால், நீங்கள் protobuf க்கு மாறலாம்.
  3. சேவையானது வினாடிக்கு 10 நிகழ்வுகளைச் செயல்படுத்த முடியும்.
  4. எங்கள் தீர்வுக்கு புதிய நிகழ்வுகளைச் சேர்ப்பதன் மூலம் கிடைமட்டமாக அளவிட முடியும். கிளையன்ட் கோரிக்கைகளுக்கான தாமதத்தைக் குறைக்க முன் பகுதியை வெவ்வேறு புவிஇருப்பிடங்களுக்கு நகர்த்தினால் நன்றாக இருக்கும்.
  5. தவறு சகிப்புத்தன்மை. தீர்வு போதுமான அளவு நிலையானதாக இருக்க வேண்டும் மற்றும் எந்த பகுதிகளின் வீழ்ச்சியையும் (ஒரு குறிப்பிட்ட எண்ணிக்கை வரை, நிச்சயமாக) உயிர்வாழ முடியும்.

கட்டிடக்கலை

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

Yandex.Cloud இல் 10 நிகழ்வுகளை ஏற்கிறோம். பகுதி 000

எனவே எங்களிடம் என்ன இருக்கிறது:

1. இடதுபுறத்தில் பல்வேறு நிகழ்வுகளை உருவாக்கும் எங்கள் சாதனங்கள் உள்ளன, அது விளையாட்டாளர்கள் ஸ்மார்ட்போனில் ஒரு பொம்மையில் ஒரு நிலையை முடிப்பது அல்லது வழக்கமான உலாவி மூலம் ஆன்லைன் ஸ்டோரில் ஆர்டரை உருவாக்குவது. ஒரு நிகழ்வு, விவரக்குறிப்பில் குறிப்பிடப்பட்டுள்ளபடி, எங்கள் இறுதிப்புள்ளிக்கு அனுப்பப்படும் ஒரு எளிய json ஆகும் - events.kis.im.

2. முதல் இரண்டு சர்வர்கள் எளிய பேலன்சர்கள், அவற்றின் முக்கிய பணிகள்:

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

3. பேலன்சர்களுக்குப் பிறகு, எங்களிடம் பயன்பாட்டு சேவையகங்கள் மிகவும் எளிமையான பயன்பாட்டை இயக்குகின்றன. இது HTTP வழியாக உள்வரும் கோரிக்கைகளை ஏற்கவும், அனுப்பப்பட்ட json ஐ சரிபார்க்கவும் மற்றும் தரவை ஒரு இடையகமாக வைக்கவும் முடியும்.

4. வரைபடம் காஃப்காவை ஒரு இடையகமாகக் காட்டுகிறது, இருப்பினும், இதே போன்ற பிற சேவைகளை இந்த மட்டத்தில் பயன்படுத்தலாம். மூன்றாவது கட்டுரையில் காஃப்கா, rabbitmq மற்றும் yqs ஆகியவற்றை ஒப்பிடுவோம்.

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

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

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

Yandex.Cloud இல் 10 நிகழ்வுகளை ஏற்கிறோம். பகுதி 000

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

பின்னர் எல்லாம் மிகவும் எளிது - நாங்கள் காஃப்கா தொகுப்பிலிருந்து கண்ணாடி கருவியைப் பயன்படுத்துகிறோம் மற்றும் எல்லா இடங்களிலிருந்தும் எல்லா தரவையும் ரஷ்யாவில் அமைந்துள்ள எங்கள் மைய தரவு மையத்திற்கு நகலெடுக்கிறோம். உள்நாட்டில், நாங்கள் தரவை அலசுவோம் மற்றும் அடுத்தடுத்த காட்சிப்படுத்தலுக்காக கிளிக்ஹவுஸில் பதிவு செய்கிறோம்.

எனவே, நாங்கள் கட்டிடக்கலையை வரிசைப்படுத்தியுள்ளோம் - Yandex.Cloud ஐ அசைக்க ஆரம்பிக்கலாம்!

ஒரு விண்ணப்பத்தை எழுதுதல்

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

ஒரு மணிநேரம் செலவழித்த பிறகு (ஒருவேளை இரண்டு மணிநேரம்), இது போன்ற ஒன்றைப் பெறுகிறோம்: https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

நான் இங்கே கவனிக்க விரும்பும் முக்கிய புள்ளிகள் என்ன:

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

addr     = flag.String("addr", ":8080", "TCP address to listen to")
kafka    = flag.String("kafka", "127.0.0.1:9092", "Kafka endpoints”)

2. பயன்பாடு சரமா நூலகத்தைப் பயன்படுத்துகிறது ([] github.com/Shopify/saram) காஃப்கா கிளஸ்டருக்கு செய்திகளை அனுப்ப. அதிகபட்ச செயலாக்க வேகத்தை இலக்காகக் கொண்ட அமைப்புகளை உடனடியாக அமைத்துள்ளோம்:

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true

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

  • எங்கள் விண்ணப்பத்திற்கான கோரிக்கைகளின் எண்ணிக்கை;
  • கோரிக்கையை செயல்படுத்தும் போது பிழைகளின் எண்ணிக்கை (இடுகை கோரிக்கையைப் படிக்க இயலாது, உடைந்த json, காஃப்காவிற்கு எழுத இயலாது);
  • காஃப்காவிற்கு செய்தி எழுதும் நேரம் உட்பட, கிளையண்டின் ஒரு கோரிக்கைக்கான செயலாக்க நேரம்.

4. எங்கள் விண்ணப்பத்தைச் செயலாக்கும் மூன்று இறுதிப்புள்ளிகள்:

  • /நிலை - நாம் உயிருடன் இருப்பதைக் காட்ட, சரி என்று திரும்பவும். காஃப்கா கிளஸ்டரின் கிடைக்கும் தன்மை போன்ற சில காசோலைகளை நீங்கள் சேர்க்கலாம்.
  • / அளவீடுகள் - இந்த url இன் படி, ப்ரோமிதியஸ் கிளையன்ட் சேகரித்த அளவீடுகளை திருப்பித் தருவார்.
  • /post என்பது json உள்ளே இருக்கும் POST கோரிக்கைகள் அனுப்பப்படும் முக்கிய முடிவுப் புள்ளியாகும். எங்கள் பயன்பாடு jsonஐ செல்லுபடியாக்க சரிபார்க்கிறது மற்றும் எல்லாம் சரியாக இருந்தால், அது காஃப்கா கிளஸ்டருக்கு தரவை எழுதுகிறது.

குறியீடு சரியானதாக இல்லை என்று முன்பதிவு செய்வேன் - அதை முடிக்க முடியும் (மற்றும் வேண்டும்!). எடுத்துக்காட்டாக, நீங்கள் உள்ளமைக்கப்பட்ட நெட்/http ஐப் பயன்படுத்துவதை நிறுத்திவிட்டு வேகமான fasthttpக்கு மாறலாம். அல்லது json செல்லுபடியாகும் சரிபார்ப்பை அடுத்த கட்டத்திற்கு நகர்த்துவதன் மூலம் செயலாக்க நேரம் மற்றும் cpu வளங்களைப் பெறலாம் - தரவு இடையகத்திலிருந்து கிளிக்ஹவுஸ் கிளஸ்டருக்கு மாற்றப்படும் போது.

சிக்கலின் வளர்ச்சிப் பக்கத்திற்கு கூடுதலாக, நாங்கள் உடனடியாக எங்கள் எதிர்கால உள்கட்டமைப்பு பற்றி யோசித்து, எங்கள் விண்ணப்பத்தை டோக்கர் வழியாக பயன்படுத்த முடிவு செய்தோம். பயன்பாட்டை உருவாக்குவதற்கான இறுதி Dockerfile ஆகும் https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. பொதுவாக, இது மிகவும் எளிமையானது, நான் கவனம் செலுத்த விரும்பும் ஒரே புள்ளி மல்டிஸ்டேஜ் அசெம்பிளி ஆகும், இது எங்கள் கொள்கலனின் இறுதி படத்தை குறைக்க அனுமதிக்கிறது.

மேகத்தில் முதல் படிகள்

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

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

Yandex.Cloud இல் 10 நிகழ்வுகளை ஏற்கிறோம். பகுதி 000

ஒரு கணக்கிற்கு நீங்கள் பல மேகங்களை உருவாக்கலாம். மற்றும் கிளவுட் உள்ளே, வெவ்வேறு நிறுவன திட்டங்களுக்கு வெவ்வேறு கோப்பகங்களை உருவாக்கவும். ஆவணத்தில் இதைப் பற்றி மேலும் படிக்கலாம் - https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. மூலம், நான் அதை அடிக்கடி உரையில் கீழே குறிப்பிடுவேன். நான் புதிதாக முழு உள்கட்டமைப்பையும் அமைத்தபோது, ​​ஆவணங்கள் ஒன்றுக்கு மேற்பட்ட முறை எனக்கு உதவியது, எனவே அதைப் படிக்குமாறு நான் உங்களுக்கு அறிவுறுத்துகிறேன்.

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

curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

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

நீங்கள் விண்டோஸிற்கான கிளையண்டை நிறுவ விரும்பினால், நீங்கள் வழிமுறைகளைப் பயன்படுத்தலாம் இங்கே பின்னர் செயல்படுத்தவும் yc initஅதை முழுமையாக தனிப்பயனாக்க:

vozerov@mba:~ $ yc init
Welcome! This command will take you through the configuration process.
Please go to https://oauth.yandex.ru/authorize?response_type=token&client_id= in order to obtain OAuth token.

Please enter OAuth token:
Please select cloud to use:
 [1] cloud-b1gv67ihgfu3bp (id = b1gv67ihgfu3bpt24o0q)
 [2] fevlake-cloud (id = b1g6bvup3toribomnh30)
Please enter your numeric choice: 2
Your current cloud has been set to 'fevlake-cloud' (id = b1g6bvup3toribomnh30).
Please choose folder to use:
 [1] default (id = b1g5r6h11knotfr8vjp7)
 [2] Create a new folder
Please enter your numeric choice: 1
Your current folder has been set to 'default' (id = b1g5r6h11knotfr8vjp7).
Do you want to configure a default Compute zone? [Y/n]
Which zone do you want to use as a profile default?
 [1] ru-central1-a
 [2] ru-central1-b
 [3] ru-central1-c
 [4] Don't set default zone
Please enter your numeric choice: 1
Your profile default Compute zone has been set to 'ru-central1-a'.
vozerov@mba:~ $

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

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

மேலே உள்ள முறைகளுக்கு கூடுதலாக, Yandex.Cloud குழு மிகவும் நன்றாக எழுதியது டெராஃபார்மிற்கான சொருகி கிளவுட் வளங்களை நிர்வகிப்பதற்கு. எனது பங்கிற்கு, நான் ஒரு ஜிட் களஞ்சியத்தைத் தயார் செய்தேன், அங்கு கட்டுரையின் ஒரு பகுதியாக உருவாக்கப்படும் அனைத்து வளங்களையும் விவரித்தேன் - https://github.com/rebrainme/yandex-cloud-events/. முதன்மைக் கிளையில் நாங்கள் ஆர்வமாக உள்ளோம், அதை உள்நாட்டில் குளோன் செய்வோம்:


vozerov@mba:~ $ git clone https://github.com/rebrainme/yandex-cloud-events/ events
Cloning into 'events'...
remote: Enumerating objects: 100, done.
remote: Counting objects: 100% (100/100), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 100 (delta 37), reused 89 (delta 26), pack-reused 0
Receiving objects: 100% (100/100), 25.65 KiB | 168.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
vozerov@mba:~ $ cd events/terraform/

டெராஃபார்மில் பயன்படுத்தப்படும் அனைத்து முக்கிய மாறிகளும் main.tf கோப்பில் எழுதப்பட்டுள்ளன. தொடங்குவதற்கு, பின்வரும் உள்ளடக்கத்துடன் டெராஃபார்ம் கோப்புறையில் private.auto.tfvars கோப்பை உருவாக்கவும்:

# Yandex Cloud Oauth token
yc_token = ""
# Yandex Cloud ID
yc_cloud_id = ""
# Yandex Cloud folder ID
yc_folder_id = ""
# Default Yandex Cloud Region
yc_region = "ru-central1-a"
# Cloudflare email
cf_email = ""
# Cloudflare token
cf_token = ""
# Cloudflare zone id
cf_zone_id = ""

கன்சோல் பயன்பாட்டை நாங்கள் ஏற்கனவே உள்ளமைத்திருப்பதால், அனைத்து மாறிகளையும் yc config பட்டியலில் இருந்து எடுக்கலாம். தற்செயலாக தனிப்பட்ட தரவை வெளியிடாமல் இருக்க, உடனடியாக private.auto.tfvarகளை .gitignore இல் சேர்க்குமாறு நான் உங்களுக்கு அறிவுறுத்துகிறேன்.

private.auto.tfvars இல் Cloudflare இலிருந்து தரவையும் குறிப்பிட்டுள்ளோம் - DNS பதிவுகளை உருவாக்க மற்றும் எங்கள் சேவையகங்களுக்கு முக்கிய டொமைன் events.kis.im ஐ ப்ராக்ஸி செய்யவும். நீங்கள் cloudflare ஐப் பயன்படுத்த விரும்பவில்லை எனில், main.tf மற்றும் dns.tf கோப்பில் உள்ள cloudflare வழங்குநரின் துவக்கத்தை அகற்றவும், இது தேவையான dns பதிவுகளை உருவாக்குவதற்கு பொறுப்பாகும்.

எங்கள் வேலையில், இணைய இடைமுகம், கன்சோல் பயன்பாடு மற்றும் டெராஃபார்ம் ஆகிய மூன்று முறைகளையும் இணைப்போம்.

மெய்நிகர் நெட்வொர்க்குகள்

உண்மையைச் சொல்வதென்றால், இந்தப் படிநிலையைத் தவிர்க்கலாம், ஏனெனில் நீங்கள் ஒரு புதிய மேகக்கணியை உருவாக்கும் போது, ​​தானாகவே ஒரு தனி நெட்வொர்க் மற்றும் 3 சப்நெட்கள் உருவாக்கப்படும் - ஒவ்வொரு கிடைக்கும் மண்டலத்திற்கும் ஒன்று. ஆனால் எங்கள் திட்டத்திற்கு அதன் சொந்த முகவரியுடன் தனி நெட்வொர்க்கை உருவாக்க விரும்புகிறோம். Yandex.Cloud இல் நெட்வொர்க் எவ்வாறு செயல்படுகிறது என்பதற்கான பொதுவான வரைபடம் கீழே உள்ள படத்தில் காட்டப்பட்டுள்ளது (நேர்மையாக எடுக்கப்பட்டது https://cloud.yandex.ru/docs/vpc/concepts/)

Yandex.Cloud இல் 10 நிகழ்வுகளை ஏற்கிறோம். பகுதி 000

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

பிணைய உருவாக்கம் பிணையத்தில் இருந்து network.tf கோப்பில் விவரிக்கப்பட்டுள்ளது. அங்கு நாம் ஒரு பொதுவான தனியார் பிணைய அகத்தை உருவாக்கி, அதனுடன் மூன்று சப்நெட்களை வெவ்வேறு கிடைக்கும் மண்டலங்களில் இணைக்கிறோம் - இன்டர்னல்-ஏ (172.16.1.0/24), இன்டர்னல்-பி (172.16.2.0/24), இன்டர்னல்-சி (172.16.3.0/24. )

டெராஃபார்மை துவக்கி நெட்வொர்க்குகளை உருவாக்கவும்:

vozerov@mba:~/events/terraform (master) $ terraform init
... skipped ..

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_vpc_subnet.internal-a -target yandex_vpc_subnet.internal-b -target yandex_vpc_subnet.internal-c

... skipped ...

Plan: 4 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

yandex_vpc_network.internal: Creating...
yandex_vpc_network.internal: Creation complete after 3s [id=enp2g2rhile7gbqlbrkr]
yandex_vpc_subnet.internal-a: Creating...
yandex_vpc_subnet.internal-b: Creating...
yandex_vpc_subnet.internal-c: Creating...
yandex_vpc_subnet.internal-a: Creation complete after 6s [id=e9b1dad6mgoj2v4funog]
yandex_vpc_subnet.internal-b: Creation complete after 7s [id=e2liv5i4amu52p64ac9p]
yandex_vpc_subnet.internal-c: Still creating... [10s elapsed]
yandex_vpc_subnet.internal-c: Creation complete after 10s [id=b0c2qhsj2vranoc9vhcq]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

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

மெய்நிகர் இயந்திரங்களை உருவாக்குதல்

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

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

vozerov@mba:~/events/terraform (master) $ cd ../ansible/
vozerov@mba:~/events/ansible (master) $ ansible-galaxy install -r requirements.yml
- cloudalchemy-prometheus (master) is already installed, skipping.
- cloudalchemy-grafana (master) is already installed, skipping.
- sansible.kafka (master) is already installed, skipping.
- sansible.zookeeper (master) is already installed, skipping.
- geerlingguy.docker (master) is already installed, skipping.
vozerov@mba:~/events/ansible (master) $

ansible கோப்புறையின் உள்ளே நான் பயன்படுத்தும் ஒரு உதாரணம் .ansible.cfg உள்ளமைவு கோப்பு உள்ளது. இது கைக்கு வரலாம்.

மெய்நிகர் இயந்திரங்களை உருவாக்கும் முன், உங்களிடம் ssh-agent இயங்கும் மற்றும் ssh விசை சேர்க்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள், இல்லையெனில் டெர்ராஃபார்ம் உருவாக்கப்பட்ட கணினிகளுடன் இணைக்க முடியாது. நான், நிச்சயமாக, OS x இல் ஒரு பிழையைக் கண்டேன்: https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. இது மீண்டும் நிகழாமல் தடுக்க, Terraform ஐத் தொடங்குவதற்கு முன் env இல் ஒரு சிறிய மாறியைச் சேர்க்கவும்:

vozerov@mba:~/events/terraform (master) $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

டெராஃபார்ம் கொண்ட கோப்புறையில் தேவையான ஆதாரங்களை உருவாக்குகிறோம்:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_compute_instance.build -target yandex_compute_instance.monitoring -target yandex_compute_instance.kafka
yandex_vpc_network.internal: Refreshing state... [id=enp2g2rhile7gbqlbrkr]
data.yandex_compute_image.ubuntu_image: Refreshing state...
yandex_vpc_subnet.internal-a: Refreshing state... [id=e9b1dad6mgoj2v4funog]

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

... skipped ...

Plan: 3 to add, 0 to change, 0 to destroy.

... skipped ...

எல்லாம் வெற்றிகரமாக முடிந்தால் (அது இருக்க வேண்டும்), எங்களிடம் மூன்று மெய்நிகர் இயந்திரங்கள் இருக்கும்:

  1. கட்டமைத்தல் - ஒரு பயன்பாட்டைச் சோதித்து உருவாக்குவதற்கான இயந்திரம். அன்சிபிள் மூலம் டோக்கர் தானாக நிறுவப்பட்டது.
  2. கண்காணிப்பு - ஒரு கண்காணிப்பு இயந்திரம் - அதில் நிறுவப்பட்ட ப்ரோமிதியஸ் & கிராஃபானா. உள்நுழைவு / கடவுச்சொல் தரநிலை: நிர்வாகம் / நிர்வாகம்
  3. காஃப்கா என்பது காஃப்கா நிறுவப்பட்ட ஒரு சிறிய இயந்திரம், போர்ட் 9092 இல் அணுகக்கூடியது.

அவை அனைத்தும் சரியான இடத்தில் இருப்பதை உறுதி செய்வோம்:

vozerov@mba:~/events (master) $ yc compute instance list
+----------------------+------------+---------------+---------+---------------+-------------+
|          ID          |    NAME    |    ZONE ID    | STATUS  |  EXTERNAL IP  | INTERNAL IP |
+----------------------+------------+---------------+---------+---------------+-------------+
| fhm081u8bkbqf1pa5kgj | monitoring | ru-central1-a | RUNNING | 84.201.159.71 | 172.16.1.35 |
| fhmf37k03oobgu9jmd7p | kafka      | ru-central1-a | RUNNING | 84.201.173.41 | 172.16.1.31 |
| fhmt9pl1i8sf7ga6flgp | build      | ru-central1-a | RUNNING | 84.201.132.3  | 172.16.1.26 |
+----------------------+------------+---------------+---------+---------------+-------------+

ஆதாரங்கள் உள்ளன, இங்கிருந்து நாம் அவர்களின் ஐபி முகவரிகளைப் பெறலாம். பின்வருபவை முழுவதும் நான் ஐபி முகவரிகளைப் பயன்படுத்தி ssh வழியாக இணைக்க மற்றும் பயன்பாட்டைச் சோதிக்கிறேன். உங்களிடம் டெராஃபார்முடன் இணைக்கப்பட்ட கிளவுட்ஃப்ளேர் கணக்கு இருந்தால், புதிதாக உருவாக்கப்பட்ட டிஎன்எஸ் பெயர்களைப் பயன்படுத்த தயங்க வேண்டாம்.
மூலம், ஒரு மெய்நிகர் இயந்திரத்தை உருவாக்கும் போது, ​​ஒரு உள் IP மற்றும் ஒரு உள் DNS பெயர் கொடுக்கப்பட்டுள்ளது, எனவே நீங்கள் நெட்வொர்க்கில் உள்ள சேவையகங்களை பெயரால் அணுகலாம்:

ubuntu@build:~$ ping kafka.ru-central1.internal
PING kafka.ru-central1.internal (172.16.1.31) 56(84) bytes of data.
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=2 ttl=63 time=0.625 ms
^C
--- kafka.ru-central1.internal ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.625/0.931/1.238/0.308 ms

பயன்பாட்டிற்கு kafk உடன் இறுதிப் புள்ளியைக் குறிப்பிட இது நமக்கு பயனுள்ளதாக இருக்கும்.

விண்ணப்பத்தை அசெம்பிள் செய்தல்

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

நாங்கள் பயன்பாட்டை உருவாக்க இயந்திரத்திற்கு நகலெடுத்து, ssh வழியாக உள்நுழைந்து படத்தை அசெம்பிள் செய்கிறோம்:

vozerov@mba:~/events/terraform (master) $ cd ..
vozerov@mba:~/events (master) $ rsync -av app/ [email protected]:app/

... skipped ...

sent 3849 bytes  received 70 bytes  7838.00 bytes/sec
total size is 3644  speedup is 0.93

vozerov@mba:~/events (master) $ ssh 84.201.132.3 -l ubuntu
ubuntu@build:~$ cd app
ubuntu@build:~/app$ sudo docker build -t app .
Sending build context to Docker daemon  6.144kB
Step 1/9 : FROM golang:latest AS build
... skipped ...

Successfully built 9760afd8ef65
Successfully tagged app:latest

பாதி போர் முடிந்துவிட்டது - இப்போது அதைத் தொடங்கி காஃப்காவுக்கு அனுப்புவதன் மூலம் எங்கள் பயன்பாட்டைச் சரிபார்க்கலாம்:

ubuntu@build:~/app$ sudo docker run --name app -d -p 8080:8080 app /app/app -kafka=kafka.ru-central1.internal:9092</code>

С локальной машинки можно отправить тестовый event и посмотреть на ответ:

<code>vozerov@mba:~/events (master) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://84.201.132.3:8080/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 13:53:54 GMT
Content-Length: 41

{"status":"ok","partition":0,"Offset":0}
vozerov@mba:~/events (master) $

பதிவின் வெற்றியுடன் பயன்பாடு பதிலளித்தது மற்றும் செய்தி சேர்க்கப்பட்டுள்ள பகிர்வு மற்றும் ஆஃப்செட்டின் ஐடியைக் குறிக்கிறது. Yandex.Cloud இல் ஒரு பதிவேட்டை உருவாக்கி அதில் எங்கள் படத்தைப் பதிவேற்றுவது மட்டுமே மீதமுள்ளது (மூன்று வரிகளைப் பயன்படுத்தி இதை எப்படி செய்வது என்பது registry.tf கோப்பில் விவரிக்கப்பட்டுள்ளது). சேமிப்பகத்தை உருவாக்கவும்:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_container_registry.events

... skipped ...

Plan: 1 to add, 0 to change, 0 to destroy.

... skipped ...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

கன்டெய்னர் ரெஜிஸ்ட்ரியில் அங்கீகரிக்க பல வழிகள் உள்ளன - ஒரு auth டோக்கன், ஒரு iam டோக்கன் அல்லது சேவை கணக்கு விசையைப் பயன்படுத்தி. இந்த முறைகள் பற்றிய கூடுதல் விவரங்களை ஆவணத்தில் காணலாம். https://cloud.yandex.ru/docs/container-registry/operations/authentication. நாங்கள் சேவை கணக்கு விசையைப் பயன்படுத்துவோம், எனவே நாங்கள் ஒரு கணக்கை உருவாக்குகிறோம்:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_iam_service_account.docker -target yandex_resourcemanager_folder_iam_binding.puller -target yandex_resourcemanager_folder_iam_binding.pusher

... skipped ...

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

இப்போது எஞ்சியிருப்பது அதற்கான விசையை உருவாக்குவதுதான்:

vozerov@mba:~/events/terraform (master) $ yc iam key create --service-account-name docker -o key.json
id: ajej8a06kdfbehbrh91p
service_account_id: ajep6d38k895srp9osij
created_at: "2020-04-13T14:00:30Z"
key_algorithm: RSA_2048

எங்கள் சேமிப்பகத்தின் ஐடி பற்றிய தகவலைப் பெறுகிறோம், விசையை மாற்றி உள்நுழைக:

vozerov@mba:~/events/terraform (master) $ scp key.json [email protected]:
key.json                                                                                                                    100% 2392   215.1KB/s   00:00

vozerov@mba:~/events/terraform (master) $ ssh 84.201.132.3 -l ubuntu

ubuntu@build:~$ cat key.json | sudo docker login --username json_key --password-stdin cr.yandex
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ubuntu@build:~$

படத்தை பதிவேட்டில் பதிவேற்ற, எங்களுக்கு கொள்கலன் பதிவேட்டில் ஐடி தேவை, அதை yc பயன்பாட்டிலிருந்து எடுக்கிறோம்:

vozerov@mba:~ $ yc container registry get events
id: crpdgj6c9umdhgaqjfmm
folder_id:
name: events
status: ACTIVE
created_at: "2020-04-13T13:56:41.914Z"

அதன் பிறகு, எங்கள் படத்தை ஒரு புதிய பெயருடன் குறியிட்டு பதிவேற்றுகிறோம்:

ubuntu@build:~$ sudo docker tag app cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
ubuntu@build:~$ sudo docker push cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
The push refers to repository [cr.yandex/crpdgj6c9umdhgaqjfmm/events]
8c286e154c6e: Pushed
477c318b05cb: Pushed
beee9f30bc1f: Pushed
v1: digest: sha256:1dd5aaa9dbdde2f60d833be0bed1c352724be3ea3158bcac3cdee41d47c5e380 size: 946

படம் வெற்றிகரமாக ஏற்றப்பட்டதா என்பதைச் சரிபார்க்கலாம்:

vozerov@mba:~/events/terraform (master) $ yc container repository list
+----------------------+-----------------------------+
|          ID          |            NAME             |
+----------------------+-----------------------------+
| crpe8mqtrgmuq07accvn | crpdgj6c9umdhgaqjfmm/events |
+----------------------+-----------------------------+

மூலம், நீங்கள் லினக்ஸ் கணினியில் yc பயன்பாட்டை நிறுவினால், நீங்கள் கட்டளையைப் பயன்படுத்தலாம்

yc container registry configure-docker

டோக்கரை உள்ளமைக்க.

முடிவுக்கு

நாங்கள் நிறைய கடின உழைப்பைச் செய்துள்ளோம், இதன் விளைவாக:

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

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

இந்த பொருள் திறந்த பட்டறை REBRAIN & Yandex.Cloud இன் வீடியோ பதிவில் உள்ளது: Yandex Cloud இல் வினாடிக்கு 10 கோரிக்கைகளை நாங்கள் ஏற்றுக்கொள்கிறோம் - https://youtu.be/cZLezUm0ekE

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

அத்தகைய நிகழ்வை நடத்துவதற்கான வாய்ப்பை வழங்கிய Yandex.Cloud க்கு நாங்கள் சிறப்பு நன்றி கூற விரும்புகிறோம். அவர்களுக்கான இணைப்பு - https://cloud.yandex.ru/prices

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

PS எங்களிடம் மாதத்திற்கு 2 இலவச தணிக்கைகள் உள்ளன, ஒருவேளை உங்கள் திட்டம் அவற்றில் ஒன்றாக இருக்கலாம்.

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

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