Задать вопрос
  • Как на самом деле работает параллелизм?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну, книги Вам уже посоветовал @firedragon
    Я же хочу вкратце ответить на этот замечательный вопрос.
    Давайте разберемся с одним CPU без потоков...
    Когда процессоры были большими, а люди... В общем, на заре компухтеров был только один поток, и чтобы получить многозадачность, придумали ОС с вытеснением задач.
    Смысл в том, что когда завершается "программа", то запускается следующая в очереди (очередь с приоритетом). Задача работает до тех пор, пока не завершится.

    Так как задача иногда могла работать очень долго, и ничего не делать во время операций ввода-вывода то придумали прерывания, чтобы ввод-вывод сигнализировал о проделанной операции (окончании печати например, или нажатии клавиш). Тогда появились операционные системы с вытеснением задач по прерыванию. Здравствуйте мейнфреймы!

    Но прерывания на ввод-вывод иногда можно ждать долго, и не дождаться. Но умные дяди придумали геренировать прерывания сами себе, от таймера. Да, в молодости это просто кварц и конденсатор, на ножку процессора. И вот, появились ОС с реальной многозадачностью, где система получает управление через сторого определенные промежутки времени - тики или клоки.

    Итого, все современные ОС реализуют механизм переключения на основе системного таймера, который раз в несколько милисекунд запускает подпрограмму, заглядывающую в очередь задач и переключающий одну на другую. И да, прерывания от внешних устройств также работают.

    Ах, да, молодость процессоров - одно прерывание на все сразу :) И крутись, как хочешь :)
    Ответ написан
    1 комментарий
  • Как на самом деле работает параллелизм?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Хм тут вам помогут книги
    Эндрю Таненбаум
    Торвальдса
    Русиновича
    Helen Custer , David N Cutler
    David A. Solomon
    https://slideplayer.com/slide/6865915/

    Гляньте вот на эту презентацию https://www.hse.ru/data/2010/12/24/1223886397/%D0%...

    А вот тут прикладная часть
    https://basis.gnulinux.pro/ru/latest/basis/15/15._...

    В общем тема большая и гуглить вам много, но основных авторов я дал
    Ответ написан
    1 комментарий
  • Как лучше организовать очередь сообщений для их разбора по графику?

    @66demon666
    Сетевой админ, АТС-админ
    Выглядит как попытка сделать костыль, не в ту сторону смотрите
    Ответ написан
    1 комментарий
  • Как лучше организовать очередь сообщений для их разбора по графику?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Вроде как, такое кол-во запросов вполне по силам современным реактивным серверам. Для тех кто знает Java, пара полезных лекций по реактивщине: раз, два. К сожалению, не нашёл видео с замерами производительности.
    Вопрос можно ли обрабатывать запросы по мере их поступления это не вопрос производительности web-сервера, это вопрос как долго ты будет готовить данные для ответа. Если там нет долгих вычислений или запросов к другим сервисам - обрабатывай в реальном времени.
    Если есть - используй очередь. Какую именно - вопрос о количестве данных. Если одновременно обрабатываемые данные не помещаются в память - используй Kafka, Rabbit и т.п. Если помещаются - организуй FIFO буфер в памяти, коллекция Queue есть во всех нормальных языках (ну, или её можно сделать на основе связного списка).
    Присоединюсь к предыдущим ораторам: надо разбираться с дублями. Ты говоришь что для снижения нагрузки можно отвечать не на все запросы, а только на последний в серии. А как определить что только что прилетевший запрос - последний?
    На чём писать - на том что знаешь. А если не получится - искать программиста на Java :)
    Ответ написан
    Комментировать
  • Как сделать чат-бот на основе ИИ, обученный на собственной базе знаний?

    @vitaly_il1
    DevOps Consulting
    Согласен с Максимом - заставить это заработать в принципе несложно. Нюансы могут быть при тонкой настройке.
    Я не спец в AI, а DevOps. Но недавно заказчик попросил поднять приватный "ChatGPT" с его страшно секретными документами. Я использовал клон https://github.com/imartinez/privateGPT. Работает в целом.

    Что искать в гугле для загрузки доеументов в chatgpt - например "chatgpt my documents" .
    Ответ написан
    Комментировать
  • Есть ли библиотеки Python для перевода английских слов в простой вид?

    Vindicar
    @Vindicar
    RTFM!
    Это называется стемминг (выделение корня) или лемматизация (группировка родственных слов).
    Гугл говорит, что для этих целей часто используется сеть NLTK.
    Ответ написан
    Комментировать
  • Проводник копирует данные последовательно?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Проводник использует системные вызовы ОС.
    Вы можете их посмотреть, там нет секторов и прочего.
    Есть просто пути, за всем этим следит файловая система.
    Что же до дефрагментации читайте тут
    https://learn.microsoft.com/en-us/windows/win32/fi...
    Ответ написан
    Комментировать
  • В чём разница между операторами ??, ??= и ?. в C#?

    BloodyAstra
    @BloodyAstra
    https://metanit.com/sharp/tutorial/3.26.php Вот тут все подробно про это написано
    Ответ написан
    Комментировать
  • Какую ОС выбрать для NextCloud?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Ответ написан
    Комментировать
  • Почему не работает фильтр из двух слов?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    term - поиск по одному терму, terms - поиск по множеству термов,
    {
      "query": {
        "terms": {
          "user.id": [ "kimchy", "elkbee" ],
          "boost": 1.0
        }
      }
    }

    https://www.elastic.co/guide/en/elasticsearch/refe...
    Ответ написан
    Комментировать
  • С каким интервалом времени установить команды на cron?

    Можно использовать flock (lock-файл) для синхронизации процессов и не позволять определенным работать параллельно
    https://simpleit.rocks/linux/shell/prevent-running...

    P.S. Как рекомендовали в комментариях, правильнее работать с очередями задач, а не через крон. Если в проекте нет RabbitMQ / NATS и т.п., наиболее легковесным вариантом будет Redis
    Ответ написан
    Комментировать
  • С каким интервалом времени установить команды на cron?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    И если процедура будет активна, но запустится другая команда, то она просто скипнет свою очередь и не выполнится.

    Тогда через крон пускать нельзя, нужен менеджер очереди.
    Ответ написан
    Комментировать
  • Какую базу данных использовать для такого проекта?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут подходит любая реляционная SQL БД потому что нет противопоказаний. Реляционку мы выбираем
    уже более 30 лет как default вариант и почти не ошибаемся.

    Когда задача имеет признаки ярко выраженной high-load системы - мы делаем ей частичную денормализацию
    и раскладываем ее в NoSQL Key-Value решение. Но это не про улучшение а это про неизбежность. У нас нет выхода просто.
    Иначе мы клиенту не сможем быстро отдать какой-то резуальтат.

    Когда задача имеет ярко выраженную документную природу (нет спецификации на values) - мы берем MongoDb/CouchDb.

    Когда задача хранит граф и ищет в графе и вообще требует графовых алгоритмов - то мы берем Neo4j или ей подобные.

    Когда задача хранит данные измерений (телеметрия) - то предпочтительно взять InfluxDb или ей подобные. Здесь-же мы предполагаем что у нас - не будет joins а будет только измерения в диапазоне времени.

    Но в данном ТЗ и на картинке обычная SQL БД (MySQL/Postgres) вполне себе нормально справляется.
    Ответ написан
    Комментировать
  • Можно ли сделать так, чтобы когда электричество дешёвое, сервер работал на максимум?

    borisdenis
    @borisdenis
    Ленив и вреден...
    Планировщик задач, который по времени переключает режимы энергосбережения.
    https://learn.microsoft.com/en-us/windows-hardware...
    Ответ написан
    Комментировать
  • Как быстро отправить 1 миллион запросов на внешний API?

    @falconandy
    Навскидку придумался какой-то такой алгоритм, возможно некорректный:
    0. преполагается видимо, что константная точка неизвестна, а сервис возвращает расстояние от неё до переданной точки
    1. берете две произвольные (но разные) точки P1, P2 из своего миллиона и отправляете два запроса, получая два расстояния R1, R2
    2. неизвестная константная точка находится в точках пересечения двух окружностей с центрами P1, P2 и радиусами R1, R2
    3. по идее таких пересечений будет два, возможно одно, если повезет
    4. если одно, то оно и будет той самой неизвестной константной точкой
    5. если два, то отправляете каждую на сервис и проверяете, до какой расстояние будет нулевое - это и будет та самая неизвестная константная точка
    6. локально находите ближайшую к теперь уже известной константной точке из своего миллиона

    В результате, максимум 4 запроса к сервису.
    Не забываем про погрешности при работе с числами.
    Ответ написан
    7 комментариев
  • Какую SQL базу данных под Linux лучше использовать с FTP через FUSE?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Никакую базу, имхо, не нужно использовать с "FTP через FUSE".
    Ответ написан
    4 комментария
  • Равноценно ли использование MariaDB вместе MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    MariaDB несколько отошла от MySQL с момента создания форка.
    https://mariadb.com/kb/en/mariadb-vs-mysql-features/
    Ответ написан
    Комментировать
  • Какие есть примеры построения большой организационной структуры?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ох и амбиции. И что за перфекционизм в отношении Postgresql?

    Не знаю как автор посчитал миллиард. Это если все население планеты Земля составляет порядка 8 млрд.
    И что мы возьмем целую страну и инвентаризируем ее чтоб получить такое число?

    Для графовых БД существует не Postgresql а специальные БД типа Neo4j. Но еще до того как ты доберешся
    до графовых БД - задание может многократно измениться и выйдет что граф - рудимент. Так часто бывало.
    Вообще очень малое число задач требуют именно графов. Если табличка отражает семантику модели
    то можно и ее использовать. Только с условием не решать в ней задачи о рукопожатиях.

    По поводу того что в таблице что-то там кого-то убивает на 1 млрд. Я отвечу так что если вы строите OLTP
    систему то в ней этот миллиард никогда не будет использоваться целиком. Там будут горячие области.
    Их можно каким-то образом кешировать или алгоритмически пред-выбирать. Или брать key-value системы если ТЗ позволяет. Для них что миллиард что триллион все безразлично. Не забывайте только поднимать новые ноды и подкидывать диски в облачко. Или если речь идет
    о BigData к примеру то там есть свой техно-стек. Например Apache Spark / GraphX. Хотя я с модулем GraphX
    не работал ни разу. Но биг-дата запросы обычно никогда не запрашивают одного физ-лица или одну
    единицу тех-средства. Биг дате ставят задачу собрать всё про всех и отгрузить отчет в виде другой таблички
    или DataMart. И на это ей дадут пару часиков а то и день. Поэтому разговоры относительно убивания
    производительности - очень можно смягчить.

    Вообще такие сложные системы не обязаны строиться поверх Postgres или Neo или Spark. В их разработке
    вполне можно использовать целый pipeline из технологий где например Postgres будет просто одним
    из элементов. Или одним stage.
    Ответ написан
    3 комментария
  • Как защитить свое api от ddos-атак?

    @rPman
    Хочу напомнить - ddos это не только про сетевые атаки, а любые атаки, направленные на нарушение работы приложения,.. т.е. если злоумышленник найдет как заставить твоих операторов обрабатывать тысячи и миллионы заявок, которые никакой пользы не принесут (с них не будет получен доход) - то это тоже 'атака на отказ обслуживания', ведь операторы будут заняты фейковой работой вместо обслуживанием нормальных клиентов.

    Готовых решений ты и не найдешь, кроме как от ограниченного типа атак (сетевых) и тут самому лучше не заморачиваться, а воспользоваться сервисом провайдера.

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

    p.s. типовые направления атак ddos используют анонимные каналы, т.е. любые команды от анонимного пользователя, которые нельзя сгруппировать по их иннициатору (да хоть по ip адресу) - первые на проверку возможности для использования, вот их и проверяй, как можно раньше в бизнеспроцессах вводи авторизацию (пусть и прозрачную), лимитируй пользователей во всем на разумные количества действий (обычный человек не будет создавать сотню заявок на покупку унитазов, как минимум он создаст одну с пометкой количества).

    p.p.s. ограничивая пользователей, всегда предлагай им действия, которые позволят этот лимит убрать, чтобы ошибочно наказанные пользователи не сидели перед экраном - 'вы забанены, идите на..й'
    Ответ написан
    Комментировать