Memcached — комп'ютерна програма, сервіс кешування даних в оперативній пам'яті на основі парадигми розподіленої хеш-таблиці.
Тип | memcached |
---|---|
Розробник | Danga Interactive |
Перший випуск | 22 травня 2003 |
Стабільний випуск | 1.4.15 (3 вересня 2012) |
Операційна система | Незалежне від платформи ПЗ |
Мова програмування | C[1] |
Ліцензія | BSD |
Репозиторій | github.com/memcached/memcached |
Вебсайт | memcached.org/ |
З допомогою клієнтської бібліотеки (для Perl, PHP, Python, Java та ін.) дозволяє кешувати дані в ОЗП одного або декількох серверів. Розподіл даних реалізується по значенню хеш ключа. Використовуючи ключ даних, клієнтська бібліотека визначає його хеш і використовує його для вибору відповідного сервера. Ситуація збою сервера трактується як промах кешу. Це дозволяє, зокрема, проводити гарячу заміну серверів.
В API memcached є тільки базові функції: вибір сервера, установка з'єднання, додання, видалення, оновлення і отримання об'єкта. Для кожного об'єкта встановлюється час актуальності, починаючи з 1 секунди до нескінченності. При переповненні пам'яті застарілі об'єкти кешу автоматично знищуються.
Сервер memcached було розроблено для сайту LiveJournal з метою зниження навантаження на сервери баз даних.
Приклад коду
Зверніть увагу, що всі функції, описані в цьому розділі, написані на псевдокоді. Синтаксис виклику Memcached може відрізнятися в залежності від мови програмування і API.
Запит до бази даних (без використання memcached) може виглядати як в наступному прикладі:
function get_foo(int userid) { result = db_select( "SELECT * FROM users WHERE userid = ? ", userid) ; return result; }
З використанням memcached, цей ж виклик може виглядати наступним чином:
function get_foo(int userid) { /* спочатку перевірити кеш */ data = memcached_fetch("userrow:" + userid) ; if ( !data) { /* не знайдено: запросити БД */ data = db_select("SELECT * FROM users WHERE userid = ? ", userid) ; /* зберегти в кеші для майбутніх запитів */ memcached_add("userrow:" + userid, data) ; } return data; }
Сервер спочатку перевірить, чи зберігає Memcached значення з унікальним ключем «userrow:userid», де userid є деяким числом. Якщо кеш не містить такі дані, сервер зробить запит до БД, як звичайно, і встановить унікальний ключ, використовуючи виклик до memcached API.
Однак, якщо використовувати тільки цей виклик до API, сервер може повернути некоректні дані після будь-якого оновлення БД: Memcached буде зберігати і повертати застарілі дані . Тому, на додаток до виклику на занесення даних в кеш, також необхідно і оновлення:
function update_foo(int userid, string dbUpdateString) { /* спочатку оновити БД */ result = db_execute(dbUpdateString) ; if (result) { /* оновлення БД відбулося: підготувати дані для занесення в кеш*/ data = db_select("SELECT * FROM users WHERE userid = ? ", userid) ; /* останній рядок також могла виглядати на кшталт data = createDataFromDBString (dbUpdateString); */ /* занести оновлені дані в кеш */ memcached_set("userrow:" + userid, data) ; } }
Цей виклик оновить кешовані дані, для того щоб вони відповідали новим даними в базі даних, тільки якщо запит на оновлення бази закінчиться успіхом. Інший підхід може полягати в тому, щоб очистити кеш з даного ключу за допомогою функції Memcached, щоб наступний виклик не знайшов дані в кеші і запросив їх в базі даних. Аналогічні дії потрібні і в разі видалення даних з бази даних, щоб кеш залишався коректним або частково незаповненим.
Уразливості
Наприкінці лютого, початку березня 2018 року було зафіксовано дві надпотужні D-DoS атаки з піковою потужністю 1,3 Тб/с проти Github та 1,7 Тб/c проти не названого вебресурсу в США. Зловмисники скористались особливістю протоколу системи Memcached для мультиплікації UDP-трафіку.. Відсутність автентифікації в системі memcached дозволяє зловмисникам використовувати «відкриті» сервери (за оцінками дослідників станом на початок 2018 року було зафіксовано близько 50 тисяч) спочатку для завантаження власних даних, а потім надсилаючи запити на їхнє отримання із підробленою IP-адресою скеровувати відповіді на адресу жертви.
Див. також
- [en]
- Aerospike
- Couchbase Server
- Redis
- [en]
- [en]
- Hazelcast
- Cassandra
- [en]
Примітки
- InfoQ: JGroups Implementation of Memcached Supports Failover and JMX
- Carlos Morales (5 березня 2018). . Arbor Netscout. Архів оригіналу за 12 березня 2018. Процитовано 12 березня 2018.
- Brian Krebs (2 березня 2018). . KrebsOnSecurity. Архів оригіналу за 29 березня 2018. Процитовано 12 березня 2018.
Посилання
- Сайт проекту [ 28 січня 2021 у Wayback Machine.]
- Сайт розробника [ 22 січня 2004 у Wayback Machine.]
- Distributed Caching with Memcached by Brad Fitzpatrick [ 7 березня 2012 у Wayback Machine.]
- Memcached для windows [ 26 лютого 2012 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Memcached komp yuterna programa servis keshuvannya danih v operativnij pam yati na osnovi paradigmi rozpodilenoyi hesh tablici memcachedTip memcachedRozrobnik Danga InteractivePershij vipusk 22 travnya 2003Stabilnij vipusk 1 4 15 3 veresnya 2012 Operacijna sistema Nezalezhne vid platformi PZMova programuvannya C 1 Licenziya BSDRepozitorij github com memcached memcachedVebsajt memcached org Z dopomogoyu kliyentskoyi biblioteki dlya Perl PHP Python Java ta in dozvolyaye keshuvati dani v OZP odnogo abo dekilkoh serveriv Rozpodil danih realizuyetsya po znachennyu hesh klyucha Vikoristovuyuchi klyuch danih kliyentska biblioteka viznachaye jogo hesh i vikoristovuye jogo dlya viboru vidpovidnogo servera Situaciya zboyu servera traktuyetsya yak promah keshu Ce dozvolyaye zokrema provoditi garyachu zaminu serveriv V API memcached ye tilki bazovi funkciyi vibir servera ustanovka z yednannya dodannya vidalennya onovlennya i otrimannya ob yekta Dlya kozhnogo ob yekta vstanovlyuyetsya chas aktualnosti pochinayuchi z 1 sekundi do neskinchennosti Pri perepovnenni pam yati zastarili ob yekti keshu avtomatichno znishuyutsya Server memcached bulo rozrobleno dlya sajtu LiveJournal z metoyu znizhennya navantazhennya na serveri baz danih Priklad koduZvernit uvagu sho vsi funkciyi opisani v comu rozdili napisani na psevdokodi Sintaksis vikliku Memcached mozhe vidriznyatisya v zalezhnosti vid movi programuvannya i API Zapit do bazi danih bez vikoristannya memcached mozhe viglyadati yak v nastupnomu prikladi function get foo int userid result db select SELECT FROM users WHERE userid userid return result Z vikoristannyam memcached cej zh viklik mozhe viglyadati nastupnim chinom function get foo int userid spochatku pereviriti kesh data memcached fetch userrow userid if data ne znajdeno zaprositi BD data db select SELECT FROM users WHERE userid userid zberegti v keshi dlya majbutnih zapitiv memcached add userrow userid data return data Server spochatku perevirit chi zberigaye Memcached znachennya z unikalnim klyuchem userrow userid de userid ye deyakim chislom Yaksho kesh ne mistit taki dani server zrobit zapit do BD yak zvichajno i vstanovit unikalnij klyuch vikoristovuyuchi viklik do memcached API Odnak yaksho vikoristovuvati tilki cej viklik do API server mozhe povernuti nekorektni dani pislya bud yakogo onovlennya BD Memcached bude zberigati i povertati zastarili dani Tomu na dodatok do vikliku na zanesennya danih v kesh takozh neobhidno i onovlennya function update foo int userid string dbUpdateString spochatku onoviti BD result db execute dbUpdateString if result onovlennya BD vidbulosya pidgotuvati dani dlya zanesennya v kesh data db select SELECT FROM users WHERE userid userid ostannij ryadok takozh mogla viglyadati na kshtalt data createDataFromDBString dbUpdateString zanesti onovleni dani v kesh memcached set userrow userid data Cej viklik onovit keshovani dani dlya togo shob voni vidpovidali novim danimi v bazi danih tilki yaksho zapit na onovlennya bazi zakinchitsya uspihom Inshij pidhid mozhe polyagati v tomu shob ochistiti kesh z danogo klyuchu za dopomogoyu funkciyi Memcached shob nastupnij viklik ne znajshov dani v keshi i zaprosiv yih v bazi danih Analogichni diyi potribni i v razi vidalennya danih z bazi danih shob kesh zalishavsya korektnim abo chastkovo nezapovnenim UrazlivostiNaprikinci lyutogo pochatku bereznya 2018 roku bulo zafiksovano dvi nadpotuzhni D DoS ataki z pikovoyu potuzhnistyu 1 3 Tb s proti Github ta 1 7 Tb c proti ne nazvanogo vebresursu v SShA Zlovmisniki skoristalis osoblivistyu protokolu sistemi Memcached dlya multiplikaciyi UDP trafiku Vidsutnist avtentifikaciyi v sistemi memcached dozvolyaye zlovmisnikam vikoristovuvati vidkriti serveri za ocinkami doslidnikiv stanom na pochatok 2018 roku bulo zafiksovano blizko 50 tisyach spochatku dlya zavantazhennya vlasnih danih a potim nadsilayuchi zapiti na yihnye otrimannya iz pidroblenoyu IP adresoyu skerovuvati vidpovidi na adresu zhertvi Div takozh en Aerospike Couchbase Server Redis en en Hazelcast Cassandra en PrimitkiInfoQ JGroups Implementation of Memcached Supports Failover and JMX Carlos Morales 5 bereznya 2018 Arbor Netscout Arhiv originalu za 12 bereznya 2018 Procitovano 12 bereznya 2018 Brian Krebs 2 bereznya 2018 KrebsOnSecurity Arhiv originalu za 29 bereznya 2018 Procitovano 12 bereznya 2018 PosilannyaPortal Vilne programne zabezpechennya Sajt proektu 28 sichnya 2021 u Wayback Machine Sajt rozrobnika 22 sichnya 2004 u Wayback Machine Distributed Caching with Memcached by Brad Fitzpatrick 7 bereznya 2012 u Wayback Machine Memcached dlya windows 26 lyutogo 2012 u Wayback Machine