Vladimir
Хотите маленький кейс из боли админа high-load проекта? Я никогда ранее не админил тяжело нагруженные сервисы. Понятия "масштабирование" для меня было чем-то далёким. И вот я столкнулся лицом-к-лицу с проектом, который обслуживает огромное кол-во пользователей. Для понимания, php-fpm работает в режиме 250 активных процессов и простаивают из них одновременно не больше 40. Nginx проксирует на php по 150-200 запросов в секунду, а заказы в админке появляются по 2-3 штуки в минуту. И вот я встрял на проблеме сессий. Где их хранить? В базе? Так с таким кол-вом обращений база тупо ляжет, т.к. каждый запрос к php - это операция update для базы. Плюс, сессий, в среднем, на 6-10 ГБ выходит На файлах? Тоже отпадает, т.к. диски ложатся от постоянного поиска по файловой системе Остаются не реляционные базы ключ—значение. В web'е принято использовать для этого memcached или redis (любая уважающая себя CMS имеет эти 2 драйвера в своей коробке) Что сказать про memcached? Он классный, быстрый, но не стабильный. Он хранит все данные в оперативной памяти и никуда их не бэкапит. Упала служба? Перезапустили сервис? Прощайте все пользовательские сессии! (прощайте корзины анонимных пользователей). Ещё и memcached не умеет в распределение на ноды, срепликацией (с кастылями это можно сделать, но будет крайне не стабильно) Остаётся redis! Он точно так же хранит все оперативные данные в RAM, но, в отличии от memcached, данные можно реплицировать, а так же он имеет инструменты восстановления данных после падения. Redis представляет 2 варианта: дамп в файл или ведение журнала. Дамп в файл позволяет быстро перезагружаться, но, в случае падения, это приводит к потери части данных. Файлы журналов позволяют сохранять оперативные данные каждую секунду, но приводят к очень медленному перезапуску. Я настроил комбинированный вариант, когда раз в час база дампится в файл, а промежуток между дампами логгируется в журнал. Таким образом, максимальный промежуток потерянных данных может составлять ~1сек Жил проект так долго и здорово. Но сейчас клиент решил запустить новую маркетинговую кампанию, от чего всплески набегов покупателей стали колоссальными. От этого кол-во сессий выросло, пришлось докинуть редису ещё 2гб ОЗУ, но теперь столкнулся с тем, что раз в час на системный диск (мой косяк) дампится база в 10гигов и просто укладывает диск и процессор. А в моменты маркетинговых рассылокпики посещаимости иду такие, что журнал redis начинает дёргать диск и опять вешается процессор на iowait. Вернулись опять к тормозам 😢 Какой вывод? Не нужно упарываться в монолиты! Распределяйте сервера. Думайте о горизонтальном масштабированиии проекта, т.к. бесконечное подкидываение ресурсов в сервера перестают оказывать хоть какой-то эффект в геометрической прогрессии.
нахрен тебе апач?
Vladimir
это реально хороший
Igor
Разрешения не важно, главное чтоб монитор хороший был
Так это первое что смотреть. Тебе ретина нужна или нет. Для чего нужен какой отклик. Но брать в любом случае стоит LG
Дмитрий
Vladimir
Спасибо гляну
если не нужно именно 4к - можно взять 2к там будет частота обновления получше
Igor
https://4k-monitor.ru/catalog/lg/LG_27UN880-B/
Максимальная частота обновления (FPS, Гц): 60 Hz маловато будет. Вроде должны были уже 4к 144 выйти
Vladimir
частота обновления важная характеристика
Vladimir
кстати самсунги есть хорошие
Vladislav
https://fragstore.ru/devaysy-ili-geymerskaya-perefiriya/igrovye-myshi/logitech/logitech-g-pro-x-superlight-2-wireless-white/
Спасибо, если все таки сдам свою "прелесть", присмотрюсь именно к этой модели
Igor
Новые которые 2+к либо матрица фигня либо отклик слишком больше.
Дмитрий
Ключевое старенький
Поэтому и хочу менять
Igor
Поэтому и хочу менять
Я к тому что раньше самсунг был более конкуретно способный
Vladimir
Поэтому и хочу менять
тут вопрос что главное в мониторе
Vladimir
либо разрешение и тогда 60гц либо частота
Дмитрий
Vladimir
Комфорт для глаз
блин тогда разрешение плюс частота
Vladimir
есть такие
Vladimir
щас
Vladislav
она идеальна
Была бы она еще на мегамаркете, а то бонусов накопилось
Igor
Поэтому и хочу менять
https://www.dns-shop.ru/product/fa88d0eca62f3332/27-monitor-lg-ultragear-27gn880-b-cernyj/ У меня такой
Vladimir
Igor
Я не нашел
Она там может писаться не 2
Vladimir
Я не нашел
отличие от первой версии - usb. type c
Igor
отличие от первой версии - usb. type c
Вот тут кстати спорный момент. У меня например столько type-c нету =)
Igor
У меня же моник на одном на втором хаб.
Igor
зарядка
Ну так. Не вынимать же мой хаб для зарядок.
Vladimir
но ценник негуманный
Vladimir
это прямо новая модель
Дмитрий
404
Vladimir
404
https://market.yandex.ru/product--monitor-samsung-viewfinity-s90pc-s27c902pai/15546686?sku=102467133109&do-waremd5=kfI0etiyg6Tb8ITpar2CVA&uniqueId=889517
Vladimir
https://4k-monitor.ru/catalog/samsung/Samsung_ViewFinity_S9/
Дмитрий
Ну да... цена кусается
Vladimir
для них не бывает дешевле
Vladimir
но зато у тебя будет ретина
Vladimir
у меня вот этот https://4k-monitor.ru/catalog/lg/LG_UltraFine_5K_27MD5KL-B/
Vladimir
но он толком с виндой рабтать не будет
Vladimir
поэтому не советую
Vladimir
это чисто маковский
Artem
ну так это он прохлаждается, можно сказать. Все кто пришли - пришли за заказом. А вот когда по сайту шарится куча народу "мне только посмотреть" и тех кто в корзину кладёт и не покупает потом, вот тогда нагрузка становится веселее
Artem
Artem
это был впс с 4 ядрами
и ему, судя по sys avg явно плохонько. 4 ядра и avg минутный почти 20. Т.е. перегруз системы в 5 раз
Artem
при допустимых 1,5
Artem
К стати, из интересного, что я узнал swap на сервере нужен, но с хорошим таким списком "но"
Artem
а ещё есть коварный linux oom killer, с которым так же нужно дружить
Artem
при этом, в интернете пишут кучу предложений "запретите оом киллеру убить важные процессы" приводят только к ухудшению ситуации
Artem
вообще не слышал про него
когда сервак грузит на протяжении долгого времени, просыпается убийца процессов. Штука интересная, но очень мудрёная. С ней можно договориться, настраивая юниты systemd
Artem
Он по какому-то мега-конченому алгаритму (официально оно зовётся "эврестические алгоритмы") находит и убивает процессы
Vladimir
в твоем случае я бы избавился от апача
Vladimir
не знаю зачем он тебе там
Vladimir
или от nginx
Vladimir
но думаю nginx тебе нужен
Vladimir
проксирование на apache это самый медленный сценарий
Vladimir
ну и я бы на твоем месте всю статику вывел бы в отдельный сервак
Igor
Кстати а что это вообще за проект-то
Vladimir
семена
Vladimir
он давно на них
Artem
как определяется нагрузка?
В основном это связано с тем, когда какое-то приложение запрашивает выделить ему ещё сколько-то там памяти. той, которая RSS Тогда oom начинает смотреть, кому, когда и сколько памяти уже выделяли, как активно эту память использовало приложение, на сколько часто просит выделение памяти. Как часто обращается к диску. Как часто работа с памятью и работа с диском взаимосвязаны. Как работа с диском влияет на процессор. После этого раздаёт приложениям оценки. Дальше смотрит, когда systemd инициализирует этот процесс. Какие процессы зависят от выбранного процесса, от каких он сам зависит. На основании этого он добавляет какие-то коэффициенты к оценкам. Потом идёт смотреть конфиги systemd по юнитам. Оттуда он берёт корректирующие коээффициенты. Потом ряд полученных оценок сортирует и у кого больше всех - тот умирает. И так он повторяет, пока не аметит положительной динамики по объёму выделенной памяти в соотношении с физической
Vladimir
В основном это связано с тем, когда какое-то приложение запрашивает выделить ему ещё сколько-то там памяти. той, которая RSS Тогда oom начинает смотреть, кому, когда и сколько памяти уже выделяли, как активно эту память использовало приложение, на сколько часто просит выделение памяти. Как часто обращается к диску. Как часто работа с памятью и работа с диском взаимосвязаны. Как работа с диском влияет на процессор. После этого раздаёт приложениям оценки. Дальше смотрит, когда systemd инициализирует этот процесс. Какие процессы зависят от выбранного процесса, от каких он сам зависит. На основании этого он добавляет какие-то коэффициенты к оценкам. Потом идёт смотреть конфиги systemd по юнитам. Оттуда он берёт корректирующие коээффициенты. Потом ряд полученных оценок сортирует и у кого больше всех - тот умирает. И так он повторяет, пока не аметит положительной динамики по объёму выделенной памяти в соотношении с физической
кстати ты не рассматривал вариант arm?
Artem
В основном это связано с тем, когда какое-то приложение запрашивает выделить ему ещё сколько-то там памяти. той, которая RSS Тогда oom начинает смотреть, кому, когда и сколько памяти уже выделяли, как активно эту память использовало приложение, на сколько часто просит выделение памяти. Как часто обращается к диску. Как часто работа с памятью и работа с диском взаимосвязаны. Как работа с диском влияет на процессор. После этого раздаёт приложениям оценки. Дальше смотрит, когда systemd инициализирует этот процесс. Какие процессы зависят от выбранного процесса, от каких он сам зависит. На основании этого он добавляет какие-то коэффициенты к оценкам. Потом идёт смотреть конфиги systemd по юнитам. Оттуда он берёт корректирующие коээффициенты. Потом ряд полученных оценок сортирует и у кого больше всех - тот умирает. И так он повторяет, пока не аметит положительной динамики по объёму выделенной памяти в соотношении с физической
на хабре сталкивался со статьями, где у людей oom killer сначал убивал php-fpm, а потом sshd
Artem
Вот это получалось веселье! Просто неработающий кирпичик
Artem
методом изучения кучи статей, в том числе зарубежных (наши не очень любят делиться know how) я сделал вывод, что sshd нужно натроить так, чтобы oom killer'у бфло запрещено убивать его, он единственный мог вываливаться в swap и при высоком потреблении ресурсов сервера запрещались все сессии, кроме админа. Вот с последним пока нихера не понятно. Какие-то дике кастыли только попадались
Sergey
Pizza, Bugs & Fun 2024 24 февраля 2024 - первая сессия в этом году Joomla 5.1 сейчас находится в стадии альфа-версии. Многочисленные улучшения, внесённые исправления еще не протестированы и поэтому пока не могут быть объединены с ядром Joomla. Характер разработки ядра Joomla носит почти что корпоративный характер: каждое изменение или новая функция, которую автор хочет внести в ядро должны протестировать минимум 2 участника сообщества, кроме автора. Это нужно для того, чтобы получить новую стабильную версию вовремя, а значит Joomla иногда нужна ваша помощь. В большинстве случаев это занимает всего несколько минут вашего времени, а для Joomla! это неоценимый вклад. Вот уже несколько лет по всему миру проводятся так называемые мероприятия «Pizza, Bugs & Fun» (PBF), на которых каждый может научиться проводить подобные тесты. Совместно все открытые вопросы (pull requests на GitHub) рассматриваются, тестируются и вносятся предложения, дополняется и улучшается документация. В то же время спонсоры PBF следят за тем, чтобы вы не умерли от голода на работе 😎 Вы - носитель очень ценных знаний и опыта. Первая в этом году сессия #PBF пройдет 24 февраля 2024 года. Чаще всего участники локального сообщества (Joomla User Group) собираются вместе где-нибудь в кафешке, баре или даже у кого-нибудь дома и вместе делают множество полезных и нужных мелких и не очень дел, до которых нередко не доходят руки. Независимо от того, новичок вы или профессионал, дизайнер или разработчик, есть ли у вас бизнес или вы на зарплате - вы используете Joomla. И только интерес к Joomla имеет значение. Вы можете захостить свою оффлайн-локацию и вас добавят на карту события. Или же собраться в онлайне. Ссылки ниже помогут разобраться. Сайт события Сервера с предустановленными копиями Joomla для тестирования Список для тестирования в Google Docs Как это вообще всё делается? - Youtube Видео чат (интернациональный) #сообщество
Sergey
а JShopping работает?
Прекрасно работает, как и джумла. Еще тройку (и Joomshopping 4 можно было на mysql 8) запускать спокойно
Виталий
mysql8 не позволяет использовать в datetime '0000-00-00 00:00:00'
Vio
https://github.com/joomla/joomla-cms/pull/42710
Виталий
mysql8 не позволяет использовать в datetime '0000-00-00 00:00:00'
посмотрел драйвер подключения, там при каждом соединении изменяется строгий режим для текущей сессии