Задать вопрос
  • Зачем использовать nginx для статичных файлов?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Попробуйте нодой отдавать статику потоков в сто и посмотрите, как оно сожрёт всё вокруг - память, процессор, диски...
    Ответ написан
    1 комментарий
  • Зачем использовать nginx для статичных файлов?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Пришел момент задеплоить простенький учебный проект и начал гуглить как это сделать.

    Для учебного проекта вполне хватит реализации без Nginx (если это не обязательное требование), покажите Node.js проект преподу, получите оценку и забудете. А вот для реально рабочего проекта Nginx предлагает следующие преимущества:
    1. Обратный прокси с мощным функционалом из коробки.
    2. Быстрое кэширование, балансировка нагрузки и удобное масштабирование.
    3. Nginx быстрее и стабильнее, чем Node.js для статических файлов, что позволяет сильно оптимизировать расходы на серверную инфраструктуру.
    4. Огромное сообщество и множество мануалов для настройки, с множеством различных кейсов, под каждую, даже самую дикую задачу.

    Node.js можно заменить, например на Python или PHP - настройка Nginx практически не изменится. Затем сделать из Node.js, Python и PHP - 3 отдельный приложения, "связать одним Nginx" и... настройка Nginx практически не изменится.

    Рекомендую изучить - Why should I use a Reverse Proxy if Node.js is Pro...

    Benchmark:
    1*q0NSQmkY_-dQ_EbeJu5Rlw.png
    Ответ написан
    1 комментарий
  • Как расчитывать размеры кэшей и буферов в nginx?

    @d-stream
    Готовые решения - не подаю, но...
    У nginx достаточно вылизанные дефолты. Поэтому можно начать с них (ну или что есть "сейчас"). Повесить какой-либо мониторинг и аккуратно менять параметры по одному или группами связанных, исходя из своих гипотез или инет-рекомендаций. Процесс небыстрый, но тщательный и позволит выжать максимум из существующих условий. Притом документальный - т.е. "вот такое изменение параметра даёт вот такой результат, что подкрепляется показаниями мониторинга".
    Ответ написан
    Комментировать
  • Context switch per second (Linux) 1.3млн это много или мало?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Нужно понимать как работает многозадачность и распределение процессорного времени по ядрам.
    В Линукс довольно сложно посчитать реальную занятость процессора.
    В сам свитчинг ничего упираться не может, точнее нет каких-то специальных лимитов. Это обычная процессорная занятость, относящаяся наверное к system cpu usage, но это неточно. Чем быстрее процессор, тем быстрее он может выполнять свитчинг и тем больше свитчингов в секунду может быть выполнено, это просто выполнение инструкций процессора вне рамках процессов, а внутри ядра системы, точнее process scheduler.

    Но проблема в том, как именно распределяется процессорное время. process scheduler в ядре линукса выделяет слайсы примерно по 10-15 милисекунд на процесс, потом переключает на другой. Для процессов, которые что-то активно вычисляют (например архивация), после анализа деятельности может быть выделен более длинный слайс или несколько подряд, то есть уменьшается свитчинг. При этом оценка времени, которая нужна на сам свитчинг - она довольно сложная, ведь для подсчета количество потраченного cpu нужно потратить cpu, и эти 10-15% может на самом деле не существовать.

    Если парралельных процессов очень много и все хотят что-то делать (чекнуть load average), то машина просто не успевает обработать их все, и тратить на переключение приличное количество ресурса, вместо того чтобы непосредственно выполнять код ваших программ.
    Таким образом какого-то определенного лимита на context switching нет, это просто еще одна метрика, которая может подсказать что слишком много одновременно запускаете, можно попробовать оптимизировать.

    Ну или просто не хватает CPU, а система ошибочно показывает свободные ресурсы, которых на самом деле нет.

    Линукс на самом деле не так уж детально может посчитать точное количество ресурсов. Там выполняется все очень просто - на входе в контекст засекается timestamp, на выходе из контекста засекается таймстамп, и потраченное время дописывается в метаданные процесса (для каждого ядра, если процесс многопоточный). Исторические значения не записываются, в метаданных процесса есть только вот это - сколько всего cpu usage с момента старта процесса.
    Если запустить какой-нить top, он будет каждые 1-2 секунды бегать по списку процессов, сравнивать этот параметр и показывать результат загруженности за последние 1-2 секунды, но вот уточнить процесс занял свои 25% cpu плавно в течение секунды, или он занимал 100% cpu первую четверть секунды или третью - вы уже не сможете.

    Ну и само ядро считает свои внутренние потоки так же само.
    И только активность самого process scheduler (то есть cpu затраченное на анализ и переключения процессов) не может быть красиво подсчитана.

    p.s. я не разработчик линукс, поэтому это мое IMHO основанное на наблюдениях и обзорных статьях о работе современного планировщика, если будут гуру которые меня поправят или подтвердят сказанное - будет круто.
    Ответ написан
    Комментировать
  • В чём состоит отличие между CG-NAT и обычным NAT?

    vvpoloskin
    @vvpoloskin Куратор тега Компьютерные сети
    Инженер связи
    Терминология больше маркетинговая. Куча вендоров оборудования стали заявлять для своих железок «операторский уровень NATа», а что это такое каждый понимал по своему. Инженеры собрали лучшие практики, которые используют операторы. Там много чего входит:
    • Улучшенные схемы распределения портов, переиспользования после завершения трансляции
    • Лимитирование сессий по времени/абоненту/назначению (а вендор ещё делают в том числе по запросу с радиус-сервера)
    • Расширенное логирование и аккаунтинг всех сессий
    Ответ написан
    Комментировать
  • В чём состоит отличие между CG-NAT и обычным NAT?

    Loiqig
    @Loiqig
    инженер по сетям корпоративной сети
    Это и есть обычный NAT/NAPT просто заточенный на большое количество трансляций и максимальную утилизацию выделенных пулов адресов и портов. Существует BCP127 он же RFC6888 где описаны рекомендации и требования к построению NAT на больших объёмах. Предполагается что надо максимально снизить время жизни сессии, но не больше чем надо и позволить операторам крутить другие важные штуки, в частности ограничение по трансляциям, выделение блоков портов за раз, лимитирование использование памяти. Ничего принципаильно отличающегося от "обычного" NAT в нём нет.

    Ещё под это дело выделили целый 100.64.0.0/10 префикс, чтобы делать двойные трансляции и не пресекаться с другими провайдерами, если необходимо будет запириться напрямую, опять же чтобы не использовать публичные адреса.

    Провайдеры не часто используют терминологию Symmetric, Cone/Full Cone, Address-Re.... CgNAT как и просто NAT будет Symmetric или Address-Restricted или Port-Restricted, в разных реализациях по разному. Возможность установить соединение на адрес NAT - не самое главное в NAТ для провайдеров ;), провайдеры для этого белые IP продают.
    Ответ написан
    Комментировать
  • В чём состоит отличие между CG-NAT и обычным NAT?

    mikes
    @mikes
    CG-NAT это не тип трансляции, это область применения. Грубо говоря - это nat применяемый провайдером.
    Ответ написан
    Комментировать
  • Какая разница в логах между контейном и сервисом?

    @Tiasar
    Web Developer
    В сервисе (он доступен только в режиме кластера SWARM) может крутиться несколько контейнеров, допустим у Вас кластер на 3-х машинах, и сервисом описывается что должно быть по контейнеру на каждом узле (deploy: mode: global)
    Соответственно команда отображения логов для сервиса выдаст в одном выводе все логи со всех 3-х контейнеров, отсортированных по времени...
    Ответ написан
    Комментировать
  • Как имитировать ЦОД?

    meDveD_spb
    @meDveD_spb
    имитировать их нахождение в разных ЦОДах.

    что нужно от имитации?

    1. можно в Proxmox создать виртуальную подсеть (https://pve.proxmox.com/pve-docs/chapter-pvesdn.html)
    нужные ВМ на нее повесить
    +/или можно поднять машину внутри PVE с openvpn server (openvpn access server), и нужные виртуалки уже внутри ВМ подсоединить их к этому ВПН.

    2. Поднять vps на нужном ЦОДе и подключить нужные ВМ (внутри ВМ)

    3. подключить весь Proxmox к VPN, часть ВМ пускать через него (не знаю, реализуемо)
    Ответ написан
    Комментировать
  • Как имитировать ЦОД?

    Viji
    @Viji
    DevOps Engineer
    использовать непохожие подсети для каждой и имена машин. Например maschine-1 machine-2 и auto-1 auto-2
    и второй ответ
    Ответ написан
    Комментировать
  • Как имитировать ЦОД?

    @pfg21
    ex-турист
    добавить задержки и нарушения работы сети netem tc ??
    Ответ написан
    1 комментарий
  • Как определить источник обращение к БД?

    Melkij
    @Melkij
    PostgreSQL DBA
    Используйте более подробный log_line_prefix. В частности, нужен %h

    log_line_prefix = '%m %p %u@%d from %h [vxid:%v txid:%x] [%i] '

    Мы такой используем если нет значимых причин для иного.
    Ответ написан
    1 комментарий
  • Как реализовать удаление файлов до достижения определённого количества свободного места?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Почему именно питон, когда для таких задач как раз подходит баш, или вообще find?

    Почему нужно удалять когда заканчивается места, а не настроить изначально ротейт файлов, которые растут - именно так делается в нормальных случаях
    Ответ написан
    Комментировать
  • Как реализовать удаление файлов до достижения определённого количества свободного места?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Очень просто - читайте вывод команды du с ключом -s
    А уже потом принимайте решение, что и как удалять.
    leah@leah-pc ~> du -s /var/www/media
    131268256	/var/www/media
    leah@leah-pc ~>

    Можно конечно и на питоне пройтись по всем подкаталогам и считать размеры всех файлов. Но зачем, если уже есть утилита.
    import subprocess
    proc = subprocess.run(["du","-s","/var/www/media"], stdout=subprocess.PIPE)
    folder_size = int(proc.stdout.decode('utf-8').split('\t')[0])


    Ну и удалять можно командой rm
    Ответ написан
    Комментировать
  • Чем отличаются друг от друга консоль и терминал?

    DevMan
    @DevMan
    если не пускаться в историю, отвечать в контексте вопроса и упрощённо:
    консоль - командная строка.
    терминал - программа, предоставляющая доступ к командной строке.
    Ответ написан
    Комментировать
  • Какое максимальное количество операций в бинарном поиске?

    @Mercury13
    Программист на «си с крестами» и не только
    ceil(log2(n + 1))

    Поскольку ответов на каждый конкретный вопрос возможны три штуки (больше/меньше/угадал), тупая оценка количеством битов невозможна, надо учитывать зависимости между этими ответами.

    Доказательство.
    Докажем обратное: за k шагов можно угадать 2k−1 чисел.

    БАЗА. 1 угадывается с первого раза. 2 с первого раза уже не угадаешь.

    ШАГ. k → k+1. Другими словами, нам известно, что 2k−1 угадать можно, а 2k уже нельзя.
    Берём центральное, и остаётся 2k−1 слева и 2k−1 справа. → n = 2·(2k−1)+1 = 2k+1−1
    Если n = 2k+1 или больше, хоть в одной половинке будет 2k, что, по предположению индукции, невозможно.
    Ответ написан
    4 комментария
  • В чём недостатки bind mount?

    @pfg21
    ex-турист
    повышение сложности структуры каталогов.
    плюс ты с большой вероятностью через некоторое время забудешь что к чему прикручивал. и при миграции придется обратно вспоминать что куда приткнул. к примеру, машину переместил, а данные забыл. и ничего не работает и все срочно. и тут извилины начинают кипеть :)
    в скрипте бекапа возможно придется учесть структуру данных. хотя хороший бекап должен отдельно бекапить данные и программы.
    Ответ написан
    Комментировать
  • В чём недостатки bind mount?

    Зависит от способов применения. Если хранилище локальное - bind удобнее в плане эксплуатации, бекапов.
    Volume же позволяет использовать различные драйверы, в т.ч. для подключения к удалённым хранилища. Это может позволить хранить все volume централизованного, однако docker не предоставляет никаких встроенных способов по бекапу volume - это придётся решать на стороне хранилища.
    Ответ написан
    Комментировать
  • Почему #define не рекомендуетс к использованию?

    BacCM
    @BacCM
    C++ почти с рождения
    Потому, что
    1. нет контроля типов
    2. нет ограничения по области видимости, типа неймспейсов.
    3. макрос разворачивается подстановкой в месте использования, т.е. там будет вставлен код
    ((a) > (b) ? (a) : (b)) который превратится в ((++a) > (b+10) ? (++a) : (b+10))
    4. макросы сложно отлаживать
    5. неправильно написанный макрос будет компилироваться в непонятно что. Например если убрать те же скобки

    как без них раскроется выражение x = max(a, b) + 10; ?
    x = a > b ? a : b+10;

    для max скорее всего параметры не имеет смысла оборачивать в скобки, достаточно общих, хотя наверное можно что-то придумать чтобы сломалось без них. Просто так принято, из за того что макросы могут оказаться внутри выражения и как там раскроются их нетривиальные параметры не понятно.
    например

    #include <iostream>
    
    #define mymax(a,b) a>b?a:b
    #define mul(a,b) a*b
    
    int main() 
    {
    
    	std::cout << mymax(5, 10) << std::endl; // Ошибка компиляции
    	std::cout << mul(5+5, 10) << std::endl; // Неожиданно на выходе 55, а не 100
    
    	return 0;
    }
    Ответ написан
    3 комментария
  • Как перевести трафик с одного ASBR на другой?

    @KhoreffMikhail
    CCNP
    А как полностью звучит вопрос?
    Проектная работа по замене старого ASBR на новый? А допустим ли дайнтайм? Есть ли резервный линк в интернет?
    Или у нас два ASBR, нужно накрутить политики и правила, что б трафик шел не через первый, а через второй? Тогда BGP-шные атрибуты local-preference и другие.
    Ответ написан
    Комментировать