From 93782fa4ec39822ab3141c458da288848471a3e3 Mon Sep 17 00:00:00 2001 From: nnz1024 <0comffdiz@inbox.ru> Date: Mon, 21 Jan 2013 04:31:00 +0400 Subject: [PATCH] Version v14.1 (2013-01-21 04:31) [AUTO] --- s4a.tex | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/s4a.tex b/s4a.tex index 8ee5f04..7f11262 100644 --- a/s4a.tex +++ b/s4a.tex @@ -2613,6 +2613,7 @@ systemd. Но, конечно, будет лучше, если этим займ приложения, или сопровождающие вашего дистрибутива. \section{К вопросу о безопасности} +\label{sec:security} Одно из важнейших достоинств Unix-систем~--- концепция разделения привилегий между различными компонентами ОС. В частности, службы обычно работают от имени @@ -4267,6 +4268,71 @@ $ gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedes которой они непосредственно запущены. В частности, если они работают в контейнере, находящемся внутри виртуальной машины, они увидят только контейнер. +\section{Сокет-активация служб и контейнеров} + +\href{http://0pointer.de/blog/projects/socket-activation.html}{Сокет}-% +\href{http://0pointer.de/blog/projects/socket-activation2.html}{активация}~--- +это одна из наиболее интересных возможностей systemd. Еще в +\href{http://0pointer.de/blog/projects/systemd.html}{первом анонсе} нашего +проекта мы рассказывали о том, как этот механизм улучшает +параллелизацию и отказоустойчивость использующих сокеты служб, а также упрощает +формирование зависимостей между службами при загрузке. В данной статье я +продолжу рассказ о его возможностях~--- на этот раз речь пойдет об увеличении +числа служб и контейнеров, работающих на одной и той же системе, без повышения +потребления ресурсов. Другими словами: как можно увеличить количество клиентских +сайтов на хостинговых серверах без затрат на новое оборудование. + +\subsection{Сокет-активация сетевых служб} + +Начнем с небольшого отступления. Итак, что же такое сокет-активация, и как она +работает? На самом деле все довольно просто. systemd создает <<слушающие>> +сокеты (не~обязательно IP) от имени вашей службы (которая пока не~запущена) и +ожидает входящие соединения. Как только в сокет поступает первый запрос, systemd +запускает службу и передает ей полученные данные. После обработки запроса, в +зависимости от реализации службы, она может продолжать работу, ожидая новых +соединений, или завершиться, переложив эту задачу обратно на systemd (который +вновь запустит ее при поступлении очередного запроса). При этом, со стороны +клиента невозможно отличить, когда служба запущена, а когда~--- нет. Сокет +постоянно остается открытым для входящих соединений, и все они обрабатываются +быстро и корректно. + +Такая конфигурация позволяет снизить потребление ресурсов: службы работают и +потребляют ресурсы только тогда, когда это действительно необходимо. Многие +интернет-сайты и службы могут использовать это с выгодой для себя. Например, +хостеры веб-сайтов знают, что из огромного количества существующих в Интернете +сайтов лишь малая часть получает непрерывный поток запросов. Большинство же +сайтов, хотя и должны постоянно оставаться доступными, получают запросы очень +редко. Используя сокет-активацию, вы можете воспользоваться этим: разместив +множество таких сайтов на одной системе и активируя их службы только при +необходимости, вы получаете возможность <<оверкоммита>>: ваша система +будет обслуживать сайтов больше, чем формально позволяют ее ресурсы. Разумеется, +увлекаться оверкоммитом не~стоит, иначе в моменты пиковой нагрузки ресурсов +может действительно не~хватить. + +С помощью systemd вы без труда можете организовать такую схему. Множество +современных сетевых служб уже поддерживают сокет-активацию <<из коробки>> (а в +те, которые пока не~поддерживают, ее +\href{http://0pointer.de/blog/projects/socket-activation.html}{не~так уж} и +\href{http://0pointer.de/blog/projects/socket-activation2.html}{сложно} +добавить). Используя встроенный в systemd механизм управления +\hyperref[sec:instances]{экземплярами служб}, вы сможете подготовить +универсальные шаблоны конфигурации служб, и в соответствии с ними для каждого +сайта будет запускаться свой экземпляр службы. Кроме того, не~стоит забывать, +что systemd предоставляет вам \hyperref[sec:security]{богатый арсенал} +механизмов обеспечения безопасности и разграничения доступа, который позволит +изолировать клиентские сайты друг от друга (например, службы каждого клиента +будут видеть только его собственный домашний каталог, в то время как каталоги +всех остальных пользователей будут им недоступны). Итак, в конечном итоге вы +получаете надежную и масштабируемую серверную систему, на сравнительно небольших +ресурсах которой функционирует множество безопасно изолированных друг от друга +служб~--- и все это реализовано штатными возможностями вашей ОС. + +Подобные конфигурации уже используются на рабочих серверах ряда компаний. В +частности, специалисты из \href{https://www.getpantheon.com/}{Pantheon} +используют такую схему для обслуживания масштабируемой инфраструктуры множества +сайтов на базе Drupal. (Стоит упомянуть, что заслуга ее внедрения в Pantheon +принадлежит Дэвиду Штрауссу. Дэвид, ты крут!) + \end{document} vim:ft=tex:tw=80:spell:spelllang=ru