Оверселлинг (англ. overselling) — продажа услуг поставщика сверх тех объёмов ресурсов, которые возможно предоставить.

Синоним: овербукинг (англ. overbooking)

Оверселлинг в хостинг-индустрии править

Применительно к продаже услуг хостинга оверселлинг означает продажу вычислительных мощностей в объёмах, больших, чем может предоставить серверное оборудование.

Изначально оверселлинг ассоциировался с продажей услуг виртуального хостинга, и касался в основном таких ресурсов, как трафик и место на жестком диске. С популяризацией услуг виртуальных выделенных серверов (VPS/VDS) слово «оверселлинг» стало известно широкой аудитории и является обычной практикой для большинства хостинг-провайдеров.

Принцип оверселлинга править

В основе оверселлинга лежит тот факт, что большинство клиентов никогда полностью не использует ресурсы, выделенные им тарифным планом. Поэтому хостинг-провайдеры перепродают мощности серверов по несколько раз, что позволяет сократить расходы на электроэнергию и уменьшить простой незадействованных мощностей. А это в результате приводит к снижению цены на услуги.

Пример:

На сервере c 32 Гб оперативной памяти можно завести 32 виртуальных выделенных сервера, которым будет выделено по 1 Гб оперативной памяти, тогда все клиенты гарантировано получат свою оперативную память при максимальной нагрузке. Обычно на сервер такой мощности помещают гораздо больше виртуальных машин.

Теоретически возможна ситуация, когда одновременно все VPS/VDS попытаются задействовать выделенные им мощности, и физический сервер будет загружен до предела. Тогда клиенты провайдера могут заметить последствия оверселлинга: замедление работы сервисов, ошибки, периодическая недоступность сайта. Большинство хостинг-провайдеров тщательно следят за нагрузкой на своих физических серверах и не допускают подобных ситуаций. Системы мониторинга вовремя перераспределяют «проблемных» клиентов между другими серверами, что происходит незаметно для самих клиентов.

Оверселлинг на различных виртуализациях править

Технология виртуализации OpenVZ править

Оверселлинг RAM править

Операционная система Linux ведет подсчет используемой памяти при помощи нескольких значений: VIRT, RES, SHM.

VIRT (virtual size of a process) — виртуальный объём памяти, потребляемый процессом. Это сумма актуально используемой памяти, памяти зарезервированной этим процессом для своих нужд, файлов на диске, которые использует процесс (чаще всего библиотеки) и общая память с другими процессами. VIRT показывает, сколько памяти процесс может получить в настоящий момент.

RES (resident size) — актуально используемый объём памяти в данный момент. Она всегда меньше чем VIRT, так как чаще всего программы используют одни и те же библиотеки.

SHR — показывает, как много памяти VIRT используется как общая.

Например, программа использует лишь часть каких-то функций библиотеки. Таким образом, в VIRT и SHM будет записана полностью вся библиотека, а в RES попадет лишь та часть, которая реально используется.

При подсчете используемой памяти на OpenVZ внутри контейнера берётся в расчёт именно VIRT, что больше, чем реально потребляемая память, но может быть использована гостевой ОС. Таким образом, продавая VPS/VDS по VIRT памяти, можно продать больше, чем есть памяти на родительском сервере.

Для оверселлинга памяти используются параметры vmguarpages, oomguarpages и vmguarpages — это предоставление памяти контейнеру, а oomguarpages — лимит памяти для процесса.

Оверселлинг CPU править

Ограничение использования CPU задается при запуске контейнера через параметры cpuunits (минимальное гарантированное значение процессорного времени для VDS), cpulimit (максимальное значение которое может использовать VDS, в процентах) и cpus (количество ядер, используемых VDS).

Cpulimit будет работать тогда, когда сервер ненагружен и одному из контейнеров не хватает значения в cpuunits, тогда он может использовать до n% ядра (ядер, значение в cpus).

Технология виртуализации FreeBSD Jail. править

Оверселлинг RAM править

