டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

Mail.ru குழுமத்தில் எங்களிடம் டரான்டூல் உள்ளது - இது லுவாவில் உள்ள பயன்பாட்டு சேவையகம், இது தரவுத்தளமாகவும் இரட்டிப்பாகிறது (அல்லது நேர்மாறாக?). இது வேகமானது மற்றும் குளிர்ச்சியானது, ஆனால் ஒரு சேவையகத்தின் திறன்கள் இன்னும் வரம்பற்றதாக இல்லை. செங்குத்து அளவிடுதல் ஒரு சஞ்சீவி அல்ல, எனவே டரான்டூல் கிடைமட்ட அளவிடுதலுக்கான கருவிகளைக் கொண்டுள்ளது - vshard தொகுதி [1]. பல சேவையகங்களில் தரவைத் துண்டிக்க இது உங்களை அனுமதிக்கிறது, ஆனால் அதை அமைக்கவும் வணிக தர்க்கத்தை இணைக்கவும் நீங்கள் அதை டிங்கர் செய்ய வேண்டும்.

நல்ல செய்தி: நாங்கள் சில பெரிய காட்சிகளை சேகரித்துள்ளோம் (எ.கா [2], [3]) மற்றும் இந்த சிக்கலுக்கான தீர்வை கணிசமாக எளிதாக்கும் மற்றொரு கட்டமைப்பை உருவாக்கியது.

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

சரியாக என்ன பிரச்சனை?

எங்களிடம் ஒரு டரான்டுலா உள்ளது, எங்களிடம் vshard உள்ளது - உங்களுக்கு இன்னும் என்ன வேண்டும்?

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

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

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

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

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

டரான்டூல் கார்ட்ரிட்ஜின் முக்கிய அம்சங்கள்:

  • தானியங்கி கிளஸ்டர் ஆர்கெஸ்ட்ரேஷன்;
  • புதிய பாத்திரங்களைப் பயன்படுத்தி பயன்பாட்டின் செயல்பாட்டை விரிவுபடுத்துதல்;
  • மேம்பாடு மற்றும் வரிசைப்படுத்தலுக்கான பயன்பாட்டு டெம்ப்ளேட்;
  • உள்ளமைக்கப்பட்ட தானியங்கி பகிர்வு;
  • Luatest சோதனை கட்டமைப்புடன் ஒருங்கிணைப்பு;
  • WebUI மற்றும் API ஐப் பயன்படுத்தி கிளஸ்டர் மேலாண்மை;
  • பேக்கேஜிங் மற்றும் வரிசைப்படுத்தல் கருவிகள்.

வணக்கம், உலகமே!

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

$ tarantoolctl rocks install cartridge-cli
$ export PATH=$PWD/.rocks/bin/:$PATH

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

$ cartridge create --name myapp

மற்றும் நாம் பெறுவது இதுதான்:

myapp/
├── .git/
├── .gitignore
├── app/roles/custom.lua
├── deps.sh
├── init.lua
├── myapp-scm-1.rockspec
├── test
│   ├── helper
│   │   ├── integration.lua
│   │   └── unit.lua
│   ├── helper.lua
│   ├── integration/api_test.lua
│   └── unit/sample_test.lua
└── tmp/

இது ஒரு ஆயத்தமான "ஹலோ, வேர்ல்ட்!" உடன் கூடிய ஜிட் களஞ்சியமாகும். விண்ணப்பம். முன்பு சார்புகளை நிறுவிய பின்னர் (கட்டமைப்பு உட்பட) அதை உடனே இயக்க முயற்சிப்போம்:

$ tarantoolctl rocks make
$ ./init.lua --http-port 8080

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

பயன்பாட்டு மேம்பாடு

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

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

