Кіріспе
Transparent Inter Process Communication (TIPC) - кластерлік кең жұмыс істеуге арналған Linux-тағы процестер аралық байланыс (IPC) қызметі. Кейде ол белгілі Unix Domain Socket қызметіне қарама-қарсы, Cluster Domain Sockets ретінде ұсынылады; соңғысы тек бір ядрода жұмыс істейді.
Қолданылу
TIPC протоколы негізгі Linux ядросында модуль ретінде қол жетімді, сондықтан Linux дистрибутивтерінің көпшілігінде. TIPC жобасы сонымен қатар басқа операциялық жүйелер үшін протоколды ашық кодпен іске асырады, соның ішінде Wind River компаниясының VxWorks және Sun Microsystems компаниясының Solaris. TIPC қолданбалары әдетте C (немесе C++) тілінде жазылады және AF TIPC адрестік отбасыларының сокеттерін пайдаланады. Go, D, Perl, Python және Ruby бағдарламаларын қолдау да қол жетімді.
Қызмет адресі
TIPC-ны қолдануда үш түрлі мекенжайлар қолданылуы мүмкін. Қызмет көрсету мекенжайы. Бұл мекенжай түрі 32 биттік қызмет түрі идентификаторынан және 32 биттік қызмет инстанциясы идентификаторынан тұрады. Тип идентификаторын әдетте пайдаланушы қолданбасының бағдарламашысы анықтайды және қатты кодтайды, бірақ оның мәнін сол кластерде болуы мүмкін басқа қолданбалармен үйлестіру қажет болуы мүмкін. Ілеспе идентификаторын көбінесе бағдарлама қолданбаға тән критерийлерге негізделген түрде есептейді. Қызмет көрсету аумағы. Бұл адрес түрі бір типтегі және төменгі және жоғарғы диапазон шектері арасындағы қызмет адрестерінің диапазонын білдіреді. Сокетті осы адрес түріне байлау арқылы оны көптеген инстанцияларды көрсетуге болады, бұл көптеген жағдайларда пайдалы болып көрінді. Сокет мекенжайы. Бұл адрес кластердегі белгілі бір сокетке сілтеме болып табылады. Онда 32 бит порт нөмірі мен 32 бит торабы бар. Порт нөмірін сокет құрылған кезде жүйе жасайды, ал түйін нөмірі конфигурация бойынша орнатылады немесе Linux 4.17-ден бастап тиісті түйін сәйкестігінен құрылады. Осы типтегі мекенжайды байланыс орнату немесе хабарламаларды жіберу үшін қызмет мекенжайлары сияқты қолдануға болады, бірақ ол сілтеме жасалатын сокет бар болғанша ғана жарамды. Бір сокет бірнеше түрлі қызмет адрестеріне немесе диапазондарына байланылуы мүмкін, дәл сол сияқты әр түрлі сокеттер бір қызмет адресіне немесе диапазонына байланылуы мүмкін. Байланыстылықтарды сондай-ақ көріну аясы, яғни тораптың жергілікті немесе кластердің жаһандық көрінуімен біліктілендіреді.
Детаграммалық хабарлау
Детаграммалық хабарламалар - ұзындығы 1 мен 66000 байт аралығындағы дискретті дерек бірліктері, олар қосылмаған сокеттер арасында жіберіледі. UDP-ге ұқсас TIPC-детаграммаларының мақсатына жетуіне кепілдік берілмейді, бірақ олардың жеткізілу мүмкіндігі бұрынғыға қарағанда әлдеқайда жақсы. Байланыс қабатының жеткізу кепілдігінің арқасында, датаграмманы жеткізудің жалғыз шектейтін факторы сокет қабылдау буферінің көлемі болып табылады. Жетістікке жету мүмкіндігін жіберуші де, оның розеткасына тиісті жеткізу маңыздылығын беру арқылы арттыра алады. Детаграммаларды үш түрлі жолмен беруге болады. Бірлік. Егер сокет адресі көрсетілсе, хабарлама дәл сол сокетке жіберіледі. TIPC-де unicast термині осы адрестеу режимін белгілеу үшін сақталған. Кез келген. Қызмет адресі пайдаланылған кезде бірнеше сәйкесті мекен-жайлар болуы мүмкін, ал тарату әдісі жиі кез-келген жіберілетін деп аталады, яғни кез-келген сәйкесті мекен-жайлар таңдалуы мүмкін. Қызмет мекенжайын сокет мекенжайына аударатын ішкі функция мақсатты орындар арасындағы жүктеме ауытқушылығының тәуекелін азайту үшін дөңгелек робин алгоритмін қолданады. Көптік тарату. Қызмет ауқымы адресі түрі сонымен қатар көп тарату адресі ретінде екі есеге көбейеді. Қолданба қызмет ауқымын мақсат адресі ретінде көрсеткенде, хабарламаның көшірмесі кластердегі барлық сәйкес келетін сокеттерге жіберіледі. Көрсетілген көп тарату диапазонында сәйкес келетін қызмет инстанциясына байланысты кез келген сокет хабарламаның бір көшірмесін алады. TIPC көпқабатты трансляциясы мүмкіндігінше UDP көпқабатты трансляциясы немесе Ethernet трансляциясын пайдаланады.
Қосылымға бағдарланған хабарлау
Қосылымдар TCP-мен бірдей жолмен, сокеттерде қабылдау және қосу арқылы орнатылады. Алайда, TIPC-де клиент пен сервер порттар нөмірлері мен IP-адрестердің орнына қызмет адресін немесе диапазонын пайдаланады. TIPC осы стандартты сценарийдің екі нұсқасын ұсынады. Сокеттерді SOCK SEQPACKET ретінде жасауға болады, бұл деректерді алмасу ең көп дегенде 66000 байт хабарламалар бірліктерімен болуы керек дегенді білдіреді. Клиент қосылымды тек қабылдаушы сокетке деректерді жіберу арқылы бастауыштай алады. Сол сияқты, серверлік сокет қосылымды аяқтау үшін клиентке дерек хабарламасымен жауап бере алады. Осылайша, TIPC көптеген жағдайларда уақытты үнемдейтін 0 RTT қосылысты орнату механизмін ұсынады. TIPC қосылымдарының ең ерекшелігі - олардың белсенді көрші жүрек соғуының көмегінсіз, теңдес сокетпен байланыс жоғалғанда тез әрекет ету қабілеті. Сокет пайдаланушымен немесе процесс апатынан кейін жабылып қалса, ядролық сокет тазалау коды өз бастамасымен FIN/ERROR хабарламасын шығарады. Кластерлік тораппен байланыс жоғалған кезде жергілікті байланыс қабаты сол торапқа қосылған барлық сокеттерге FIN/ERROR хабарламасын жібереді. Бiрiншiлiк тораптың ақаулықтарын анықтау уақыты 50 мс-ға дейін конфигурацияланады, ал әдеттегi мәнi 1500 мс.
Топтық хабарламалар
Топтық хабарлау жоғарыда сипатталғандай, датграммалық хабарлауға ұқсас, бірақ аяғынан аяғына дейін ағыны бақылаумен, сондықтан жеткізу кепілдігімен. Алайда, кейбір айқын айырмашылықтар бар. Хабарлама тек мүшелік сокеттердің жабық тобы ішінде ғана жіберілуі мүмкін. Сокет қызмет мекенжайын пайдалану арқылы топқа қосылады, онда типтік өріс топтың сәйкестігін, ал инстанция өрісі мүше сәйкестігін көрсетеді. Сондықтан, бір мүше тек бір ғана қызмет адресіне байлана алады. Anycast хабарламасын жібергенде, іздеу алгоритмі тұрақты дөңгелек робин алгоритмін қолданады, сонымен қатар, бірін таңдау алдында, әлеуетті алушыларға ағымдағы жүктемені, яғни жарнамаланған жіберу терезесін қарастырады. Көп таратуды қызмет адресі емес, диапазон жүзеге асырады, сондықтан жіберілген хабарламаның көшірмесі топқа дәл сол адресімен қосылған барлық мүшелерге жетеді. Топтық хабар тарату режимі бар, ол топтың барлық мүшелеріне олардың жеке басын ескермей хабар жібереді. Хабардың реттілігі, тіпті тарату режимдері арасында да кепілдендірілген. Топқа қосылған кезде мүше топтың басқа мүшелері үшін қосылу немесе шығу оқиғаларын алғысы келетінін көрсете алады. Бұл мүмкіндік қызметтiң трекерлiк функциясын пайдаланады және топ мүшесi оқиғаларды мүшелік сокетке алады.
Қызметті қадағалау
Қолданба TIPC ішкі топология серверіне қосылымды ашып, қызмет адресімен тіркеледі. Содан кейін ол бір немесе бірнеше қызмет жазылу хабарламаларын қадағалау қызметіне жібере алады, ол қадағалауды қалаған қызмет мекенжайын немесе ауқымын көрсетеді. Керісінше, топология қызметі қызмет оқиғасы туралы хабарламаларды қосымшаға қайта жібереді, егер сәйкесті мекенжайлар кластердегі сокетпен байланыстырылса немесе байланыстырылмаса. Қызмет оқиғасында табылған сәйкес келетін қызмет диапазоны, сонымен қатар байланған / байланбаған сокет порты мен торабының нөмірі болады. Қызметтерді қадағалаудың екі ерекше жағдайы бар: кластерлік топологияларды қадағалау. TIPC басқа түйінмен байланыс орнатқанда, ол ішкі түрде түйіннің жергілікті байланысын жасайды, ол қызмет байланысы кестесінде резервтелген қызмет түрін қолданады. Бұл тораптағы қолданбаларға кез келген уақытта қолжетімді теңдес тораптарды қадағалауға мүмкіндік береді. Кластерлік байланыс ізін салу. TIPC басқа торапқа жаңа сілтеме орнатқанда, ол тораптың байлау кестесінде резервтелген қызмет түрін пайдалана отырып, тораптың жергілікті байлауын жасайды. Бұл тораптағы қолданбаларға кез келген уақытта теңдес тораптарға барлық жұмысшы сілтемелерді қадағалауға мүмкіндік береді. Қызмет абоненттерінің көпшілігі топология серверіне бағытталса да, басқа топология серверлеріне қосылым орнату және олардың жергілікті байланыстарын бақылау мүмкін. Бұл пайдалы болуы мүмкін, мысалы, байланыс абоненті жергілікті тораптан көрінетіндермен шектелмей, кластердегі барлық байланыс матрицасын жасағысы келсе.
Cluster topology tracking. When TIPC establishes contact with another node, it does internally create a node local binding, using a reserved service type, in the service binding table. This makes it possible for applications on the node to keep track of reachable peer nodes at any time. Cluster connectivity tracking. When TIPC establishes a new link to another node, it does internally create a node local binding, using a reserved service type, in the node's binding table. This makes it possible for applications on the node to keep track of all working links to the peer nodes at any time. Although most service subscriptions are directed towards the node local topology server, it is possible to establish connections to other nodes' servers and observe their local bindings. This might be useful if e. g., a connectivity subscriber wants to create a matrix of all connectivity across the cluster, not limited to what can be seen from the local node.
Топтама
TIPC желісі жеке өңдеу элементтерінен немесе тораптардан тұрады. Тораптар физикалық процессорлар, виртуалды машиналар немесе желілік атаулар кеңістіктері болуы мүмкін, мысалы, Docker контейнерлері түрінде. Бұл тораптар өздеріне берілген кластерлік сәйкестікке сәйкес кластерге орналастырылады. Бір кластерлік сәйкестігіне ие барлық түйіндер бір-бірімен байланыс орнатады, егер желі олардың арасындағы өзара көршілерді табуға мүмкіндік беретін болып құрылған болса. Кластерлік сәйкестікті оның әдетті мәнінен өзгерту тек егер әртүрлі кластерлердегі түйіндер бір-бірін таба алатын болса ғана қажет, мысалы, егер олар бір субжеліге қосылған болса. Түрлі кластерлердегі түйіндер TIPC арқылы бір-бірімен байланыс жасай алмайды. Linux 4.17-ге дейін түйіндер бірегей 32 биттік түйін нөмірімен немесе мекен-жайымен конфигурациялануы керек, ол белгілі бір шектеулерге сәйкес болуы керек. Linux 4.17-ден бастап әр түйіннің 128 биттік түйін сәйкестігі болады, ол түйін кластерінде бірегей болуы керек. Одан кейін түйін нөмірі осы сәйкестендіктен кепілдендірілген бірегей хэш ретінде есептеледі. Егер түйін кластердің бір бөлігі болса, пайдаланушы түйіннің автоматты түрде конфигурациялау мүмкіндігіне сүйене алады, онда бірінші интерфейс қосылған кезде сәйкестік жасалады, немесе ол сәйкестікті нақты белгілей алады, мысалы, түйіннің хост атауынан немесе UUID-ден. Егер түйін кластердің құрамына кірмейтін болса, оның сәйкестігі әдетті мәнінде, нөлде қалуы мүмкін. Көршілерді анықтау UDP мультитрансляциясы немесе L2 трансляциясы арқылы орындалады. Егер инфрақұрылымда хабар тарату/көп таратуды қолдау болмаса, анықтауды нақты конфигурацияланған IP-адрестер арқылы жүзеге асыруға болады.
Тораптар арасындағы байланыс
Кластер бір немесе екі сілтеме арқылы өзара байланысты түйіндерден тұрады. Байланыс сенімді пакеттерді тасымалдау қызметін құрайды, кейде "L2.5" деректер байланысы қабаты деп аталады. Ол барлық пакеттердің жеткізілуін және реттілігін қамтамасыз етеді. Ол түйіндер арасындағы байланыс үшін магистраль ретінде әрекет етеді және оларды қадағалайды. Пирлік тораппен барлық байланыс жоғалған кезде, сол пирлікке қосылыстары бар сокеттерге хабарланады, сондықтан олар қосылыстарды бұза алады. Әрбір соңғы нүкте қызмет байланыстыру кестесінің жергілікті көшірмесінде әріптестік тораптың мекенжай байланыстарын қадағалайды. Пирлік тораппен байланыс жоғалған кезде осы пирлік тораптан барлық байлаулар тазаланады және барлық сәйкес келетін абоненттерге қызметтiң трекерлiк оқиғалары шығарылады. Деректер пакетінің тұрақты қозғалысы болмаған кезде әрбір сілтеме белсенді түрде зондтау / жүрек соғуы арқылы бақыланады. Ақауды анықтау толеранттылығы 50 мс-ден 30 секундқа дейін конфигурацияланады, әдетті орнату 1,5 секунд. Жеткізу және артықшылық себептері бойынша әр торабының жұпқа екі сілтеме орнату мүмкін, бөлек желілік интерфейстерде. Байланыс жұбын жүктемені бөлісу немесе белсенді күту үшін конфигурациялауға болады.
Кластердің масштабталуы
Linux 4.7 басынан бастап TIPC бірегей, патент бойынша күтілетін, автоматты түрде бейімделетін иерархиялық көршілерді бақылау алгоритмімен бірге келеді. Бұл шақтаспалы сақинаны бақылау алгоритмі шын мәнінде сақинаны бақылау мен Gossip протоколының үйлесімі 1000 түйінге дейінгі толық тор кластерлерін 1,5 секундтық сәтсіздікті анықтау уақытында құруға мүмкіндік береді, ал кіші кластерлерде оны әлдеқайда қысқа жасауға болады.
Өнер көрсету
TIPC ерекше өнімділікті қамтамасыз етеді, әсіресе, кері сапардың кідіріс уақыты. Интернодтық TCP-ге қарағанда 33% жылдам, шағын хабарламалар үшін түйін ішінде 2 есе жылдам және үлкен хабарламалар үшін 7 есе жылдам. Тораптар арасындағы, ол TCP-ге қарағанда 1030% төменгі максималды өткізу қабілетін қамтамасыз етеді, ал оның түйін ішіндегі өткізу қабілеті 2530% жоғары. TIPC тобы қазіргі уақытта GSO/GRO-ны түйін ішіндегі хабарламалар үшін қалай қосуға болатынын зерттейді, тіпті мұнда TCP-ге сәйкес келеді.
Көлік құралдары
Барлық көлік құралын пайдалануға арналған, бірақ UDP, Ethernet және InfiniBand қолдауы бар. VxWorks іске асырылуы сонымен қатар ортақ жадты қолдайды, оған бір мезгілде бір аппаратты жұмыс істейтін операциялық жүйенің бірнеше инстанциялары қол жеткізе алады.
Қауіпсіздік
Қазіргі уақытта қауіпсіздікті ТИРК тасымалданатын тасымалдау құралдары қамтамасыз етуі тиіс. UDP арқылы жүретін кезде IPSec қолданылуы мүмкін, ал Ethernet-те MACSec ең жақсы нұсқа болып табылады. TIPC тобы қазіргі уақытта TLS немесе DTLS-ті қалай қолдау керектігін қарастыруда, ол туынды түрде немесе OpenSSL-ге қосымша ретінде.
Тарих
Бұл протоколды бастапқыда Джон Пол Малой 1996-2005 жылдары Эрикссонда әзірлеген және кейіннен ашық бастапқы коды бар қауымдастыққа шығарылып, негізгі Linux ядросына интеграцияланбастан бұрын, бірнеше жыл бойы кластерлік қосымшаларда сол компания қолданған. Содан бері ол көптеген жақсартулар мен жаңартуларға ұшырады, олардың бәрін әртүрлі компаниялардың қатысушыларымен арнайы TIPC жобалық тобы орындады. TIPC-ті басқару құралы барлық Linux дистрибутивтерінде стандартты түрде келетін iproute2 құралы топтамасының бір бөлігі болып табылады.