Задать вопрос
  • Оптимизация сайта под требования PageSpeed Insights. Как исправить долгий ответ сервера 650 ms?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Включите логирование запросов в базу и посмотрите, сколько их (и за какое время) выполняется при заходе на страницу и основных действиях - нажатиях на кнопки и т. д. Скорее всего, найдёте ваши 650 мсек именно там. Уменьшение количества обращений в базу и улучшение скорости её ответа - обычно первый кандидат на оптимизацию. Ну и кэширование, разумеется, да.
    Ответ написан
    1 комментарий
  • Запрос на обновление таблице?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В MySQL можно через REGEXP_SUBSTR.
    Но вообще, такой формат хранения создаёт кучу проблем. Переделывайте на нормальную таблицу (id_строки, id_языка, строка).
    Ответ написан
    1 комментарий
  • Как "православно" настроить Blue/Green deployment через terraform на aws?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    Фишка из 2015 года от сотрудника Hashicorp. Нужно создавать ASG c lifecycle-ом на каждую LC и разруливать переключение трафика на балансировщике.
    В Terraform можно делать вот так:
    resource "aws_launch_configuration" "myapp" {
      name_prefix = "myapp_"
    ...
    resource "aws_autoscaling_group" "myapp" {
      name = "myapp - ${aws_launch_configuration.myapp.name}"
      min_elb_capacity =  = "${var.myapp_asg_min_size}"
    ...
      lifecycle { create_before_destroy = true }

    Пока количество инстансов в статусе InService не достигнет min_elb_capacity, они не будут прицеплены к балансировщику. Затем уже сам балансировщик по хелсчекам у себя должен поменять статус новым инстансам как InService и начнёт пускать на них трафик, в этот же момент TF начнёт удалять старую ASG.
    Ответ написан
    Комментировать
  • Существует ли корреляция между языком программирования и интеллектом?

    uvelichitel
    @uvelichitel
    habrahabr.ru/users/uvelichitel
    Думаю можно оценивать сложность языка количеством использованных абстракций или толщиной мануала) Так среди естественных языков русский или японский принято считать сложными, а английский сравнительно простым. Что, впрочем, вовсе не свидетельствует об интеллектуальном превосходстве россиян над англосаксами.))
    Ответ написан
    2 комментария
  • Псевдографика в консоли Windows. Как это делается?

    Есть одна библиотека. gui.cs
    Ответ написан
    Комментировать
  • Как пишутся большие веб-сайты с тяжелым функционалом?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Читай блоги таких проектов, пример: https://m.habr.com/ru/company/avito/blog/339996/
    Ответ написан
    1 комментарий
  • Как защитить себя в чужой wi-fi сети?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Использовать VPN для шифрования трафика.
    Ответ написан
    1 комментарий
  • Docker не находит текстовый файл, в чем может быть проблема?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Очевидно, в контейнере нет такого файла. Попробуйте его туда положить.
    Ответ написан
    Комментировать
  • Есть ли готовое решение для отображения информации о датасете в удобном для чтения виде?

    @dmshar
    Не совсем понятно, что вы хотите.
    " для отображения информации" что-бы "вообще код не писать" - экспортируйте свой датасет в csv-файл и работайте хоть EXCEL, хоть Tableau (для визуализации), хоть в SPSS.
    Если у вас данные - это временные ряды, то можете попробовать Grafana.
    Описательные статистики выводятся в pandas (ага :-) ) одной командой data.describe().
    Только вот я бы не сказал, что построить ту-же гистограмму проще в EXCEL или в Grafana чем в Python. Даже в Tableau что-бы получить то, что вам надо - надо хорошо разобраться в инструменте.
    Ответ написан
    3 комментария
  • Есть ли простой способ передать задачу в Go?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Пример замыканий:
    package main
     
    import (
        "fmt"
        "math/rand"
        "time"
    )
     
    type kelvin float64
     
    func measureTemperature(samples int, sensor func() kelvin) { // measureTemperature принимает функцию в качестве второго параметра
        for i := 0; i < samples; i++ {
            k := sensor()
            fmt.Printf("%v° K\n", k)
            time.Sleep(time.Second)
        }
    }
     
    func fakeSensor() kelvin {
        return kelvin(rand.Intn(151) + 150)
    }
     
    func main() {
        measureTemperature(3, fakeSensor) // Передает название функции другой функции
    }

    Источник
    Ответ написан
    2 комментария
  • Какую файловую систему выбрать для жёсткого диска?

    opium
    @opium
    Просто люблю качественно работать
    Ext4 конечно если нужна надёжность и скорость
    Ответ написан
    Комментировать
  • Какую файловую систему выбрать для жёсткого диска?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Файловую систему выбирают не для того, чтобы круглосуточно читать большие файлы - с этим справляется любая современная система (ntfs, ext4, да даже ext3 норм).
    zfs берут если нужны дополнительные фичи - снепшоты и онлайн расширение за счет других устройств, если не хочешь в LVM
    А так - любые другие файловые системы накладывают свои дополнительные расходы на фичи, поэтому не всегда имеет смысл брать что-то модное, если не пользуешься функционалом.
    Ответ написан
    Комментировать
  • Является ли ruby вымирающим языком?

    DevMan
    @DevMan
    нет, не умирает.

    в совке хайп на него прошел – это факт.
    на западе – полно проектов на нем. и не только лишь легаси.
    Ответ написан
    Комментировать
  • Является ли ruby вымирающим языком?

    @AVKor
    Недавно вышла версия 3.0.0, предыдущая была 2.7.2. Странная смерть.
    Ответ написан
    1 комментарий
  • Какие сейчас есть варианты защиты от случайной/намеренной/аппаратной утраты данных?

    @vitaly_il1
    DevOps Consulting
    Посмотрите на https://www.duplicati.com/, он умеет сохранять на диск\NAS
    Ответ написан
    Комментировать
  • Что за утилита для просмотра процессов?

    hint000
    @hint000
    у админа три руки
    Ответ написан
    Комментировать
  • Redis Почему долго выборка?

    BuriK666
    @BuriK666
    Компьютерный псих
    Вы небось делаете кeys word_123_*?
    https://redis.io/commands/keys
    Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases. This command is intended for debugging and special operations, such as changing your keyspace layout.

    Используйте SCAN
    Ответ написан
    3 комментария
  • Зачем вообще использовать брокеры очередей?

    Очередь это буфер, куда задачи попадают с разной скоростью, а из него сливаются равномерно, по мере готовности «рабочих» их принять.

    В вопросе описана так-себе реализация с поллингом очереди. Различие без-очереди и с-очередью — в направлении инициативы:
    • без очередей «рабочий» опрашивает базу снова и снова: «есть чё?». Это как из браузера ajax'ом пинговать сервер раз в секунду в поиске сообщений. Работает, но такое себе..
    • с очередью инициатор процесса – брокер. Это брокер передаёт очередную задачу на исполнение первому освободившемуся «рабочему».

    spoiler
    Про потерю данных при падении — че-т страшилка, далёкая от продакшена. Драйвером очереди может быть и Redis (со своей персистентностью) и MySQL какой-нибудь, и другие. Имхо костыльно пихать в очередь всего лишь id записи в БД, которую надо обработать – чтобы рабочий, взявший задачу, заново собирал данные. Это не кошерно и калорийно.

    Лучше класть в очередь самодостаточную задачу. Например, сериализовать модель. Чтобы рабочий, получивший задачу, уже не обращался к базе – а только наполнял темплейт письма данными из полученной модели и отправлял послание. И в БД проставлял статус «отправлено»
    Ответ написан
    Комментировать
  • Зачем вообще использовать брокеры очередей?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В первую очередь брокеры нужны для балансировки нагрузки и увеличения надежности и скорости работы системы в целом.

    В вашем приведенном примере приведен способ уведомления клиента о каком-то событии. Например о том, что его заказ обработан, отправлен, доставлен и т.д. Событий может быть много и их источники могут быть различными.
    Например у вас может быть интеграция со сторонней системой логистики. А еще с 10 разными системами оплаты.
    Еще есть маркетинг, который тоже хочет отправлять массовые рассылки.
    Получается, что под каждый случай вам прийдется хранить информацию о письмах и статусах. Но даже проблема не в этом, проблема в том, что каждое событие имеет разный приоритет и разную ценность.

    В случае работы с сайтом у вас будет 1 воркер, который будет просто сканировать таблицы на поиск неуведомленных пользователей. Если у вас будет 2 воркера, надо делать систему блокировок и т.д. Т.е. мы упираемся в проблему масштабирования. Для решения задачи разной скорости уведомлений, вы построите систему приоритетов или будете делать разные таблицы с разными воркерами. Это все будет работать, но нагрузка на базу будет серьезной и она будет увеличиваться с ростом пользовательской базы. Опять вы упретесь в тормоза.
    Опять же есть письма, которые должны быть доставлены немедленно, вроде подтверждений аккаунта, смены пароля и т.д. Еще одна таблица? Дополнительный приоритет? Может так произойти, что вы некоторые пользователи вообще никогда не получат писем и уведомлений. Прийдется придумывать способ контроля.
    Я уж не говорю о куче кастомных воркеров под каждую ситуацию. И их будет с десяток, не меньше.

    Очереди решают, т.к. можно сделать их несколько и на для каждой настроить определенное количество абсолютно одинаковых воркеров. Пример с поллингом отвратителен и сейчас никто так не делает, а с очередями делают так.
    У вас может быть цепочка из нескольких воркеров, когда результат работы одного помещается в очередь.
    Например, когда надо сначала достать данные из нескольких разных медленных систем, отрендерить в шаблон, а потом отправить письмо. Сборка, рендеринг и отправка - три разные компонента, последние два из которых, можно активно переиспользовать для других целей изменяя лишь конфигурацию времени исполнения.
    При таком подходе проще развивать кодовую базу, исправлять ошибки, т.к. они изолированы в одном месте, а не разбросаны по всей системе. И да, косяк в "горячем" модуле вы заметите немедленно. А самое прикольное то, что ваш косяк, пользователи и не заметят, для них это будет выглядеть как простая задержка, а у вас будет время на то, чтобы исправить ошибку. Сообщения посидят в очереди и все.
    Но это еще не все, ваши воркеры могут быть написаны на разных языках программирования. Например пользователь может загружать фото на сайт на PHP, объекты распознаваться на Python, видео рендериться на Rust, а отправка писем может быть на Go. И такой подход может подойти для сложных систем с распределенными командами и различным уровнем компетенция в применяемых технологиях. Специалистов превосходно владеющих всеми приведенными технологиями просто единицы, и поверьте, они решают задачи совершенно другого уровня.
    Ответ написан
    Комментировать
  • Python для системного администратора, сколько?

    opium
    @opium
    Просто люблю качественно работать
    Так вы книгу то сперва прочитайте и сразу все вопросы сами по себе отпадут
    Ответ написан
    Комментировать