Комментарии 86
Случайно продублировал вот этот комментарий ниже
Записи SRV так и не обрели популярности...
Сейчас у каждого контейнера — свой адрес. После гипотетического преобразования контейнеров в пользователей все эти адреса "уйдут" основному хосту, и у каждого пользователя будут права прослушивать один адрес.
1) NAT — это когда некий процесс дерижирует сопоставлением «отдельных запросов через единственный мост», если так можно выразиться. Тут воображению нет предела. Хотите так, хотите сяк. Главное объяснить каждому TCP-запросу куда идти(кому отдавать и у кого забирать данные). Если честно, тут автор намудрил(в комментах ниже Вы это увидите), но, как работает NAT на уровне IP-протокола, так же можно(ассоцитивно) организовать работу некоего процесса, который будет рулить трафиком, данными отдельного пользователя…
2) PROXY
3) SOCKETS
Это всё красивые слова, НО!!! Если где и есть смысл устраивать наслоение(менджмент), то это на уровне идентификации отправителя/получателя данных…
Я лично с автором согласен в одном точно: Вместо того, что бы внедрять инновационные правила и возможности, мы/они городим костыли на старых, изживших себя технологиях, ток что бы ускорить процесс разработки и вписаться в дед-лайн. Мне кажется, что основной посыл автора именно в этом. Он мыслит академически, хотя может и не достаточно качественные решения предлагает.
Як — это далеко не всякий бык! Як — это таки як:

