Оверселлинг
Эту статью предлагается удалить. |
Эту страницу предлагается переименовать в «Оверселлинг в хостинг индустрии». |
Оверселлинг (англ. 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), чтобы она вернула часть оперативной памяти назад под его управление:
- Драйвер virtio_balloon на VDS получает запрос от гипервизора.
- The virtio_balloon driver создает облако памяти внутри VPS/VDS, к которому не могут обращаться процессы, запущенные внутри VDS.
- The virtio_balloon driver всегда пытается удовлетворить запрос гипервизора. Однако, он может быть просто не в состоянии выполнить данный запрос. Например, когда приложения, запущенные на VPS/VDS, используют всю оперативную память. В таких ситуациях гостевая ОС выделяет максимально возможный участок памяти, чтобы хотя бы частично выполнить запрос от гипервизора.
- После выделения облака, гостевая ОС сообщает об этом гипервизору.
Гипервизор использует эту память по своему усмотрению, там, где она ему нужнее в данный момент. Когда память из облака становится свободной, гипервизор может вернуть её обратно гостевой ОС, у которой его взял:
- Гипервизор вновь посылает запрос virtio_balloon driver гостевой ОС.
- Запрос сообщает драйверу, что облако памяти можно разрушить и использовать по своему усмотрению.
- Драйвер делает память из облака доступной для использования гостевой ОС.
Swapping:
Для оверселлинга памяти используется файл подкачки на жестком диске.
Оверселлинг CPU
[править | править код]Оверселлинг CPU поддерживается гипервизором KVM через планировщик Linux и механизм cgroups, путём выставления приоритета определённым процессам. При этом гостевые ОС не будут ощущать проблем, если не используют процессор на 100 %. При оверселлинге CPU нельзя продать одной VDS больше ядер, чем есть на сервере, и не нужно допускать нагрузку более 80 % на систему, так как дальнейший оверселлинг может заметно снизить производительность работы как гостевых ОС, так и самого сервера.