Убрзање апликација: Решења за кеширање, Redis vs Memcached
Да бисте побољшали брзину рада апликација, једно од кључних решења је кеширање. Када се траже најбоља решења за кеширање, Redis и Memcached се често помињу као најпопуларнији избори.
Међутим, како направити прави избор између Redis-a и Memcached-a? Овај водич ће вам помоћи да разумете предности и недостатке оба решења, како бисте донели информисану одлуку.
Разумевање кеширања је кључно, било да желите да убрзате апликацију, смањите оптерећење база података или омогућите лако скалирање система.
Иако се оба система могу користити за кеширање, они се разликују по карактеристикама. Оба нуде веома ниско кашњење (испод једне милисекунде) и велику пропусност, али се разликују по подршци за структуре података и начину складиштења.
Пре него што уђемо у детаље око поређења, хајде да прво разјаснимо шта је кеширање и зашто је оно важно.
Шта је кеширање и зашто вам је потребно?
Свака операција у апликацији користи системске ресурсе. То може бити процесирање које захтева ЦПУ или мрежно интензивни задаци, попут читања из датотека или база података.
Вишеструко извршавање истог ЦПУ или мрежно интензивног задатка негативно утиче на перформансе система. Замислите сложен упит базе података. Не само да је потребно време за његово израчунавање и преузимање података, већ се и троши више ресурса базе.
Шта ако се резултат упита не мења између узастопних захтева? Ипак, исти скуп упита се извршава сваки пут. Ту на сцену ступа кеширање.
Кеширање подразумева чување често коришћених података у брзој меморији, омогућавајући брзо преузимање када су поново потребни. На овај начин се елиминише потреба за понављањем скупих операција, као што су упити база података или сложена израчунавања. Тиме се побољшавају перформансе, ефикасност и време одзива система.
Кеширање доноси следеће предности:
- Смањена кашњења
- Брже учитавање веб страница и апликација
- Смањено непотребно коришћење ресурса
- Мање оптерећење позадинских сервера
- Заштита база података од честих, тешких упита
Redis: Преглед
Redis је отворено складиште података које ради у меморији. Подаци се чувају у паровима кључ/вредност. Осим за кеширање, Redis се може користити и као база података, посредник порука или ред чекања.
Пошто ради у меморији, Redis нуди кашњења упита испод једне милисекунде. Преузимање података из меморије је брже него са диска, што омогућава велику пропусност и могућност извршавања великог броја читања и писања у секунди.
Redis има подршку за широк спектар структура података, за разлику од Memcached-a. Могу се чувати текстуални или бинарни подаци у облику низова (максимална величина 512 МБ). За чување објеката, могу се користити парови поља-вредност, познати као хешови. За складиштење колекција низова, могу се користити листе, скупови или сортирани скупови.
Постоји подршка за клијентске библиотеке за најважније програмске језике као што су Java, Python, Go, Node.js, C# и .NET. Поред тога, Redis долази са уграђеним услужним програмом командне линије, redis-cli. Овај алат омогућава брзу проверу исправности рада Redis сервера. Такође, омогућава слање команди за читање, писање или модификацију података.
Предности Redis-а
- Redis је отвореног кода и бесплатан
- Постоје званични клијенти за већину програмских језика
- Може се користити за кеширање, као посредник порука, база података или ред чекања
- Нуди врхунске перформансе са кашњењем испод једне милисекунде
- Подржава различите структуре података, укључујући низове, листе, скупове и сортиране скупове
- Пружа високу доступност и скалабилност захваљујући архитектури примарне реплике
Сада ћемо детаљније размотрити Memcached.
Memcached: Преглед
Memcached је бесплатан, отворени систем за кеширање дистрибуираних меморијских објеката. Нуди веома високе перформансе. Ради као складиште кључ/вредност у меморији за мале комаде произвољних података. Да бисмо боље разумели разлике између Redis-a и Memcached-a, прво ћемо анализирати рад Memcached-a.
Меморија у рачунарском систему није равномерно распоређена. Слободна меморија се налази на различитим местима и у различитим величинама. Memcached омогућава приступ расположивој меморији са различитих делова система, користећи меморију где је доступна, тамо где је потребна.
Пошто је једноставно складиште кључ/вредност, Memcached сервери не разумеју природу података. Чувају се сирови, унапред серијализовани подаци, заједно са кључем, временом истека и опционим ознакама. Не постоји подршка за уграђене структуре података.
За разлику од Redis-a, Memcached сервери не комуницирају међусобно, што значи да нема синхронизације, репликације нити емитовања. Зато је доступност кеша и брисање података једноставније. Клијент брише или преписује податке директно на серверу који их чува.
Због ове једноставне архитектуре, Memcached нуди веома високе перформансе. На брзим машинама са брзом мрежном везом, може обрадити више од 200.000 захтева у секунди.
Предности Memcached-a
- Користи податке у меморији, што омогућава брже преузимање од традиционалног диска
- Доступни су API-ји за најпопуларније програмске језике
- Смањује потребу за поновљеним тражењем података кеширањем резултата
- Може се користити за кеширање резултата база података, API одговора или приказаних веб страница
- Помаже у опоравку фрагментиране меморије
- Користи политику кеширања најмање недавно коришћених елемената, који истеку након одређеног времена
- Омогућава креирање сопствених апстракција као Memcached
У наставку ћемо истражити разлике између Redis-a и Memcached-a.
Redis против Memcached-a: Табела поређења
Карактеристике | Redis | Memcached |
Структуре података | Подршка за уграђене структуре података (низови, листе, скупови, сортирани скупови) | Нема подршке за уграђене структуре. Чувају се сирови, унапред серијализовани подаци. |
Величина података | Складишти вредности до 512 МБ | Складишти вредности до 1 МБ |
Складиштење на диску | Има подршку за складиштење на диску користећи RDB или AOF датотеке | Нема подршку за писање на диск. Доступни су алати треће стране, попут libmemcached-tools. |
Нити (threading) | Ради са једном нити | Ради са више нити |
Репликација | Користи архитектуру примарне реплике | Не подржава репликацију |
Уклањање из кеша | Користи политику уклањања најмање недавно коришћених ставки. Остале политике се могу конфигурисати. | Користи политику уклањања најмање недавно коришћених ставки. |
Програмски језици | Подржава већину програмских језика | Подржава већину програмских језика |
У наставку ћемо погледати неке примере употребе Redis-а и Memcached-a.
Примери употребе Redis-а и Memcached-a
#1. Опслуживање е-трговине у обиму: Shopify
Shopify је платформа за е-трговину која омогућава креирање онлајн продавница. У највећој мери, Shopify опслужује 80.000 захтева у секунди, подржавајући 600.000 трговаца. Руковање таквим обимом са минималним кашњењем је велики изазов.
За решавање овог проблема, Shopify користи и Memcached и Redis. Shopify-јева архитектура користи MySQL за базу података, Memcached за складиште кључ/вредност и Redis за ред. Овај пример показује да није увек неопходно бирати између Redis-a и Memcached-a, већ се они могу користити заједно у апликативној архитектури.
Већина платформи за е-трговину има велику количину статичних података који се ретко мењају (нпр. слике производа, описи и информације о продавници). Уместо да се ови подаци траже за сваки захтев, њихово чување у складишту кључ/вредност убрзава рад система.
Коришћење кеш решења попут Memcached-a за опслуживање статичног садржаја смањује оптерећење позадинских сервера и база података.
#2. Кеширање података дистрибуиране апликације: Pinterest
Pinterest је платформа за проналажење инспирације. Сваки захтев на Pinterest-у пролази кроз неколико различитих сервиса и подразумева велику количину израчунавања, укључујући препоруке.
Да би заштитио позадинске сервисе и избегао понављање израчунавања, Pinterest користи дистрибуирани слој кеша, који чува резултате поновљених прорачуна. Захтеви се на тај начин не прослеђују скупим сервисима и базама података. Pinterest-ов слој кеширања укључује хиљаде машина и опслужује преко 150 милиона захтева у секунди.
Pinterest користи Memcached и mcrouter као окосницу свог кеширања. Захваљујући асинхроној природи вођеној догађајима и обради са више нити, Memcached је изузетно ефикасан. Његова једноставна архитектура омогућава креирање сопствених апстракција и хоризонтално скалирање. Овако Pinterest управља саобраћајем.
#3. Руковање безбедношћу података у великој мери: CloudSponge
CloudSponge је SaaS платформа која омогућава корисницима брзо слање позивница, купона и честитки. Омогућава им увоз свих главних адресара, како корисници не би морали ручно да уносе адресе е-поште.
CloudSponge обрађује скоро 2 трилиона адреса е-поште годишње. То са собом носи безбедносне изазове, јер свака рањивост у систему може хакерима омогућити крађу података.
Redis се користи као више од обичног решења за кеширање. CloudSponge чува све контакт податке у меморији. Подаци се чувају онолико дуго колико је потребно корисницима да их преузму, након чега се бришу. Подаци се не чувају на диску, иако Redis пружа ту могућност.
#4. Друге уобичајене употребе решења за кеширање
Следе још неки уобичајени сценарији где се користе решења за кеширање:
❇ Системи за размену порука у ћаскању
При креирању система за размену порука, кеш решења су веома важна компонента. Могу се чувати често коришћени подаци попут корисничких профила, листа контаката и скоријих порука, смањујући оптерећење база података и побољшавајући одзив система.
Функције у реалном времену, као што су индикатори куцања и обавештења о присуству, такође имају користи од кеширања. Коришћење дистрибуираног кеша омогућава скалирање позадинских сервера без потребе за повећањем капацитета кеша.
❇ Услуге локације
У апликацијама које користе услуге засноване на локацији (процена удаљености, времена доласка и препоруке у близини), кеш меморије се користе за складиштење података о локацији. Ови подаци се чувају у облику геопросторног индекса.
Геопросторни индекс омогућава чување локације објеката у складишту података. Redis подразумевано подржава геопросторне индексе. Захваљујући томе што се подаци пружају из меморије, информације о локацији се могу ефикасно делити у реалном времену.
❇ Аналитика у реалном времену
Онлајн игре су постале велика индустрија. Многе кооперативне мобилне игре и апликације за фантазијске спортове захтевају кашњења испод секунде за брзе одлуке и промене.
Користећи кеш меморију, може се имати аналитика у реалном времену, као што је одржавање табеле са резултатима. У апликацијама за фантазијске спортове, статистика играча и остале информације се могу чувати у слоју кеша како би се побољшале перформансе апликације.
Који одабрати?
Redis је веома свестрана опција, са подршком за различите структуре података, што га чини погодним за апликације које захтевају више од основног кеширања. Његово кашњење упита испод једне милисекунде, велика пропусност, као и подршка за већину програмских језика, чине га одличним избором за системе који захтевају брзину и флексибилност. Такође, пружа подршку за задржавање података на диску, ако је то потребно.
С друге стране, Memcached је једноставнији и пружа кеширање велике брзине. Идеалан је за кеширање сирових, унапред серијализованих података. Ефикасно користи расположиву меморију. Једноставна архитектура Memcached-a омогућава веома високе перформансе, посебно на брзим машинама са брзом мрежном везом.
Приликом избора између Redis-a и Memcached-a, потребно је размотрити факторе као што су сложеност апликације, захтеви за структурама података и потребе за скалабилношћу. Redis је одличан за ситуације где су потребне различите структуре података и напредне функције, док Memcached пружа најнижа кашњења и највећу пропусност у једноставним сценаријима кеширања.
Одлука о томе који систем одабрати, треба да буде у складу са специфичним циљевима и ограничењима вашег пројекта. Понекад само кеширање апликативних података није довољно.
Погледајте како подесити локални DNS сервер за кеширање на Linux-у.