<html><body><span style="display:block;" class="xfm_82237771"><div><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1">Привет,</span><br/></div>
<div><br/></div>
<div><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1">Постановка задачи требует уточнений. Надо понимать: <br data-mce-bogus="1"/></span></div>
<ol style="margin:5px 0;" start="1"><li><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1">на каждый UDP пакет надо принимать решение, основываясь на критериях из кэша/апдейтов_в_пуше ? что это ?<br data-mce-bogus="1"/></span></li>
<li><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1">какой поток UDP пакетов/с, размеры, надо как-то парсить? большие ? </span><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1"></span></li>
</ol><div><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1">Например сразу будь готов к написанию еще с порога системы контроля версии датасета в базе и у тебя в кэше, потому что вот эти "усилители класса А без обратной связи" - часто жертвы самоуверенности (рейс про@бали, дата не так проинтерпретировалась и т.п.) и в базе одно, а делаем другое<br data-mce-bogus="1"/></span></div>
<div><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1"><br data-mce-bogus="1"/></span></div>
<div><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1">Пока что сходу решение -  С++/Асинхрон/воркеры, типичный пример тут - nginx. </span></div>
<div><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1"><br data-mce-bogus="1"/></span></div>
<div><span style="font-size:12pt;line-height:14pt;font-family:Arial;" class="xfmc1">Да, и inram cache - это тоже штука в себе.</span><br data-mce-bogus="1"/></div>
<div><br data-mce-bogus="1"/></div>
<div><i><span style="font-size:10pt;line-height:12pt;"><span style="font-family:Arial;">12 січня 2021, 18:55:22, від "Volodymyr Litovka" <</span><a href="mailto:doka@xlit.one" target="_blank"><span style="font-family:Arial;">doka@xlit.one</span></a><span style="font-family:Arial;">>:</span></span></i></div>
<div><br/></div>
<blockquote style="border-left:1px solid #cccccc;margin:0px 0px 0px 0.8ex;padding-left:1ex;">
<div style="display:block;">
<div>Привет,</div>
<div>а как правильно подойти к следующей задаче?</div>
<div>Есть приложение (e.g. MyApp), которое обрабатывает данные из
      нескольких источников:</div>
<pre style="margin:5px 0;">            +-----------+
            |  REST API |
            +--+-----+--+
               |     |
    PUSH (TCP) |     | GET (HTTP)
               |     |
               v     v
           +---+-----+---+
   UDP     |             |   Output
 --------->+   MyApp     +----------->
           |             |
           +-------------+

</pre>
<div>Поток UDP довольно мощный и является источником RAW data. Для
      обработки этих данных нужна дополнительная информация, хранящяяся
      в SQL - она доступа по REST API, а обновления - по TCP PUSH NFYs</div>
<div>Для снижения нагрузки на REST и увеличения собственного
      быстродействия, при старте MyApp наполняет in-ram cache,
      запрашивая стартовые данные из REST API и больше никогда к нему не
      обращаясь, а обновления приходят по TCP (PUSH NFYs)</div>
<div>Таким образом, в процессе работы приложения всегда есть два
      параллельных процесса, один из которых довольно ёмкий либо по
      времени, либо по ресурсам -</div>
<div>1) старт - приложение долго тянет базу из REST API, реагируя при
      этом на периодические TCP PUSH NFYs (тут можно разбить вытягивание
      большого объема данных на более мелкие чанки)<br/>
      2) основной цикл работы - приложение слушает очень интенсивный
      поток UDP (я бы сказал, что делает это без пауз на передохнуть),
      реагируя при этом на периодические TCP PUSH NFYs</div>
<div>Пока что это пишется на Питоне, что вносит определенные
      ограничения в набор механизмов. Три варианта, какие я вижу:</div>
<ul style="margin:5px 0;"><li>multiprocess - три отдельных приложения
<ul style="margin:5px 0;"><li>тут более-менее понятно - система сама будет распределять
          CPU resources между приложениями по требованию + внешняя
          синхронизация</li>
<li>но выглядит оно эскадрой пушечных парусников из книжки по
          истории ;-)</li>
</ul></li>
<li>multithreading - три треда в одном приложении, это уже более
        "модно и молодежно" (хотя задача синхронизации событий
        остается), но:
<ul style="margin:5px 0;"><li>гарантируется ли своевременная передача исполнения треду с
          TCP listener upon packet arrival в услових интенсивной работы
          треда, обслуживающего UDP?</li>
<li>я читал/слышал, что у Питона сложная история отношений с
          multi-threading, не наступить бы еще тут на грабли</li>
</ul></li>
<li>python asyncio
<ul style="margin:5px 0;"><li>это удобно - одно приложение, никакой синхронизации событий
          между автономными процессами</li>
<li>но вообще это эффективно для такой задачи?</li>
</ul></li>
</ul>

    Что выбрать? Какие еще варианты подхода к снаряду могут быть? Как
    вообще правильно это делать?<br/><div>Спасибо!</div>
<pre style="margin:5px 0;">-- 
Volodymyr Litovka
  "Vision without Execution is Hallucination." -- Thomas Edison</pre>
</div>
<pre style="margin:5px 0;">_______________________________________________
uanog mailing list
<a href="mailto:uanog@uanog.kiev.ua" target="_self" rel="noreferrer noopener">uanog@uanog.kiev.ua</a>
<a href="https://mailman.uanog.kiev.ua/mailman/listinfo/uanog" target="_blank" rel="noreferrer noopener">https://mailman.uanog.kiev.ua/mailman/listinfo/uanog</a>
</pre>
</blockquote></span></body></html>