Мелочь, а неприятно.
Есть даже готовое ПО для этого: firejail. Можно установить его в качестве шелла для пользователя, и при логине будет выполняться скрипт, переключающий пользователя в его namespace. Файловая система используется хостовая при этом.
Было бы хорошо, если бы системные сервисы init поддерживали и сконфигурированные пользователем сервисы, чтобы пользователям не приходилось мастерить скрипты watcher и задания cron, а также прибегать к другим хакам.
systemctl --user
именно это и делает.Именно. И так же есть решения для других упомянутых в статье проблем (использовать привилегированные порты обычный юзер может через setcap CAP_NET_BIND_SERVICE=+eip
, фильтровать какие процессы он видит можно через GrSecurity, etc.). Но — вряд ли это взлетит. Докер удобно прячет всё это под капот, а что до большого размера образов… ну, с одной стороны это не такая уж большая цена, с другой если сервисы писать на Go или просто линковать статически то образ докера может занимать несколько мегабайт, а не гигабайт.
Пока читал, как раз не покидала мысль, а не начнется ли после этой статьи разработка очередного дистра но с указанными патчами?
Ведь на самом деле, на 99% хостов набор пакетов идентичен, и не так уж велик (относительно общей массы). Но, их, может, и не так много, но работа по адаптации будет адовая, конечно.
Отличное чтиво, спасибо!
А куда еще можно было свернуть? Все идет к удешевлению стоимости разработки и более сложным системам. Тут без дополнительных ресурсов никуда.
… тут должна быть картинка про 14 несовместимых форматов…
Ведь на самом деле, на 99% хостов набор пакетов идентичен
Только в части названий. Когда дело доходит до конкретики, то может выясниться, вдруг, что вот эта вещь требует таких версий пакета А, а другая — других версий пакета А. И совершенно не факт, что подмножество версий 1 и 2 окажется друг в друге, ну или хотя бы будет пересекаться.
Примеры? Да пожалуйста. Тот же руби. Там с гемами вполне себе бардак.
Тут у одного пользователя проблемы, а что говорить о многих? Так что адаптация не просто адовая.
Отчасти это проблема и пакетных менеджеров (через yum не ставить зависимости нельзя, например).
Но только отчасти. В разработчиков это тоже упирается. Многие из них и так костылят, а тут вообще будет нечто.
Конечно, что и сейчас решается каким-нибудь ./configure --prefix =/home/vasya/software/swver04, вот только это решение вообще не попадает в категорию идентичных наборов пакетов. И в случае, описанном в статье, кстати, тоже. Всё равно это дополнительный экземпляр, который будет требовать места. А сам образ ОС в готовом виде(далеко чтобы не ходить — CentOS7 в минимальном варианте) даже за 2 Гб не переваливает.
Получается, что экономить пытаемся тупо оперативку, т.к. накладные расходы в 2 Гб места — ничто, по большому счёту.
А вот с ОЗУ и ЦП всё интереснее. Да, у виртуалок есть оверхэд. Но в идее автора тоже есть изъяны. А если по его схеме вдруг не хватает ресурсов? Вот просто у кого-то там нагрузка пиковая возникла. Пострадают все.
Приходим к идеи типа шейпинга процессорного времени и потребления ОЗУ. Опять же. Упирается в всё в то, как ОС работают в принципе. Там таких инструментов не предусмотрено. да. Можно выставлять ограничения в отдельном софте (типа БД). Но в большинстве случаев — нельзя. Получаем гигансткий несогласованный оркестр, которым надо попытаться управлять. Идеи ныне популярной контейнеризации тут ближе (хотя и ВМ, по сути, контейнер) к реальности. Возможно даже можно будет решать схожие задачи через некоторое время.
Это всё только в части идей и прикидок.
А ведь есть ещё безопасность. И ей вообще внимания не уделено кроме как «Да, да, пока что игнорируем безопасность».
Только по этой причине идеи, описанные в статье, будут взлетать плохо. если будут. Для многих безопасность — если не столп, то уж точно не та вещь, которую можно игнорировать.
И кстати, про саму идею разрешить биндиться на привилегированные порты. Ну положим, разрешили. Запустили 5 пользователей. А дальше что? Первый биндится, а остальные получают отлуп, что не удаётся забиндить сервис и создать сокет?
Или биндиться на свободные сокеты а сверху этого ещё делать некий пограничный сервис (хотя бы тот же балансировщик нагрузки, типа haproxy)? А смысл? На, например, 22 порт всё равно свой сервис вешать не станешь, да и вообще тогда такая ситуация не будет отличаться от биндинга на непривилегированный порт, т.к. и сейчас ничто не мешает развёртыванию балансировщиков для ферм с сайтами + этот балансировщик тоже должен кто-то конфигурировать, не раздавать же права на него всем пользователя, в конце концов.
Да и вообще. После прочтения у меня сложилась мысль, что автор несколько ограниченно знаком с тем, как устроены сети и ОС.
То, что он хочет, как по мне, не реализуемо в рамках той экосистемы, что сложилась сейчас. Надо менять принципы работы ОС с ресурсами, протоколы, стандарты. В общем-то, по сути, заново построить операционки, сети, софт. Сделать свой интернет с блэкджеком и шлюхами.
Так что написанное у меня вызывает очень много вопросом вкупе с отсутствием даже примерного понимания, как всё существующее можно трансформировать по направлению к означенным идеям. Да и надо ли? Вот, пожалуй, немаловажный вопрос, т.к. автор изначально гонится за соотношением количество сервисов/Ватт.
Что немного странно.
Сервисы ныне не те, что 20 лет назад. И даже не те, что 7 лет назад. К ним предъявляют совсем иные требования. По скорости разработки, функционалу и т.д. Да, я тоже противник монструозных сайтов, но рисовать сервис на чём-то, что вернёт развитие вебя лет на дцать назад — занятие так себе. Для вещей «попроще» же уже существует решение в виде shared-хостингов.
Да и эффективность энергопотребления железа возросла на порядки. Впору задумываться, а корректно ли сравнивать? Один какой-нибудь пролиант 380 может воплне затянуть сотню простых виртуалок (те самые) при потреблении в 500 Вт. Но это будут полноценные системы со всем функционалом и вспомогательным инструментарием + необязательно только http/https ресурсы. В отличие от. На этом и остановлюсь, пожалуй.
По поводу ОЗУ и ЦП вопрос бы решили, виртуализация тоже не сразу пришла и была достигнута совместно железом и софтом.
По безопасности тоже вопрос очень сильно натянут т.к. не каждому серверу и софту она необходима. Вот скажем если у меня в организации уже стоит сервер который выступает шлюзом\фаирволом\прокси с антивирем\антиддос то заморачиваться с дополнительным оверхэдом на других внутренних серверах нет никакого смысла. Тоже самое и к хостингам относится, подавляющей части веб сайтов в инете не нужно чего то сверхъестественного, грубо говоря можно глянуть и увидеть что львиной доли пользователей до лампочки что они ходят на сервак по ftp и настраивают по ssh с паролем.
В моем представление все выглядело бы примерно так:
1) Любой софт стандартный по дефолту ставит все библиотеки в shared зону оси. Это зона никак не доступна обычным пользователям.
2) Для решения depedency hell нужно прийти к сборке всего софта с привязкой к конкретной версии библиотек(сейчас это почти так но криво). Т.е. скомпиленная софтина напрямую ищет somelib-x.y.z.so а не somelib.so.
3) Именование исполняемых бинарников так же идет по принципу someprogramm-x.y.z но пользователь при мнимой установке просто получает куда нибудь в /home/someuser/bin/ симлинк с именем someprogramm.
4) Если пользователя желает некий свой софт не из репозитория или особо перекомпиленный то либы отличные от дефолтных падают в /home/someuser/privatelibs/ а бинарник все туда же в /home/someuser/bin/
5) etc также в папку пользователя.
6) сетевой стек. Ну как вариант уже выше предлагали ipv6 или действительно указание порта в dns.
В общем все это впринципе решаемые задачи, насчет секьюрности получилось бы явно не хуже чем сейчас с виртуализацией. Все это жрало бы меньше места на винтах и кушало бы заметно меньше ресурсов но при этом вероятно требовало более сложных реализаций в ОС.
Что касательно безопасности. В периметре сети мало угроз (или скомпрометированная машина, являющаяся источником бед в сети — уже миф?)? А как же виндовый путь самурая (1 сервер — 1 роль), который, по сути, перекликается с unix-way? Автор изначально поднял вопросы, которые энтерпрайза и касаются слабо, скорее именно провайдеров хостинга, серверов и прочих подобных услуг.
А про подобное безобразное отношение к безопасности уже красиво написал grieverrr — «вьетнамское общежитие и лотерея».
Если хочется сыграть в такую лотерею, то и сейчас нет препятствий.
В периметре сети мало угроз (или скомпрометированная машина, являющаяся источником бед в сети — уже миф?)?
Ну если тачку скомпрометировали то это врядли спасет другие тачки, чем бы они обвешаны небыли. Живой пример недавняя история с «фейковым иваном» который положил кучу всего в том числе пару хостингов со всеми их виртуалками и контейнерами(не могу дать ссылку но инфа была в потоке тех дней).
Далеко ходить не надо подобных если бы очень много встречается в отношении ipv4 в темах обсуждения/статьях по ipv6.
Но по факту имеем, что имеем. И это работает по всем параметрам не так уж и плохо, тем более обкатанное практикой и ставшее стандартами де-факто.
По компрометации. Вы берёте идеальные условия, типа однородной среды и т.п. Часто это не так и эшелоны защиты едят свои мегагерцы не зря.
А вот с ОЗУ и ЦП всё интереснее. Да, у виртуалок есть оверхэд. Но в идее автора тоже есть изъяны. А если по его схеме вдруг не хватает ресурсов? Вот просто у кого-то там нагрузка пиковая возникла. Пострадают все.
Приходим к идеи типа шейпинга процессорного времени и потребления ОЗУ. Опять же. Упирается в всё в то, как ОС работают в принципе. Там таких инструментов не предусмотрено. да. Можно выставлять ограничения в отдельном софте (типа БД). Но в большинстве случаев — нельзя. Получаем гигансткий несогласованный оркестр, которым надо попытаться управлять. Идеи ныне популярной контейнеризации тут ближе (хотя и ВМ, по сути, контейнер) к реальности. Возможно даже можно будет решать схожие задачи через некоторое время.
cgroups, anyone?
В вопросе применения в работе для ограничения ресурсов пользователей/сервисов не разбирался.
Но даже так. Это всего лишь один из аспектов. Есть множество других, более сложных для решения вопросов.
Так в том и прикол что современная контейнеризация это, по-сути, солянка из namespaces, cgroups и aufs/overlay/btrfs.
Первые два — ядерные механизмы, уже присутствующие в ядре (как минимум с Ubuntu 12.04). Если к этому добавить SELinux или AppArmor — получаем достаточный уровень изоляции.
Всё это уже можно задействовать на полную катушку в современных дистрах, где есть SystemD (там поддержка пока что наиболее полная — изоляция вплоть до сервиса).
Менять, конечно, пришлось бы уйму всего, но масса механизмов для изоляции и контроля уже существует и даже работает.
RPi стоит $30 и потребляет менее 15 Вт. Нужно ли говорить, сколько стоит одна монструозная VM и сколько она потребляет?Нужно конечно. 3-4 доллара в месяц для конечного потребителя она стоит вместе с электричеством, инфраструктурой, оркестрацией, маршрутизацией и прочим.
Автор хочет поставить Web сервер на RPi? Мне как-то было нужно собрать для неё QT5, а заморачиваться с кросс-компиляцией было лень. После полутора суток компиляции я таки разобрался, думаю, что даже довольно дохлая виртуалка тут посильнее будет.
Raspberry Pi — на компьютере, который примерно в 100 раз превосходит старый сервер по мощности CPU
Ага, крайне спорное утверждение. Откуда он это взял?
хостить по крайней мере 50 сайтов маленького или среднего размера, но автор может попробовать.
Ага, крайне спорное утверждение. Откуда он это взял?С потолка. На самом деле всякие разные бенчмарки показывают разница скорее раз в 20-30… чего для целей статьи как достаточно: RPi многократно мощнее компьютеров, на которых сидели и работали одновременно десятки, а иногда и сотни, пользователей.
Как показывает практика: если вопрос можно решить купив новый сервер — проще купить новый сервер.
Программисты дорого стоят, а на доведение системы до продакшина может уйти просто неимоверное количество времени, поэтому у нас и дальше будет виртуализация и контейнеры. Пока эта вся конструкция не перестанет работать — никто не пошевелится
Контейнирезация достойное решение всех проблем описаных тут и логичная эволюция, а вот мультиаренда имеет несколько принципиальных проблем — бэкап довольно сложен и уязвим (и я сейчас говорю про бэкап и восстановление вместе как процедуру). Не уверен что можно сделать снапшот директории и так же выкатить ее обратно, особенно это коснется бинарных хранилищ типа файлов mysql.
Ну и конечно это плохо вертикально масштабируемая система — слабо себе представляю процесс при котором пользовательские директории и запущенные процессы можно будет бесшовно передавать между серверами для распределения нагрузки в кластере.
У вас был жесткий диск… Зависть.
У Вас были касеты… Зависть.
У Вас были перфокарты… Зависть.
Какие то странные расчеты… Если брать предложенный RPi с потребностями в 10 Вт, то стоит вспомнить, что сервер с двумя 18ядерными (еще и с HT) Xeon`ми и 512Гб RAM будет есть в пике 700Вт (Это если еще дисков штук 8-12 навесить) и стоит такая махина 17-18 т долларов. R pi 3 стоит $40, разница в 450 раз, но при этом все эти 450 экземпляров можно смело запустить в VM на предложенном сервере. Опустим здесь различие x86 и АРМ, так как итоговый перевес в производительности будет зависеть сильно от задач. В итоге потребление 450 Rpi будет 4.5 киловатт, против 700. И кто здесь говорит за выбросы углекислого газа?
Второй момент экологии — потребленные материалы для производства. суммарный вес 450 RPi3 — около 31 кг, предложенный x86 сервер — около 20 кг, при том, что значительную часть веса составляет добротный корпус, напрочь отсутствующий в базовой поставке Rpi.
Третий момент — надежность. Сервер априори отработает положенный срок (ведь $18k у нас еще и NextBusinessDay гарантия на три года и можно за $1k еще на два года купить), а сколько малинок передохнет за этот период? и сколько потратится ресурсов на их замену и убытки по простою?
Прочие детали типа портов опустим за скобки (в конце концов предложенная модель не подразумевает навешивать оборудование на несетевые порты)
Так что в общем итоге видна только зеленая истерика, ошибочные расчеты и крик "раньше было лучше".
Не нашёл сколько энергии жрёт SPARC 10, но 20-й потребляет 125 Вт (http://docs.oracle.com/cd/E19127-01/sparc20.ws/801-6189-12/801-6189-12.pdf). 125 ватт, Карл! На современном железе на 125-ти ваттах можно запустить сервисы для всего интернета того времени.
Ну и за экономику плюс. Прогресс не в сторону эфемерной "простоты" движется, а в сторону экономической эффективности. Жизнь слишком коротка, чтобы писать на ассемблере.
2) Автор в конце статьи уточнил, что речь идёт о фундаментальном эволюционном сдвиге, который претерпела unix/linux — негативном по его мнению. Да, автор сентимальным образом заглядывается в прошлое, что бы выразить свою позицию.
3) Конечно автор немного раздул и приукрасил, как это делают в Голливуде или современная журналистика. Однако лично я, поддерживаю такой подход, Здесь Вы прочитали не скучный, обоснованный с точки зрения автора рассказ.
Не все так просто, и для подобного перехода понадобится куда больше изменений.
Во-первых, часто на VDS-ке крутится не один сервис, а несколько. Хорошей практикой в таком случае является создание отдельных пользователей для каждого сервиса.
Если вместо VDS-ки выдавать пользователей на общем сервере — то пользователям понадобится механизм для создания суб-пользователей. Я еще не читал про системы, где такой механизм бы существовал.
Тут, например, инструкция установки ноды без спроса хостеров (не знаю, везде ли это получится).
Такое ощущение, что мода на VPS для сайтов-визиток — обычный маркетинг.
Меня смущает другое: на протяжении всей статьи автор упорно делает вид, что кроме VM ничего не используется, причём конкретно для php.
… вместе с которым стоимость шареда может начать превышать стоимость минимальной VPS. Упс.
А большинство предпочитают shared, т. к. в их случае сравнивать нужно с обслуживаемым VPS.
Да и вообще, выделенный IP зачастую можно включить и выключить одной галкой, в зависимости от важности/уровня паранойи на сегодня/на месяц:
Вы вложили денег в контекстную рекламу под НГ, ожидаете наплыва покупателей и тут банят кого-то из соседей
inb4 перепись экстрималов
Ну некоторым повезло с комендантом общежития и там царит полный порядок.
Очень много сайтов — визитки небольших фирм, причём не про ИТ. Если что случится — ну пару дней не придут через контекстную рекламу новые клиенты, но старые по телефону свяжутся. Далеко не у всех есть возможность поддерживать VPS, а так комендант накатывает обновления. Я уже молчу про бложики.
Статья же про сайты на вордпрессе, а не убийц фэйсбуков.
Сами же пишете про везение.
Что касается VPS и обслуживания, уже сейчас есть немало хостингов, предлагающих обслуживание типовых VPS за скромные 400-500 рублей в месяц (комендант по расписанию, и вне расписания со срочными апдейтами безопасности). Этот вариант даже лучше своего админа, потому что свой админ может и не сильно разбираться в LAMP инфраструктуре.
Итого 1000 рублей в месяц, чтобы не беспокоиться ни за что — я считаю адекватным предложением.
Выделенный IP
>Итого 1000 рублей в месяц, чтобы не беспокоиться ни за что
Я не говорю, что шаред нужен абсолютно всем. Но большинство людей не имеет гиковского интереса к «своему», хоть и виртуальному серверу. И для них это просто лишние расходы, как в развёртывании, так и поддержании. А на выходе — всё та же визитка. Так зачем это всё?
Лично я всегда деплою контейнеры с --net=host и никогда об этом не жалел.
Нет, разделение сети — это как раз проблема. На сервере-то можно порт любой прописать, тут вы правы. Но клиент будет ожидать увидеть стандартный порт для протокола, а не какой-то там еще.
Автор статьи упрощает проблему, которую решает виртуализация. Проблема не только в том, что бы запустить несколько серверов на хосте, а ещё и в том, что бы можно было этот хост ремонтировать/апгрейдить и что бы у пользователей ничего не менялось. Для этого нужен «продвинутый chroot», который сейчас практически сделали под вывеской контейнеров.
начнем с того, что все 3 из моих RPi 3 в режиме самого жесткого оверклокинга и под хорошей нагрузкой по амперметру потребляют не более 0,5А
напряжение питания, кто не знает — 5 вольт. закон ома знают все?
ну остальное высосано из того же пальца.
кстати — давно есть хостинги для апликейшенов. в облаках. сейчас народ пилит хостинги контейнеров.
но скажите, кому и нахрена в 2017 году нужен бложек на вордпрессе?
а то, что нужно бизнесу — и на тысяче армов не взлетит.
и да, 14 ядер xeon — это не монстр, а самый дешевый начальный вариант из последней линейки.
Но согласитесь, что и не каждому бизнесу нужен свой сайт уровня Фейсбук и гмейл.
но скажите, кому и нахрена в 2017 году нужен бложек на вордпрессе?
В 2017 году почти 30% сайтов работают на вордпрессе, почти 60% рынка (по баблу) заказной разработки сайтов — это вордпресс. Но да, можно продолжать мерить людей по себе и думать, что вордпресс не нужен.
Если это магазин, у которого в онлайне лишь «витрина», то ему важно а) доступность б) актуальность наличия и цен. И владельцу магазина будет абсолютно ровно на все наши гиковские технологии, до тех пор пока его удовлетворяет цена и его две основных хотелки.
бизнесу — даже самому вонючему магазину — нужна SQL база с как минимум одной репликацией, плюс NOSQL для кеша и временных данных, апликейшен сервер (все чаще идет отказ от пхп в торговых решениях, но pxp-fpm тоже можно считать как таковой), веб фронтэнд, бекенд REST API, мобильная аппка, система бекапов, мониторинг инфраструктуры.
даже при минимальном к-ве покупателей онлайн — это невозможно сделать не то что на одной пи-шке, а в пределах одного физического хоста, ибо в случае падения оного — магазин превращается в тыкву.
что до 30 или 60 процентов сайтов на вордпрессе — да не вопрос, такое имеет место. но если считать по количеству посетителей — на все эти хомяки и сайты визитки ходит доли процента юзеров.
Кстати почему не начали с Адама и Евы?
Мне по-прежнему нужны рутовые права, чтобы запустить контейнер.Ну вот почему, почему, скажите мне, никто не дочитывает гайд «Install Docker» до конца? Там же написано
sudo usermod -aG docker $USER
(то есть администратор разрешает юзерам запускать докер от своего аккаунта, точно так же, как разрешает им вообще логинится в систему). Так что не нужны ему рутовые права, пускай гайд дочитает.
Контейнер для запуска 10-мегабайтной программки может весить несколько гигабайт.
Автор наверно имел ввиду образ (image).
Не знаю, не знаю, мой образ с "тяжёлой" Java+Kotlin и всякими свистелками типа Jersey REST-сервлетов весит 102.2МБ (все слои). FROM openjdk:8-jre-alpine
.
Если он всё же имел ввиду потребление памяти контейнером, то и тут тоже не сходится — проверил, мой потребляет 236 МБ из docker stats
, из которых 150МБ — мой жава-сервер внутри, значит сам контейнер всего 86МБ.
Автор, похоже, что-то делает не так.
Конфиг nginx в папке пользователя — это попросту опасно. В конфигах-то можно разное по-написать...
Про интерфейсы вы не поняли. Автор писал про создание tun или tap-интерфейсов, на такой адрес вешать 100500 адресов алиасами нет смысла.
Позволю себе не согласиться: контейнеризация — отличная вещь, позволяющая добиться повторяемости результата и упрощающая горизонтальное масштабирование.
А дальше реалоад в крон на каждый 5 минут и вот 80 порт шарится на кучу виртуал хостов.
А что если кто-то намеренно сломает свой конфиг?
Правда я не задумывался насколько это всё вандалоустойчиво относительно виртуализации.
В том-то и дело что оно неустойчиво :)
Гораздо лучше контейнеризовать приложение и дать доступ к БД (если речь о Postrges или MySQL).
Рассмотрим оверхед на примере LXC:
- виртуальный сетевой интерфейс (можно отдать и железный, если есть желание)
- init
- sshd
- легковесное окружение
Это всё в совокупности занимает меньше 1ГБ места и жрет меньше 200М ОЗУ при длительной работе. Оверхед по CPU минимален.
Что мы получаем взамен?
- изоляция сети и процессов на уровне namespaces
- контроль ресурсов на уровне cgroups
- эквивалент chroot
- переносимость (можно один и тот же контейнер запустить на любом сервере, поддерживающем LXC)
Это всё реализуется и без контейнеров, но заворачивание этого всего в контейнер дает пользователю свою песочницу, почти эквивалентную VPS (нельзя грузить модули ядра и крутить sysctl, плюс ломается софт типа NFSd ввиду специфики работы с ядром).
Привилегированные порты — причина глобального потепления