Кіріспе

Хеш техникасы
Компьютер ғылымында, жүйелі хеш-теу кейіннен таратылған хеш-кесте сияқты, өзара байланысты желілерде файлды қадағалаудың техникалық мәселесін шешу үшін қайта қолданылды. Teradata бұл әдісті 1986 жылы шыққан үлестірілген деректер базасында қолданды, бірақ олар бұл терминді қолданбады. Teradata әлі күнге дейін дәл осы мақсатты орындау үшін хеш-кесте тұжырымдамасын қолданады. Akamai Technologies компаниясын 1998 жылы ғалымдар Дэниел Левин және Ф. Томсон Лейтон ("жүйелі хеш-теу" терминін енгізген мақаланың авторлары) құрды. Akamai-дың контент жеткізу желісінде серверлер кластеріндегі жүктемені теңестіру үшін жүйелі хеш-теу қолданылады, ал кластерлер арасындағы жүктемені теңестіру үшін тұрақты жұптасу алгоритмі қолданылады. Жүйелі хеш-теу сондай-ақ, ірі веб-қосымшалардағы жүйелік қателердің әсерін азайту үшін, жүйеге кең ауқымды қателерді тудырмай, сенімді кеш жасауды қамтамасыз ету үшін пайдаланылды. Жүйелі хеш-теу – үлестірілген хеш-кестелердің (DHT) негізгі құралы болып табылады, олар хеш-мәндерді пайдаланып кілттер кеңістігін үлестірілген түйіндер жиынтығында бөледі, содан кейін кілт бойынша түйіндерді тиімді іздеуді қамтамасыз ететін байланысқан түйіндердің желісін құрайды. 1996 жылы жасалған Rendezvous хешинг – қарапайым және жалпы техника. Ол өте ерекше ең жоғары кездейсоқ салмақ (HRW) алгоритмін қолдана отырып, жүйелі хеш-теудің мақсаттарына жетеді.

Негізгі техника

Жүкті теңдестіру мәселесінде, мысалы, BLOB кластердегі серверлердің біріне тағайындалуы керек болғанда, стандартты хэш функциясын қолдануға болады. Осы BLOB үшін хэш мәнін есептейміз, нәтижелі хэш мәнін деп есептейік, содан кейін серверлер санымен модульдік амал жасаймыз (осы жағдайда) BLOB-ты қай серверге орналастыруға болатынын анықтау үшін: ; демек, BLOB осы жағдайда оның мұрагері болып табылатын серверге орналастырылады. Бірақ, серверді қосу немесе жою кезінде, немесе масштабтау кезінде (құрамы өзгеретін кезде) әрбір сервердегі барлық BLOB-тарды қайта тағайындап, жылжыту қажет, бірақ бұл операция өте қымбат. Тұрақты хэштеу, кластерде сервер қосылғанда немесе алынып тасталғанда әрбір BLOB-ты қайта тағайындау қажеттігін болдырмау үшін жасалған. Басты идея – BLOB пен серверлерді бірлік шеңберге, әдетте радиандармен, бейнелейтін хэш функциясын пайдалану. Мысалы, (мұнда BLOB немесе сервер идентификаторының хэші, мысалы IP-адрес немесе UUID). Әрбір BLOB сағат тілі бойынша шеңберде келетін келесі серверге тағайындалады. Әдетте, бинарлық іздеу алгоритмі немесе сызықтық іздеу осы BLOB-ты орналастыру үшін «орнын» немесе серверді табу үшін қолданылады, тиісінше O(log n) немесе O(n) күрделігімен; және сағат тілі бойынша әрбір итерацияда серверді табу үшін операция (мұнда кластердегі сервердің мәні) орындалады. Бұл BLOB-тарды серверлерге тең бөлуді қамтамасыз етеді. Бірақ, ең маңыздысы, егер сервер істен шығып, шеңберден алынып тасталса, тек осы істен шыққан серверге сәйкес келген BLOB-тар ғана сағат тілі бойынша келесі серверге қайта тағайындалады. Сол сияқты, егер жаңа сервер қосылса, ол бірлік шеңберге қосылады және тек осы серверге сәйкес келген BLOB-тар ғана қайта тағайындалады. Сервер қосылғанда немесе алынып тасталғанда, BLOB-тардың көп бөлігі өздерінің бұрынғы серверлік тағайындамаларын сақтайды, ал бір серверді қосу BLOB-тардың тек бір бөлігін жылжытады. Кластердегі кэш серверлер арасында BLOB-тарды жылжыту процесі контекстке байланысты болғанымен, әдетте, жаңа қосылған кэш сервер өзінің «мұрагерін» анықтап, осы серверге тиесілі барлық BLOB-тарды (яғни, хэш мәні жаңа сервердің хэш мәнінен кішкентай болғандарын) одан жылжытады. Алайда, веб-бет кэштері үшін көптеген жағдайларда, кэштелген BLOB жеткілікті кішкентай болса, жылжыту немесе көшіру қажет болмайды. Жаңа қосылған кэш серверге сұрау келгенде, кэштен қателік туындайды және нақты веб-серверге сұрау жіберіледі, содан кейін BLOB болашақ сұраулар үшін жергілікті кэшке сақталады. Бұрын қолданылған кэш серверлеріндегі артық BLOB-тар кэштен шығару саясатына сәйкес жойылады.

Ауысуды азайту

Радиан ішіндегі бірнеше тораптардың қисықтығын болдырмау үшін, кластердегі серверлердің біркелкі таралмауынан туындайтын жағдайды ескере отырып, бірнеше таңба қолданылады. Осы қайталанған таңбалар "виртуалды тораптар" деп аталады, яғни кластердегі бір "нақты" таңбаға немесе серверге сілтеме жасайтын бірнеше таңба. Белгілі бір сервер үшін қолданылатын виртуалды тораптар немесе қайталанған таңбалар саны сол сервердің "салмағы" деп аталады.