Оверселлинг памяти осуществляется по тому же принципу что и в OpenVZ, с одним отличием, считается RES. То есть реально используемая память. Например, у вас есть n процессов использующих libc библиотеку, каждый процесс потребляет по 10 Мб, из них 2 Мб — это директивы из libc, таким образом будет посчитано (10-2)*n+2, и не важно сколько он зарезервировал в VIRT. Раз в 5 секунд в случае превышения процессы убиваются механизмом ядра, решающим проблемы с исчерпанием доступной памяти, называемым OOMkiller.

Оверселлинг CPU править

CPU лимитируется тоже по схожему принципу с OpenVZ, на VPS/VDS выставляется мягкий лимит до 1 ядра, так же существует жесткий лимит, который срабатывает по команде, если контейнеру уже отдано 1 ядро и нагрузка долго держится и не падает, то будет задействован жесткий лимит.

FreeBSD Jail & OpenVZ оверселлинг HDD править

На обоих виртуализациях осуществим оверселлинг дискового пространства путём многократной продажи. В данном случае хостинг-провайдеру нужно постоянно следить за тем, чтобы оставалось достаточно свободного места, на случай если один (несколько) из контейнеров(VDS) потребует себе все, что полагается.

Ограничение в использовании диска в данном случае можно было бы реализовать через лимитирование операций ввода-вывода, но, на данный момент, этот лимит сложно осуществим. Конечный драйвер не знает откуда ему передана команда на считывание и не может посчитать это какому-то определённому контейнеру. Поэтому прибегают к ограничению одновременно открытых файлов — файловым дескрипторам. При достижении лимита открытых файлов, гостевая ОС будет выдавать ошибку о закончившихся иннодах.

Технология виртуализации KVM править

На данной виртуализации возможен оверселлинг процессора и оперативной памяти.

Оверселлинг RAM править

Оверселлинг оперативной памяти может быть осуществлен при использовании технологий Kernel SamePage Merging (KSM), Ballooning и Swapping.

KSM работает по следующему принципу:

Первым делом нужно настроить KSM на сканирование областей памяти, по умолчанию KVM виртуализация не настроена на работы KSM. После настройки KSM начинает сканировать оперативную память в поисках идентичных данных. Когда KSM находит 2 и более совпадений, она помечает данные как общие и заменяет все одинаковые участки памяти одним блоком и делает его защищенным от записи. Если позже один из процессов, использующий такую память, делает запрос на изменение информации, KSM создает новую область копируя защищенный от записи блок.

Ballooning:

Гипервизор (программа управления операционными системами) посылает запрос гостевой ОС (VDS), чтобы она вернула часть оперативной памяти назад под его управление:

  1. Драйвер virtio_balloon на VDS получает запрос от гипервизора.
  2. The virtio_balloon driver создает облако памяти внутри VPS/VDS, к которому не могут обращаться процессы, запущенные внутри VDS.
  3. The virtio_balloon driver всегда пытается удовлетворить запрос гипервизора. Однако, он может быть просто не в состоянии выполнить данный запрос. Например, когда приложения, запущенные на VPS/VDS, используют всю оперативную память. В таких ситуациях гостевая ОС выделяет максимально возможный участок памяти, чтобы хотя бы частично выполнить запрос от гипервизора.
  4. После выделения облака, гостевая ОС сообщает об этом гипервизору.

Гипервизор использует эту память по своему усмотрению, там, где она ему нужнее в данный момент. Когда память из облака становится свободной, гипервизор может вернуть её обратно гостевой ОС, у которой его взял:

  1. Гипервизор вновь посылает запрос virtio_balloon driver гостевой ОС.
  2. Запрос сообщает драйверу, что облако памяти можно разрушить и использовать по своему усмотрению.
  3. Драйвер делает память из облака доступной для использования гостевой ОС.

Swapping:

Для оверселлинга памяти используется файл подкачки на жестком диске.

Оверселлинг CPU править

Оверселлинг CPU поддерживается гипервизором KVM через планировщик Linux и механизм cgroups, путём выставления приоритета определённым процессам. При этом гостевые ОС не будут ощущать проблем, если не используют процессор на 100 %. При оверселлинге CPU нельзя продать одной VDS больше ядер, чем есть на сервере, и не нужно допускать нагрузку более 80 % на систему, так как дальнейший оверселлинг может заметно снизить производительность работы как гостевых ОС, так и самого сервера.

Ссылки править