Version v14.1 (2013-01-21 04:31) [AUTO]
This commit is contained in:
66
s4a.tex
66
s4a.tex
@@ -2613,6 +2613,7 @@ systemd. Но, конечно, будет лучше, если этим займ
|
|||||||
приложения, или сопровождающие вашего дистрибутива.
|
приложения, или сопровождающие вашего дистрибутива.
|
||||||
|
|
||||||
\section{К вопросу о безопасности}
|
\section{К вопросу о безопасности}
|
||||||
|
\label{sec:security}
|
||||||
|
|
||||||
Одно из важнейших достоинств Unix-систем~--- концепция разделения привилегий
|
Одно из важнейших достоинств 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}
|
\end{document}
|
||||||
|
|
||||||
vim:ft=tex:tw=80:spell:spelllang=ru
|
vim:ft=tex:tw=80:spell:spelllang=ru
|
||||||
|
|||||||
Reference in New Issue
Block a user