CityHost.UA
Допомога і підтримка

Сервіси кешування для сайтів: Memcached, OPCache, Redis

 2183
18.10.2021
article

Кешування сайтів — один із способів прискорення роботи сервера за допомогою скорочення навантаження на обчислювальні потужності.

Основна відмінність кеш-сховищ в тому, що вони на порядок швидші, ніж основне сховище, дані надходять із них та обробляються моментально.

Як це працює? Коли користувач відкриває сторінку сайту, він відправляє на сервер запит, той обробляється і повертається відповідь у вигляді скомпільованої сторінки.

Щохвилини тисячі відвідувачів здійснюють дії на веб-ресурсах, і всі ці процеси обробляються на сервері, створюючи постійне навантаження.

Якщо процесор не встигає швидко опрацьовувати всі завдання, може знижуватися швидкість завантаження сайтів. Це шкодить відвідуваності (не дочекавшись швидкої відповіді, користувач просто закриває вкладку) і погіршує позиції в пошуковій системі (швидкість — одна з ключових метрик при ранжируванні сайтів).

Щоб не робити кожен раз одні й ті ж маніпуляції, повторювані дії зберігаються у тимчасових файлах у проміжковому сховищі. Доступ до нього здійснюється простіше і швидше, не доводиться знову і знову створювати вибірку даних, що знаходяться на основних дисках.

Наприклад, вже переглянуті картинки зберігаються в кеші браузера користувача. Коли він заходить на сайт через вдруге, то вже не створюється запит до сервера, а зображення просто витягується з пам'яті комп'ютера.

Вводячи доменне ім'я улюбленого сайту в адресний рядок і отримуючи готову сторінку, більшість користувачів навіть не підозрюють, що частина цієї сторінки (а може і вся) вже збережена на їхньому комп'ютері.

Цікаво, що наш мозок також використовує кешування. Зустрівшись перший раз із об'єктом (яблуко, будинок, кішка), він витрачає час і ресурс на його вивчення і формування блоку інформації (властивості, призначення, небезпечно / безпечно). У наступні рази, побачивши об'єкт, нам не потрібно заново обробляти всі доступні дані про нього. З кеша дістається готовий скомпільований образ і ми вмить відновлюємо всю отриману раніше інформацію. Таким чином мозок економить багато часу і сил, створюючи стійкі сценарії (скрипти), а основний процесор розвантажується для більш складних і нових завдань.

Способи кешування даних

Існують різні способи кешування, які залежать від того, що і як саме кешується, де зберігаються результати.

1. Браузерне кешування (на стороні клієнта):

  • картинок і файлів,
  • протоколу https,
  • веб-сторінок (повністю або їх фрагментів).

2. Серверне кешування:

  • PHP-коду,
  • запитів до бази даних та відповідей сервера.

Кеш як метод роботи з даними існує з 1960-х років, тому не всі відомі способи актуальні. Існує багато застарілих — одні пішли в забуття, інші використовуються донині.

Сьогодні ми розповімо вам про три сучасних і дієвих методики серверного кешування — OPCache, Memcached і Redis.

OPCache

OPCache розроблений спеціально для PHP. Щоб зрозуміти, як він діє, давайте спочатку розберемося в процесі роботи PHP-скриптів з клієнтськими запитами. Система шукає файли, відкриває їх, компілює відповідь і віддає користувачеві. В процесі створюються опкоди (скомпільовані сценарії) і після виконання тут же знищуються.

OPCache дозволяє зберігати ці сценарії в пам'яті, завдяки чому робота сайту прискорюється в кілька разів. Сам процес створення опкодів доволі ресурсозатратний, тому збереження сценаріїв у кеші дозволяє серйозно розвантажити сервер.

Memcached

Memcached — це програмне забезпечення, яке працює на основі хеш-таблиць. У сервісу відкритий вихідний код, він підтримує всі основні мови програмування. Технологія дозволяє зберігати інформацію на кшталт "ключ-значення" і використовується в основному для кешування сесій, але можна зберігати таким чином й інші дані — наприклад, невеликі ділянки HTML-коду сторінки.

