BBC Radio 6 Music
- 1 year ago
- 0
- 0
Оверселлинг ( англ. overselling ) — продажа услуг поставщика сверх тех объёмов ресурсов, которые возможно предоставить.
Синоним: овербукинг ( англ. overbooking )
Применительно к продаже услуг хостинга оверселлинг означает продажу вычислительных мощностей в объёмах больших, чем может предоставить серверное оборудование.
Изначально оверселлинг ассоциировался с продажей услуг виртуального хостинга , и касался в основном таких ресурсов, как трафик и место на жестком диске. С популяризацией услуг виртуальных выделенных серверов (VPS/VDS) слово «оверселлинг» стало известно широкой аудитории и является обычной практикой для большинства хостинг-провайдеров .
В основе оверселлинга лежит тот факт, что большинство клиентов никогда полностью не использует ресурсы, выделенные им тарифным планом. Поэтому хостинг-провайдеры перепродают мощности серверов по несколько раз, что позволяет сократить расходы на электроэнергию и уменьшить простой незадействованных мощностей. А это в результате приводит к снижению цены на услуги.
Пример:
На сервере c 32 Гб оперативной памяти можно завести 32 виртуальных выделенных сервера , которым будет выделено по 1 Гб оперативной памяти, тогда все клиенты гарантировано получат свою оперативную память при максимальной нагрузке. Обычно на сервер такой мощности помещают гораздо больше виртуальных машин.
Теоретически возможна ситуация, когда одновременно все VPS/VDS попытаются задействовать выделенные им мощности, и физический сервер будет загружен до предела. Тогда клиенты провайдера могут заметить последствия оверселлинга: замедление работы сервисов, ошибки, периодическая недоступность сайта. Большинство хостинг-провайдеров тщательно следят за нагрузкой на своих физических серверах и не допускают подобных ситуаций. Системы мониторинга вовремя перераспределяют «проблемных» клиентов между другими серверами, что происходит незаметно для самих клиентов.
Операционная система 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 задается при запуске контейнера через параметры cpuunits (минимальное гарантированное значение процессорного времени для VDS), cpulimit (максимальное значение которое может использовать VDS, в процентах) и cpus (количество ядер, используемых VDS).
Cpulimit будет работать тогда, когда сервер ненагружен и одному из контейнеров не хватает значения в cpuunits, тогда он может использовать до n% ядра (ядер, значение в cpus).
Оверселлинг памяти осуществляется по тому же принципу что и в OpenVZ , с одним отличием, считается RES. То есть реально используемая память. Например, у вас есть n процессов использующих libc библиотеку, каждый процесс потребляет по 10 Мб, из них 2 Мб — это директивы из libc, таким образом будет посчитано (10-2)*n+2, и не важно сколько он зарезервировал в VIRT. Раз в 5 секунд в случае превышения процессы убиваются механизмом ядра, решающим проблемы с исчерпанием доступной памяти, называемым .
CPU лимитируется тоже по схожему принципу с OpenVZ , на VPS/VDS выставляется мягкий лимит до 1 ядра, так же существует жесткий лимит, который срабатывает по команде, если контейнеру уже отдано 1 ядро и нагрузка долго держится и не падает, то будет задействован жесткий лимит.
На обоих виртуализациях осуществим оверселлинг дискового пространства путём многократной продажи. В данном случае хостинг-провайдеру нужно постоянно следить за тем, чтобы оставалось достаточно свободного места, на случай если один (несколько) из контейнеров(VDS) потребует себе все, что полагается.
Ограничение в использовании диска в данном случае можно было бы реализовать через лимитирование операций ввода-вывода, но, на данный момент, этот лимит сложно осуществим. Конечный драйвер не знает откуда ему передана команда на считывание и не может посчитать это какому-то определённому контейнеру. Поэтому прибегают к ограничению одновременно открытых файлов — файловым дескрипторам . При достижении лимита открытых файлов, гостевая ОС будет выдавать ошибку о закончившихся иннодах .
На данной виртуализации возможен оверселлинг процессора и оперативной памяти.
Оверселлинг оперативной памяти может быть осуществлен при использовании технологий Kernel SamePage Merging (KSM), Ballooning и Swapping .
KSM работает по следующему принципу:
Первым делом нужно настроить KSM на сканирование областей памяти, по умолчанию KVM виртуализация не настроена на работы KSM. После настройки KSM начинает сканировать оперативную память в поисках идентичных данных. Когда KSM находит 2 и более совпадений, она помечает данные как общие и заменяет все одинаковые участки памяти одним блоком и делает его защищенным от записи. Если позже один из процессов, использующий такую память, делает запрос на изменение информации, KSM создает новую область копируя защищенный от записи блок.
Ballooning:
Гипервизор (программа управления операционными системами) посылает запрос гостевой ОС (VDS), чтобы она вернула часть оперативной памяти назад под его управление:
Гипервизор использует эту память по своему усмотрению, там, где она ему нужнее в данный момент. Когда память из облака становится свободной, гипервизор может вернуть её обратно гостевой ОС, у которой его взял:
Swapping:
Для оверселлинга памяти используется файл подкачки на жестком диске.
Оверселлинг CPU поддерживается гипервизором KVM через планировщик Linux и механизм cgroups , путём выставления приоритета определённым процессам. При этом гостевые ОС не будут ощущать проблем, если не используют процессор на 100 %. При оверселлинге CPU нельзя продать одной VDS больше ядер, чем есть на сервере, и не нужно допускать нагрузку более 80 % на систему, так как дальнейший оверселлинг может заметно снизить производительность работы как гостевых ОС, так и самого сервера.