நாங்கள் ஒரு வரைபடத்தை வரைந்து, அதில் மூன்று கூறுகளை வைக்கிறோம்: நுழைவாயில், சேமிப்பு மற்றும் திட்டமிடல். நாங்கள் கட்டிடக்கலையில் மேலும் வேலை செய்கிறோம். vshardஐ சேமிப்பகமாகப் பயன்படுத்துவதால், திட்டத்தில் vshard-router மற்றும் vshard-storage ஆகியவற்றைச் சேர்க்கிறோம். நுழைவாயில் அல்லது திட்டமிடல் நேரடியாக சேமிப்பகத்தை அணுகாது, அதற்காகவே ரூட்டர் உருவாக்கப்பட்டது, அது உருவாக்கப்பட்டது.

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

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

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

vshard-router மற்றும் கேட்வேயை தனித்தனி நிகழ்வுகளில் வைத்திருப்பதில் சிறிதும் இல்லை. இது ஏற்கனவே திசைவியின் பொறுப்பாக இருந்தால் நாம் ஏன் மீண்டும் ஒரு முறை நெட்வொர்க்கை உலாவ வேண்டும்? அவர்கள் அதே செயல்முறைக்குள் இயக்கப்பட வேண்டும். அதாவது, கேட்வே மற்றும் vshard.router.cfg இரண்டும் ஒரு செயல்பாட்டில் துவக்கப்பட்டு, அவை உள்நாட்டில் தொடர்பு கொள்ள அனுமதிக்கின்றன.

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

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

ஸ்டேஜிங் அல்லது உற்பத்திக்கு வரிசைப்படுத்தல் என்று வரும்போது, ​​ஒவ்வொரு டரான்டூல் செயல்முறைக்கும் வன்பொருள் திறன்களைப் பொறுத்து அதன் சொந்த பாத்திரங்களை நாங்கள் ஒதுக்குவோம்:

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

இடவியல் மேலாண்மை

எந்த பாத்திரங்கள் இயங்குகின்றன என்பது பற்றிய தகவல்கள் எங்காவது சேமிக்கப்பட வேண்டும். இந்த “எங்காவது” என்பது விநியோகிக்கப்பட்ட உள்ளமைவு, நான் ஏற்கனவே மேலே குறிப்பிட்டேன். இதில் மிக முக்கியமான விஷயம் கிளஸ்டர் டோபாலஜி ஆகும். 3 டரான்டூல் செயல்முறைகளின் 5 பிரதி குழுக்கள் இங்கே:

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

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

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

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

பாத்திரங்களின் வாழ்க்கை

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

function init()
function validate_config()
function apply_config()
function stop()

ஒவ்வொரு பாத்திரத்திற்கும் ஒரு செயல்பாடு உண்டு init. பாத்திரம் இயக்கப்படும்போது அல்லது டரான்டூல் மறுதொடக்கம் செய்யப்படும் போது இது ஒருமுறை அழைக்கப்படுகிறது. எடுத்துக்காட்டாக, box.space.create ஐ துவக்குவது வசதியானது, அல்லது திட்டமிடுபவர் குறிப்பிட்ட நேர இடைவெளியில் வேலை செய்யும் சில பின்னணி ஃபைபரைத் தொடங்கலாம்.

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

கிளஸ்டர் அழைப்புகள் validate_config и apply_config ஒவ்வொரு முறையும் விநியோகிக்கப்பட்ட கட்டமைப்பு மாறுகிறது. இரண்டு-கட்ட கமிட் மூலம் ஒரு உள்ளமைவு பயன்படுத்தப்படும்போது, ​​ஒவ்வொரு பாத்திரமும் இந்தப் புதிய உள்ளமைவை ஏற்கத் தயாராக உள்ளதா என்பதைச் சரிபார்த்து, தேவைப்பட்டால், பயனருக்குப் பிழையைப் புகாரளிக்கும். உள்ளமைவு இயல்பானது என்பதை அனைவரும் ஒப்புக்கொண்டால், தி apply_config.

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

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

