@ru_python

Страница 6903 из 9768
Roman
31.10.2018
07:02:52
Тестировать вручную 50 микросервисов из-за минорного обновления одной либы?
не рабочий сервис из-за минорного обновления, вот это звучит безумие

LighteR
31.10.2018
07:06:53
не рабочий сервис из-за минорного обновления, вот это звучит безумие
Да с чего бы он станет полностью не рабочим? Можно использовать canary-testing. Да, можно какое-то кол-во ошибок получить в проде и сразу откатиться. Но ручное тестирование тоже полностью от такого сценария не избавляет

Google
LighteR
31.10.2018
07:09:14
обновлю вместе с другими изменниями. ради либы релиз не буду делать если конечно сервис развивается
Ну проект не один, это могут быть десятки разных микросервисов. Ожидание других изменений чтобы выкатить обновление либы может затянуться надолго

Tishka17
31.10.2018
07:09:37
каждый сервис пусть решает сам

ну то есть если он стабилен и не развивается, можно и выкатить апдейт если там секьюрити или ещё что

если не секьюрити, можно и забить на апдейт

LighteR
31.10.2018
07:12:09
если не секьюрити, можно и забить на апдейт
Ну не всегда можно забить на обновление. Может быть общая инфраструктура, которая используется микросервисами, и которая периодически может меняться. И микросервисы должны эти изменения поддерживать

Tishka17
31.10.2018
07:12:41
общая инфраструктура для микросервисов - боль. Ты должен предусмотреть что они не обновятся одновременно

LighteR
31.10.2018
07:13:37
общая инфраструктура для микросервисов - боль. Ты должен предусмотреть что они не обновятся одновременно
Они и так не обновляются одновременно. А без общей инфраструктуры как может быть?

каждому микросервису свой инстанс rabbitmq, например?

Tishka17
31.10.2018
07:14:16
Ну общая инфраструктура должна быть минимизирована, ага

Я понимаю, переезд на новый формат логов

Короче, если надо - обновляем.

LighteR
31.10.2018
07:17:05
А что, у него что-то меняется?
Ну если не говорить конкретно про рэббит, может быть обновление версии сервера и соответственно необходимость обновлять драйвер в микросервисах

Google
Tishka17
31.10.2018
07:17:33
Какого сервера?

LighteR
31.10.2018
07:17:37
Я понимаю, переезд на новый формат логов
ну и этот пример хороший, да

Какого сервера?
ну давай возьмем для примера Elasticsearch

Tishka17
31.10.2018
07:18:09
У них общих ресурсов должен быть минимум, рэббит, логи и всё

ну давай возьмем для примера Elasticsearch
Ну это просто база. Она относится к какому-то сервису

LighteR
31.10.2018
07:18:51
под каждый микросервис отдельный кластер elasticsearch держать?

Tishka17
31.10.2018
07:19:20
Почему у всех микросервисов эластик?

Напрямую в базу ходить - антипаттерн

LighteR
31.10.2018
07:19:48
Напрямую в базу ходить - антипаттерн
а как приложение должно ходить в базу?

Tishka17
31.10.2018
07:20:11
В свою базу напрямую. В чужую базу - вообще не знать о её существовании, а обращаться к сервису

LighteR
31.10.2018
07:20:29
а я нигде и не говорил, что микросервисы шарят между собой одну базу

Tishka17
31.10.2018
07:20:46
А. Все юзают один инстанс эластика

LighteR
31.10.2018
07:20:48
это антипаттерн, я согласен

да

Tishka17
31.10.2018
07:20:55
Со своими индексами?

LighteR
31.10.2018
07:21:01
да

Tishka17
31.10.2018
07:21:13
Ну тогда да. Обновление сервера - тяжело

Хотя протокол там хттп, вроде обратно совместим

LighteR
31.10.2018
07:21:59
Хотя протокол там хттп, вроде обратно совместим
нет, запросы могут быть несовместимы

формат некоторых запросов формируется в драйвере

Google
Tishka17
31.10.2018
07:22:21
Драйвере?

LighteR
31.10.2018
07:22:21
и может отличаться в разных версиях

Tishka17
31.10.2018
07:22:48
Я думал к эластику обращаются без драйвера через какие-то либы, в том числе сторонние

LighteR
31.10.2018
07:22:51
ну давай назовем это клиентской либой

Tishka17
31.10.2018
07:23:30
Короче, это уже не минорное обновление о котором ты начал

А редкий переезд.

LighteR
31.10.2018
07:23:48
просто некоторые называют это драйвером. Например разрабы кассандры называют клиентскую либу Python Cassandra Driver

Tishka17
31.10.2018
07:24:06
Лучше в этом случае сервисы переводить по отдельности

Поднимать новый инстанс и туда мигрировать по одному

LighteR
31.10.2018
07:24:55
Лучше в этом случае сервисы переводить по отдельности
Ну понятно что они не в один момент выкатываться будут. Но тем не менее в какой-то ограниченный промежуток времени

Tishka17
31.10.2018
07:25:28
Ну такой переезд требует тщательного тестирования всеми возможными способами

LighteR
31.10.2018
07:26:03
Короче, это уже не минорное обновление о котором ты начал
Могут быть и более мелкие изменения в либах, которые надо обновить

Tishka17
31.10.2018
07:26:20
ну вот от ситуации и надо плясать

нет универсального ответа

LighteR
31.10.2018
07:29:13
В любом случае, даже если не часто обновлять версии зависимостей все равно должен быть какой-то удобный способ строго фиксировать версии всех зависимостей. И pip'ом это делать не очень удобно

Tishka17
31.10.2018
07:31:50
pipenv?

LighteR
31.10.2018
07:32:06
например

Nick
31.10.2018
07:38:18
Хай, народ Где можно почитать/смотреть туториалы по kivy? Вчера весь день искал и почти ничего не нашел

Tishka17
31.10.2018
07:38:41
да сдался тебе он

Nick
31.10.2018
07:39:00
да сдался тебе он
Питоничненько

Google
Steven
31.10.2018
07:42:02
киви фуу

если пилить под ондроеды то тут путхлоном не обойдешся

учи java

и качай Android Studio

Tishka17
31.10.2018
07:42:42
или kotlin

Cashik
31.10.2018
07:47:36
Подскажите, есть же какая-то библиотекак TaskManager для сервера, чтобы можно было передать туда метод, параметры и каким-то простым способом получать оттуда состояния и ответ? Это, наверное, должна быть какая-то обертка вокруг multiprocessing.

Daniel
31.10.2018
07:51:13
Ребята, привет. У меня короче код исполняется через asyncio, нужно чтобы если в потоке произошло исключение - падал и основной процесс, дабы супервизор потом все перезапустил. Сейчас делаю так: lp = asyncio.get_event_loop() lp.set_exception_handler(partial(exc_handler, log=app['logger'])) lp.create_task(consume_callback(channel, body, envelope, properties, app)) Чтобы все исключения из consume_callback попадали в : def exc_handler_panic(loop, context, log: logging.Logger): log.error(context, extra={'stack': True}, exc_info=True) raise Exception('Panic thread error, need close main process') И падал основной процесс

Но походу это не рабайтан

Admin
ERROR: S client not available

Roman
31.10.2018
07:51:24
pipenv?
почему не pip и requirements, ведь пофиг что у тебя на машине установленно, тебе всё равно придётся файл конфигурации для прода менять. почему бы это руками не поменять просто в файле requirements

LighteR
31.10.2018
07:53:40
Так же pip freeze
А как отделять dev-зависимости?

Tishka17
31.10.2018
07:54:08
LighteR
31.10.2018
07:54:17
чтобы, например, установленный локально ipython не попадал в requirements.txt

Roman
31.10.2018
07:54:20
А как отделять dev-зависимости?
Так же как и в pipenv , свой конфиг свой раздел

LighteR
31.10.2018
07:56:24
Так же как и в pipenv , свой конфиг свой раздел
Можно пример? Я при локальной разработке клонирую репу, делаю pip install -r requirements.txt, потом ставлю, например, ipython для удобства разрабтки. В процессе разработки решаю добавить новую либу в requirements.txt. Делаю pip freeze > requirements.txt и в нем оказывается ipython

Я вижу выход только в создании нового чистого virtualenv'а каждый раз когда мне надо что-то добавить или изменить в requirements.txt

Google
Aragaer
31.10.2018
08:07:00
Просто не надо делать pip freeze > requirements.txt

надо pip freeze -r requirements.txt

тогда он будет смотреть туда и выдавать только то, что там есть

LighteR
31.10.2018
08:12:11
Как тебе в этом сценарии может помочь pipenv?
Можно сделать pipenv install ipython --dev, тогда она попадет в секцию dev Pipfile'а. Если мне нужно, чтобы вообще никуда не попадало, то можно сделать pip install ipython, возможно это как-то и pipenv'ом можно сделать

LighteR
31.10.2018
08:17:48
тогда он будет смотреть туда и выдавать только то, что там есть
Нет, от этого же зависит только порядок вывыдимых зависимостей

если сделать `pip install ipython`, то вообще никуда не запишется

Roman
31.10.2018
08:18:57
Если сделать pipenv install ipython --dev, то да
Согласен тут с тобой, просто через pip будет не так удобно

Aragaer
31.10.2018
08:20:36
Нет, от этого же зависит только порядок вывыдимых зависимостей
ок, тогда надо немного седа, чтобы отфильтровать все то, чего там нет

LighteR
31.10.2018
08:21:23
Согласен тут с тобой, просто через pip будет не так удобно
Да ,это просто вопрос удобства. С pip freeze тоже можно вполне жить, но чуть больше манипуляций делать придется.

Aragaer
31.10.2018
08:21:32
мне проще, я свой requirements.txt поддерживаю руками

потому что у меня еще есть requirements-dev.txt например

LighteR
31.10.2018
08:21:57
ок, тогда надо немного седа, чтобы отфильтровать все то, чего там нет
Не очень представляют как это должно работать

Допустим у нас есть requirements.txt. Помимо зависимостей в нем, у меня в окружении стоят dev-зависимости. Теперь я решил добавить в проект, например, aiohttp. Что я должен сделать?

Aragaer
31.10.2018
08:23:06
pip freeze -r requirements.txt печатает сначала что в requirements.txt, потом пустую строчку, потом коммент "это добавлено pip freeze-ом"

а потом остальное

надо взять requirements.txt, вписать туда aiohttp

потом pip install -U -r requirements.txt

LighteR
31.10.2018
08:23:56
так, а дальше?

Roman
31.10.2018
08:24:16
потому что у меня еще есть requirements-dev.txt например
Установил ты дев , потом добавляешь новую либу, как ты это добавишь в прод requirements ?

LighteR
31.10.2018
08:24:21
как получить потом нужный requirements.txt, в котором будут все зависимости aiohttp?

Страница 6903 из 9768