Если вопрос к комментатору выше, про модуль split — то он просто задаёт соответствие входящим клиентам определённые значения, согласно желаемому распределению. Далее эти значения можно использовать как нужно.
Но Lua в дополнение к имеющимся методам nginx-a добавляет возможность обработать запрос методами языка программирования. Те же $uid_set или $uid_got и прочие значения можно проанализировать и изменить и куки сопоставить.
Чистого Nginx-а не достаточно, и о split модуле я писал в конце статьи. К тому же он реализует не такой случайный разброс как хотелось бы. А чтобы выставлять нужные куки нужным клиентам бэкенд нужно соответственно модифицировать. И настроить эту часть без участия бэкенда гораздо удобнее.
Варианты падений, роста нагрузки, тормозов бэкенда и тп можно обработать. Lua+Nginx в этом плане довольно интересны и позволяют всякое. В статье я привёл совсем уж простой вариант, но возможности есть.
Это как посмотреть и что натолкнуло Эйнштейна на физическую теорию, не попытка ли придать смысл математической модели? Особенно, если учесть, что появление математической модели было задолго до физической.
А что же в статье совсем не упомянуты Преобразования Лоренца? Они смешивают — в отличие от преобразований Галилея — пространственные координаты и время, потому и стали основой для формирования концепции единого пространства-времени.
Ну, судя по проведённому эксперименту в конце, то /proc/meminfo точно берёт в расчёт. Может не напрямую, а через системные утилиты, которые уже смотрят туда.
Покопался в вопросе и таки решил:
LXC информирует контейнер о доступных ресурсах с помощью LXCFS. Если для контейнера это работает из коробки, то для докера нужно в ручную задать перемонтирование соответствующих файлов из /var/lib/lxcfs/proc/ в /proc/, например:
# like docker-compose
mem_limit: 512m
volumes:
- /var/lib/lxcfs/proc/meminfo:/proc/meminfo
И ура:
# docker exec CT_name free -m
total used free shared buffers cached
Mem: 512 13 499 4322 0 0
Естественно, lxcfs нужно поставить в систему и, возможно, в ручную смонтировать:
# mount | grep lxcfs
lxcfs on /var/lib/lxcfs type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
У меня на сервере одновременно живёт и LXC и docker, потому лишних телодвижений делать не пришлось
Я не проверял последние докеры, но LXC версии 2.x, ограничения у которых тоже реализуется средствами cgroup, корректно определяют доступные ресурсы внутри контейнера:
# main
# free -m
total used free shared buffers cached
Mem: 32078 31807 271 2467 2165 21327
# container
# free -m
total used free shared buffers cached
Mem: 10240 5195 5044 2467 0 0
Спасибо, интересная штука. Только в статье вы зря привязывались к какому-то IDE, yapf прекрасно работает и в качестве консольной утилиты. Прогнал по своим винегрет-поделкам, доволен результатом.
Но Lua в дополнение к имеющимся методам nginx-a добавляет возможность обработать запрос методами языка программирования. Те же $uid_set или $uid_got и прочие значения можно проанализировать и изменить и куки сопоставить.
LXC информирует контейнер о доступных ресурсах с помощью LXCFS. Если для контейнера это работает из коробки, то для докера нужно в ручную задать перемонтирование соответствующих файлов из /var/lib/lxcfs/proc/ в /proc/, например:
И ура:
Естественно, lxcfs нужно поставить в систему и, возможно, в ручную смонтировать:
У меня на сервере одновременно живёт и LXC и docker, потому лишних телодвижений делать не пришлось
Debian
lxc 2.0.6-1~bpo8+1
kernel 4.9.13-1~bpo8+1
Посмотрите в сторону обновления докера и ядра.
GitHub
Может кому сгодится.