Кіріспе

Компьютер жадында жолдарды кэштейтін бағдарламалық қамтамасыз ету, көбінесе веб-сайттар үшін қолданылады.

Memcached (әр түрлі айтылады: mem cash dee немесе mem cashed) – жалпы мақсаттағы таратылған жад кэштеу жүйесі. Ол көбінесе динамикалық деректер базасына сүйенетін веб-сайттарды жылдамдату үшін қолданылады, деректер мен нысандарды RAM-де кэштей отырып, сыртқы деректер көзін (мысалы, деректер базасын немесе API) оқу қажеттілігін азайтады. Memcached – Revised BSD лицензиясы бойынша лицензияланған тегін және ашық кодты бағдарламалық жасақтама. Memcached-ті пайдаланатын қосымшалар әдетте сұрауларды және қосымшаларды RAM-ге жинақтайды, содан кейін ғана база деректері сияқты баяу резервтік сақтау құрылымына жүгінеді. Memcached-те кэштен қалуды (misses) қадағалауға арналған ішкі механизм жоқ. Дегенмен, кейбір үшінші тараптық құралдар осы мүмкіндікті ұсынады. Memcached алғаш рет 2003 жылдың 22 мамырында Брэд Фицпатрик өзінің LiveJournal веб-сайты үшін жасады. Ол бастапқыда Perl тілінде жазылған, кейін Анатолий Воробей C тілінде қайта жазды, ол содан кейін LiveJournal-де жұмыс істеді. Қазір Memcached көптеген басқа жүйелерде де қолданылады, оның ішінде YouTube, Reddit, Facebook, Pinterest, Twitter, Wikipedia және Method Studios. Google App Engine, Google Cloud Platform, Microsoft Azure, IBM Bluemix және Amazon Web Services де API арқылы Memcached қызметін ұсынады.

Бағдарламалық жасақтама архитектурасы

Жүйе клиент-сервер архитектурасын қолданады. Серверлер кілт-мәнді ассоциативтік массивді сақтайды; клиенттер осы массивті толтырып, кілт арқылы сұрау жасайды. Кілттердің ұзындығы 250 байтқа дейін, ал мәндердің көлемі ең көп дегенде 1 мегабайтты құрай алады. Клиенттер серверлермен байланыс орнату үшін клиенттік кітапханаларды пайдаланады, олар әдепкі бойынша өз қызметтерін 11211 портында ұсынады. TCP және UDP протоколдары қолдау көрсетіледі. Әрбір клиент барлық серверлерді біледі; серверлер бір-бірімен байланыс жасамайды. Егер клиент белгілі бір кілтке сәйкес келетін мәнді орнату немесе оқу қажет болса, клиенттік кітапхана ең алдымен кілттің хэшін есептеп, қай серверді пайдалану керектігін анықтайды. Бұл серверлердегі қарапайым фрагментация және кеңейтілген, ортақ ресурсы жоқ архитектураны қамтамасыз етеді. Сервер кілттің екінші хэшін есептеп, сәйкес мәнді қайда сақтау немесе оқу керектігін анықтайды. Серверлер мәндерді оперативті жадыда сақтайды; егер сервердің оперативті жадысы таусылса, ол ең ескі мәндерді жояды. Сондықтан клиенттер Memcached-ті уақытша кэш ретінде қарауы керек; олар Memcached-те сақталған деректер қажет болған кезде әлі де бар болады деп сенбеуі керек. MemcacheDB, Couchbase Server сияқты басқа деректер базалары Memcached протоколымен үйлесімділікті сақтай отырып, тұрақты сақтауды қамтамасыз етеді. Егер барлық клиенттік кітапханалар серверлерді анықтау үшін бірдей хэштеу алгоритмін қолданса, онда клиенттер бір-бірінің кэштелген деректерін оқи алады. Типик жағдайда бірнеше сервер және көптеген клиенттер болады. Дегенмен, Memcached-ті бір компьютерде де пайдалануға болады, ол бір уақытта клиент және сервер ретінде жұмыс істейді. Оның хэш-кестесінің көлемі көбінесе өте үлкен болады. Ол деректер орталығындағы серверлер кластеріндегі барлық серверлердегі қол жетімді жадпен шектеледі. Көп көлемді, кең аудиторияға арналған веб-жариялауды қажет ететін жағдайларда бұл көлем бірнеше гигабайтқа дейін жете алады. Memcached мазмұнға жасалатын сұраулардың саны көп немесе белгілі бір мазмұнды жасау құны жоғары болған жағдайларда да тиімді болып табылады.

Қауіпсіздік

Memcached-тің көптеген орналасулары сенімді желілерде болады, онда клиенттер кез келген серверге еркін қосыла алады. Дегенмен, кейде Memcached сенімсіз желілерде немесе әкімшілерлер қосылатын клиенттерді бақылауға алғысы келген жағдайларда орналастырылады. Осы мақсатта Memcached опционалды SASL аутентификациясымен құрастырылуы мүмкін. SASL қолдауы үшін екілік протокол қажет. BlackHat USA 2010 конференциясындағы баяндамада көптеген ірі қоғамдық веб-сайттар Memcached-ті деректерді қарауға, талдауға, алуға және өзгертуге ашық қалдырғаны анықталды. Тіпті сенімді ұйымның ішінде де memcached-тің қарапайым сенім моделі қауіпсіздікке қатысты салдарлары болуы мүмкін. Тиімділік үшін Memcached операцияларының барлығы тең қарастырылады. Кэштің төмен қауіпсіздігі бар жазбаларына қол жеткізуге құқығы бар клиенттер, қауіпсіздігі жоғарырақ жазбаларға да қол жеткізе алады, тіпті оларға мұндай жазбалардың қажеті болмаса да. Егер кэш кілті болжауға, табуға немесе толық іздеу арқылы анықтауға болады, онда оның кэш жазбасын алуға болады. Деректерді орнату және оқуды оқшаулауға әрекет етуге болады, мысалы, үлкен көлемді веб-жариялау кезінде. Сыртқа бет көрсететін контент серверлерінің тобы жарияланған беттер немесе бет компоненттерін сақтайтын memcached-ке оқуға рұқсат алады, бірақ жазуға рұқсат жоқ. Жаңа контент жарияланғанда (әлі memcached-те болмаса), контент бірлігін жасау және оны memcached-ке қосу үшін көпшілікке қолжетімді емес контент жасау серверлеріне сұрау жіберіледі. Контент сервері оны қайта алуға және сыртқа таратуға тырысады.

DDoS шабуыл векторы ретінде пайдаланылады

2018 жылдың ақпан айында CloudFlare қате конфигурацияланған memcached серверлерінің ірі көлемде DDoS шабуылдарын жүргізу үшін қолданылғанын хабарлады. UDP арқылы жұмыс істейтін memcached протоколының күшейткіш коэффициенті 51000-нан асады. DDoS шабуылдарының құрбандарының бірі GitHub болды, ол 1,35 Тбит/с ең жоғары кіріс трафигімен шабуылға ұшырады. Бұл мәселе Memcached 1.5.6 нұсқасында шешілді, ол әдепкі бойынша UDP протоколын өшірді.

Қолданылуы

MySQL 5.6 нұсқасынан бастап Memcached API-ді тікелей қолдайды. Oracle Coherence 12.1.3 нұсқасынан бастап Memcached API-ді тікелей қолдайды. Infinispan Memcached-ті тікелей қолдайды.