மற்றொரு முக்கியமான விஷயம் தவறு சகிப்புத்தன்மையை உறுதி செய்வதாகும். கார்ட்ரிட்ஜ் ஆரோக்கியத்தை கண்காணிக்க SWIM நெறிமுறையைப் பயன்படுத்துகிறது [4]. சுருக்கமாக, UDP மூலம் செயல்முறைகள் ஒருவருக்கொருவர் "வதந்திகளை" பரிமாறிக்கொள்கின்றன-ஒவ்வொரு செயல்முறையும் அதன் அண்டை நாடுகளுக்கு சமீபத்திய செய்திகளைக் கூறுகிறது, மேலும் அவை பதிலளிக்கின்றன. திடீரென்று பதில் வரவில்லை என்றால், டரான்டூல் ஏதோ தவறு என்று சந்தேகிக்கத் தொடங்குகிறது, சிறிது நேரம் கழித்து அது மரணத்தை ஓதி, இந்தச் செய்தியைச் சுற்றியுள்ள அனைவருக்கும் சொல்லத் தொடங்குகிறது.

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

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

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

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

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

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

வரிசைப்படுத்தல் கருவிகள்

பயன்பாடுகளை வரிசைப்படுத்த கார்ட்ரிட்ஜ் எவ்வாறு உதவுகிறது என்பதைக் காண்பிப்பதாக நான் உறுதியளித்தேன். மற்றவர்களுக்கு வாழ்க்கையை எளிதாக்க, கட்டமைப்பானது RPM தொகுப்புகளை வழங்குகிறது:

$ cartridge pack rpm myapp -- упакует для нас ./myapp-0.1.0-1.rpm
$ sudo yum install ./myapp-0.1.0-1.rpm

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

$ sudo tee /etc/tarantool/conf.d/demo.yml <<CONFIG
myapp.router: {"advertise_uri": "localhost:3301", "http_port": 8080}
myapp.storage_A: {"advertise_uri": "localhost:3302", "http_enabled": False}
myapp.storage_B: {"advertise_uri": "localhost:3303", "http_enabled": False}
CONFIG

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

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

$ sudo systemctl start myapp@router
$ sudo systemctl start myapp@storage_A
$ sudo systemctl start myapp@storage_B

உள்ளமைவில், கார்ட்ரிட்ஜ் இணைய இடைமுகத்தை வழங்கும் HTTP போர்ட்டைக் குறிப்பிட்டுள்ளோம் - 8080. அதற்குச் சென்று பார்க்கலாம்:

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

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

உங்களுக்கு பிடித்த பானத்தை ஒரு கிளாஸ் ஊற்றி, நீண்ட வேலை வாரத்திற்கு பிறகு ஓய்வெடுப்போம். பயன்பாட்டைப் பயன்படுத்தலாம்.

டரான்டூல் கார்ட்ரிட்ஜ்: லுவா பின்தளத்தை மூன்று வரிகளில் பிரித்தல்

முடிவுகளை

முடிவுகள் என்ன? இதை முயற்சிக்கவும், பயன்படுத்தவும், கருத்து தெரிவிக்கவும், Github இல் டிக்கெட்டுகளை உருவாக்கவும்.

குறிப்புகள்

[1] Tarantool » 2.2 » குறிப்பு » Rocks reference » Module vshard

[2] Tarantool அடிப்படையிலான Alfa-Bank இன் முதலீட்டு வணிகத்தின் மையத்தை நாங்கள் எவ்வாறு செயல்படுத்தினோம்

[3] புதிய தலைமுறை பில்லிங் கட்டமைப்பு: டரான்டூலுக்கு மாற்றத்துடன் மாற்றம்

[4] SWIM - கிளஸ்டர் கட்டுமான நெறிமுறை

[5] கிட்ஹப் - டரான்டூல்/கார்ட்ரிட்ஜ்-கிளை

[6] கிட்ஹப் - டரான்டூல்/கேட்ரிட்ஜ்

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

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