[uanog] Parallel processing - which one to use?
Volodymyr Litovka
doka at xlit.one
Wed Jan 13 19:02:20 EET 2021
On 13.01.2021 16:55, Maksym Tulyuk wrote:
> Привет!
>
> Если нужно что-то делать для 1) “для снижения нагрузки на REST” и если
> 2) "приложение долго тянет базу из REST API”, то это говорит о
> неправильной архитектуре системы и/или REST API. Но, менять
> архитектуру дорого и может не получится. Поэтому, в данной ситуации, я
> бы или 1) оптимизировал REST API для приложения, или 2) написал свой
> “прокси" REST API и добавлял туда механизмы кеширования.
так по сути "проксёй" и является in-memory db. Очень быстрой проксёй.
>
> Максим
> On 12 Jan 2021, 17:55 +0100, Volodymyr Litovka <doka at xlit.one>, wrote:
>>
>> Привет,
>>
>> а как правильно подойти к следующей задаче?
>>
>> Есть приложение (e.g. MyApp), которое обрабатывает данные из
>> нескольких источников:
>>
>> +-----------+
>> | REST API |
>> +--+-----+--+
>> | |
>> PUSH (TCP) | | GET (HTTP)
>> | |
>> v v
>> +---+-----+---+
>> UDP | | Output
>> --------->+ MyApp +----------->
>> | |
>> +-------------+
>>
>> Поток UDP довольно мощный и является источником RAW data. Для
>> обработки этих данных нужна дополнительная информация, хранящяяся в
>> SQL - она доступа по REST API, а обновления - по TCP PUSH NFYs
>>
>> Для снижения нагрузки на REST и увеличения собственного
>> быстродействия, при старте MyApp наполняет in-ram cache, запрашивая
>> стартовые данные из REST API и больше никогда к нему не обращаясь, а
>> обновления приходят по TCP (PUSH NFYs)
>>
>> Таким образом, в процессе работы приложения всегда есть два
>> параллельных процесса, один из которых довольно ёмкий либо по
>> времени, либо по ресурсам -
>>
>> 1) старт - приложение долго тянет базу из REST API, реагируя при этом
>> на периодические TCP PUSH NFYs (тут можно разбить вытягивание
>> большого объема данных на более мелкие чанки)
>> 2) основной цикл работы - приложение слушает очень интенсивный поток
>> UDP (я бы сказал, что делает это без пауз на передохнуть), реагируя
>> при этом на периодические TCP PUSH NFYs
>>
>> Пока что это пишется на Питоне, что вносит определенные ограничения в
>> набор механизмов. Три варианта, какие я вижу:
>>
>> * multiprocess - три отдельных приложения
>> o тут более-менее понятно - система сама будет распределять CPU
>> resources между приложениями по требованию + внешняя
>> синхронизация
>> o но выглядит оно эскадрой пушечных парусников из книжки по
>> истории ;-)
>> * multithreading - три треда в одном приложении, это уже более
>> "модно и молодежно" (хотя задача синхронизации событий остается), но:
>> o гарантируется ли своевременная передача исполнения треду с
>> TCP listener upon packet arrival в услових интенсивной работы
>> треда, обслуживающего UDP?
>> o я читал/слышал, что у Питона сложная история отношений с
>> multi-threading, не наступить бы еще тут на грабли
>> * python asyncio
>> o это удобно - одно приложение, никакой синхронизации событий
>> между автономными процессами
>> o но вообще это эффективно для такой задачи?
>>
>> Что выбрать? Какие еще варианты подхода к снаряду могут быть? Как
>> вообще правильно это делать?
>>
>> Спасибо!
>>
>> --
>> Volodymyr Litovka
>> "Vision without Execution is Hallucination." -- Thomas Edison
>> _______________________________________________
>> uanog mailing list
>> uanog at uanog.kiev.ua
>> https://mailman.uanog.kiev.ua/mailman/listinfo/uanog
>
> _______________________________________________
> uanog mailing list
> uanog at uanog.kiev.ua
> https://mailman.uanog.kiev.ua/mailman/listinfo/uanog
--
Volodymyr Litovka
"Vision without Execution is Hallucination." -- Thomas Edison
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.uanog.kiev.ua/pipermail/uanog/attachments/20210113/cdeca0d1/attachment.html>
More information about the uanog
mailing list