Кешування виглядає так: спочатку запит клієнта надходить у сховище Memcached і шукає там готову компіляцію. Якщо її немає — тоді запит передається на сервер, створюється сторінка, результат відправляється користувачеві й тут же зберігається в оперативній пам'яті за допомогою сервісу Memcached. При наступних аналогічних сесіях результат буде відразу подаватися з кешу, процес не буде зачіпати основні диски. Завдяки цьому час відгуку скорочується до мілісекунд, багаторазово розвантажуючи серверні потужності. Це сприяє швидкому завантаженню сайтів.

Одна з особливостей Memcached — він займає дуже мало місця і витрачає мінімум ресурсів. У ньому немає типів даних, а тільки рядки з ключами. За рахунок цього Memcached економить пам'ять.

Сервіс тримає дані тільки в оперативній пам'яті й не зберігає їх після перезапуску системи. Якщо пам'яті не вистачає, він починає перезаписувати нові дані поверх старих.

Memcached багатопотоковий і добре масштабується вертикально за рахунок нарощування пам'яті та кількості ядер. Такий спосіб має обмеження, тому що реалізується в рамках одного сервера.

Redis

Redis — це система управління базами даних, схожа за принципом роботи на Memcached і також діє за методом "ключ-значення", обидва ресурси підійдуть сайтам, у яких багато запитів до бази даних. Але у нього набагато ширший функціонал, тому сервіс використовується не тільки для кешування.

Що вміє Redis:

  • Кешує сесії користувачів, проміжні дані, фрагменти HTML-сторінок;
  • Згладжує блокування сесій на PHP, щоб у всіх користувачів сайт завантажувався рівномірно, а не по черзі;
  • Використовується як СУБД для невеликих майданчиків;
  • Працює як брокер повідомлень;
  • Кешує PHP-код.

Якщо говорити про відмінності Memcached і Redis далі, то у Redis є типи даних; він не тільки зберігає інформацію в оперативній пам'яті, а й періодично відправляє її на диск.

Redis однопотоковий і добре масштабується горизонтально, за допомогою приєднання додаткових серверів. Завдяки цьому масштабування можна проводити практично нескінченно — поки є гроші купувати нову апаратуру.

Пропозиції від Cityhost. Який із способів вибрати клієнту?

Cityhost пропонує всі три послуги в рамках використання хостингу. Розширення доступні в панелі управління хостингом, в розділі "Додаткові послуги".

Для клієнтів виділяється 16 МБ оперативної пам'яті під OPCache безкоштовно. Memcached обійдеться в 10 копійок за день користування послугою, а Redis — 53 копійки (мінімальний обсяг оперативної пам'яті, який можна замовити — 32МБ).

Всі послуги та інструкцію щодо їх установки ви можете знайти тут. 

OPCache, Memcached і Redis використовуються для високонавантажених проектів з великою кількістю відвідувачів на сайті й частими зверненнями до бази даних. Яку з них встановлювати на свій хостинг?

OPCache — мінімалістичний та ефективний сервіс, який підійде всім проектам, що використовують PHP як мову бекенда. Його можна встановлювати разом з іншими згаданими додатками для кешування.

Оскільки Memcached і Redis доволі схожі, часто виникає дилема вибору між ними.

Зазвичай рішення приймають на користь Redis, оскільки він новіший, має великий функціонал і дозволяє вирішувати більше завдань, масштабується за допомогою розширення серверної бази. Цим варіантом користуються великі проекти або з перспективою швидкого зростання.

Але Memcached вирішує завдання кешування не гірше і має свої переваги — він економічний по ресурсах, підходить для компактних проектів, не займає багато місця і масштабується в межах одного сервера.

Виникає логічне запитання: якщо ці технології так прискорюють роботу, то чи не краще поставити всі три розширення на свій хостинг — тоді сайт, напевно, буде літати, як ракета? Не зовсім. Ефективно працюють зв'язки OPCache + Redis і OPCache + Memcached, тому що кожен компонент з пари виконує свої завдання.

А ось Redis і Memcached схожі між собою і при паралельному включенні можуть конфліктувати. Можна, звичайно, добре налаштувати обидва сервіси, щоб вони виконували різні функції. Але зазвичай так не робиться — одного з них цілком достатньо. Який з двох вибрати, потрібно визначати виходячи з потреб сайту, тестуючи роботу послуг.

Так що відповідь проста: Redis і Memcached можна комбінувати з OPCache, але включати всі три сервіси не варто.


Сподобалася стаття? Розкажіть про неї друзям: