
Jentry
18.06.2018
14:13:31

Tigran
18.06.2018
14:14:11

Mikhail
18.06.2018
14:14:42
Для кодинга небольшой игры имеет смысл кодить на питоне (panda3d) или ставить юнити сразу?

Денис
18.06.2018
14:14:43
Подскажите, каким образом можно проверить IP-подсети на пересечение?

Google

Tigran
18.06.2018
14:15:11

Jentry
18.06.2018
14:15:16
Не в курсе)
Этот господин не перестает хейтить питон за наличие gil и невозможности ему использовать питон в геймдеве, а Хеттингер отбивается от него asyncio

Mikhail
18.06.2018
14:18:47

Tigran
18.06.2018
14:19:24

Mikhail
18.06.2018
14:21:04
Dankè, посмотрю после работы

Jentry
18.06.2018
14:22:22
но прям пересечение подсеть и подсеть с ответом новой подсети в либе не вижу

Денис
18.06.2018
14:23:57
Задача такая: в конфиге пользователь должен указать уникальные не пересекающиеся подсети дла разных методов работы скрипта. Так вот перед стартом скрита считаю необходимым проверить подсети на пересечение, чтобы исключить ошибку пользователя
может быть можно решить как-то иначе?
Мне главное понимать, что подсети не пересекаются. Например, пользователь может по ошибке указать: 10.0.0.0/24 и 10.0.0.0/16

Jentry
18.06.2018
14:27:19
может быть можно решить как-то иначе?
Ну смотри, есть compare_networks, можно просто сравнить, можно нажать supernet и повычитать (address_exclude) отдельно A и B, если сети разные, результат будет разный, вариантов масса

Денис
18.06.2018
14:27:46
Окей. Сейчас пробегусь по библиотеке. Спасибо за наводку

Jentry
18.06.2018
14:35:25

Google

Денис
18.06.2018
14:37:24
Осталось сообразить, как проверить на пересечение все подсети из спсика...

Roman
18.06.2018
14:38:06

Denis
18.06.2018
14:39:19

Roman
18.06.2018
14:40:38

Bogdan (SirEdvin)
18.06.2018
14:40:43
А что вместо них? :)
Ты не поверишь, как в старые - добрые времена, одно цельное приложение. Зачем микросервисы, если не нужен быстрый деплой?

Денис
18.06.2018
14:41:40

Denis
18.06.2018
14:41:57
Попробуй лучше циклом фор пробежаться

Jentry
18.06.2018
14:43:40
Здесь только есть небольшое но - если попробовать вычесть из net3 net1, то будет ValueError, то есть тебе перед вычетом нужно и сравнить к тому же

Денис
18.06.2018
14:44:08
Я уже понял, что арифметические операции не реализованы в этом классе. Уже пробовал

Roman
18.06.2018
14:44:18

Jentry
18.06.2018
14:45:15

Денис
18.06.2018
14:45:41
Есть только проверка на эквивалентность и для адресов проверка "больше" / "меньше"
пересечений не хватает

Bogdan (SirEdvin)
18.06.2018
14:45:53
Ну, zero-downtime можно сделать с монолитом, поиск проблем в микросервисах обычно заключается в поисках проблем в их взаимодействии, что куда сложнее, чем просто отдежить одно приложение. Ну и там распределенный трейсинг это тоже не так просто.
Единственный профит от микросервисов - возможность деплоя частей приложения независимо, что нужно далеко не всем, все остальное так же или проще можно достичь и цельным приложением или же просто через сервисную архитектуру.

Jentry
18.06.2018
14:47:28

Bogdan (SirEdvin)
18.06.2018
14:48:02
А почему такое же крутое логгирование не запилить в монолите?)

Jentry
18.06.2018
14:48:35
На самом деле еще зависит от качества монолита, но в целом его сложней поддерживать

Google

Tishka17
18.06.2018
14:48:39

Bogdan (SirEdvin)
18.06.2018
14:48:51
Вы можете проложить архитектурные границы в коде, изолировав части приложения так, что бы они взаимодействовали только через абстрактные развязки и эффект тот же самый

Tishka17
18.06.2018
14:49:23
Ужс

Bogdan (SirEdvin)
18.06.2018
14:49:40

Jentry
18.06.2018
14:50:03

Bogdan (SirEdvin)
18.06.2018
14:50:44
Ага, потом в коммитах появляются "hotfix", "mutherfuckhotfix", "prodinfire" и выясняется, что появилась связность, потому что никто технически это не запрещено, а что не запрещено технически, то будет эксплуатироваться
А, простите, как вы запретите технически связаность при микросервисах? Судя по тому, что существуют такие вещи, как "распределенный монолит" это так тоже не работает.

Jentry
18.06.2018
14:51:38

Roman
18.06.2018
14:56:33


Bogdan (SirEdvin)
18.06.2018
15:01:56
Связность микросервисов через endpoint происходит, это и не связность вовсе, а взаимодействие посредством сообщений!
У вас связность появляется тогда, когда вы определяете формат для сообщений. И как только из-за косяков проектирования получается ситуация, когда все 10 сервисов (ну или 7 из 10) надо задеплоить одновременно вместе, потому что у одного из них надо было поменять формат ответов, а во всех остальных надо поменять формат, что бы они умели в ним работать - вот тогда у вас появляется связность.
Понижать связность в коде можно изоляцией модулей и абстракциями - эффект такой же, но проще и обходится дешевле.

Roman
18.06.2018
15:04:17
монолитом так не получится.
хороший способ ограничть размеры failure domain

Bogdan (SirEdvin)
18.06.2018
15:06:06

Roman
18.06.2018
15:06:35

Bogdan (SirEdvin)
18.06.2018
15:07:14
Ну да, это все следствия того, что можно деплоить части приложения независимо. Но опять же, это не нужно всем, особенно учитывая цену.

Roman
18.06.2018
15:07:20
отдельные части могут течь, но это не будет сказываться на общей работоспособности

Google

Roman
18.06.2018
15:07:50
вообщем-то, это очевидные принципы построения систем массового обслуживания.
все это можно тупо заимствовать из erlang/otp
все эти деревья супервизоров, let it crash итп

Sergey
18.06.2018
15:11:13
Всем привет. Сталкивался кто то с паковкой проекта в standalone сборку ? в том плане что бы можно было завести проект у человека у которого даже python не установлен ? (пока пробую разобраться с pyinstaller и ему подобными но не совсем получается так как проект не маленький и обладает своими конфигами и ресурсами) куда копать ? возможно ли это ?

Roman
18.06.2018
15:12:44

Sergey
18.06.2018
15:12:58
это уже прикрутил )
и даже работает ) правда требует у клиента поставленый докер.. что логично

Bogdan (SirEdvin)
18.06.2018
15:16:54
отдельные части могут течь, но это не будет сказываться на общей работоспособности
До определенного предела. Опять же таки, как-то куча систем работает и без такого подхода, например, при помощи сервисно-ориентированной архитектуры и кучи воркеров. Та же магическая связка django + celery + rabbitmq + rdbs. Даже если какая-то celery задача упала или сильно грузит ресурсы, то при правильном подходе будет почти такой же эффект.

Jentry
18.06.2018
15:16:57

Sergey
18.06.2018
15:18:50

Jentry
18.06.2018
15:21:37
Сейчас докер все заказчики принимают и даже радуются, что не что-то другое

Roman
18.06.2018
15:21:53

Sergey
18.06.2018
15:23:06

Bogdan (SirEdvin)
18.06.2018
15:31:59

Roman
18.06.2018
15:32:44

Bogdan (SirEdvin)
18.06.2018
15:33:16
И первое, что стоит научить делать вебсокет - это реконнект, потому что сеть дофига ненадежная

Roman
18.06.2018
15:34:24
Мне кажется, иметь долгоживущие коннекты, которые не умеют в рестарт - это немного антипаттер. Но тем не менее, большинство современных инструментов умеет делать graceful shutdown, когда дожидаются, пока все коннекты отключатся.
>graceful shutdown, когда дожидаются, пока все коннекты отключатся.
во-первых, это очень долго. во-вторых, это адски неудобно. в-третьих, коннект терминируется в твоем процессе, а где-то еще. да, можно точку терминации унести куда-то, но требования по надежности переедут туда.

Bogdan (SirEdvin)
18.06.2018
15:35:57
Так люди так и делают, перенося точку терминации на nginx, зачем тут микросервисы? Ну и как я уже писал раньше - долгие коннекты, которые не умеют в реконнект - это игрушка дьявола. Моргнет сеть и все развалится, а сеть так довольно часто делает.

Roman
18.06.2018
15:36:13
и проблема монолитов в том, что целая пачка довольно противоречивых требований оказывается заперта в одном процессе.

Google

Roman
18.06.2018
15:37:24
или любой другой протокол, который nginx не умеет.
например, у тебя сервис умеет redis-протокол
потому что куча библиотек и кода

Bogdan (SirEdvin)
18.06.2018
15:40:06
Ну, то есть микросервисная архитектура позволяет исправлять костыли в коде, прибегая к архитекрутным костылям в виде того, что входную точку можно научить в терминацию по нужному протоколу?
Опять же таки, я не совсем понимаю, почему нельзя сделать тоже самое, просто втыкнув сервис, который будет это делать перед монолитом?

Jentry
18.06.2018
15:42:24
Монолит можно разрабатывать согласно всем принципам и подходам, но это сложно поддерживать и сложно не запустить, с увеличением объема строк кода это перестанет помещаться в голову лиду проекта и может начаться хаос. Яркий пример, того, что это сложно - ядро линукс. Попробуйте посмотреть на PR
В случае распределения и делегирования ответственности на мироксервисы их и держать в голове проще и при разрастании также продолжать декомпозицию


Bogdan (SirEdvin)
18.06.2018
15:47:39
Вы можете сделать абсолютно так же в коде, проводя архитектурные границы между компонентами, заставляя разработчиков использовать только через публичное API компонентов (абстрактные компоненты). И микросервисная архитектура абсолютно так же должна помещатся в голову тех лиду, что бы он понимал принципи того, как это все взаимодействует.
Проблема только в том, что размытие архитектурных границ в монолите приводит к не очень хорошему коду, размытие архитектурный границ между микросервисами приводит к адской боли у всех, кто с этим работает.

Jentry
18.06.2018
15:49:24
Давай по классике, есть user, есть orders, два сервиса, как ты видишь себе возможное размытие границы в микросервисах? А вот размыть эти границы в монолите очень даже просто

Roman
18.06.2018
15:50:35

Bogdan (SirEdvin)
18.06.2018
15:52:34

Roman
18.06.2018
15:52:49

Bogdan (SirEdvin)
18.06.2018
15:53:08

Jentry
18.06.2018
15:53:29

Vitaly
18.06.2018
15:54:03
в csv можно переделать из dbf

Roman
18.06.2018
15:54:51

Bogdan (SirEdvin)
18.06.2018
15:56:09

Jentry
18.06.2018
15:56:36
Ну за это уже по рукам, а получить в монолите объект напрямую без логики вьюхи это общепринятый паттерн, а если вдруг выясняется, что хотелось бы эту логику провернуть, то мы ее куда-нибудь вытащим и будем использовать отовсюду! Ура успех, реюзабельность

Roman
18.06.2018
15:57:14