Денис Аникин 5 Кто я такой: — работаю в Райффайзен банке — team lead в команде Chat — community lead в Python Community — fullstack: разрабатываю на back на python и front на typescript, занимаюсь devops https://xfenix.ru
Тем, кто делает свои решения, связанные с чатами Кому будет полезна презентация? 8 1 Тем, кто делает решения, связанные с websocket 2 Тем, кто пишет или хочет писать на python 3
Тем, кто делает свои решения, связанные с чатами Кому будет полезна презентация? 9 1 Тем, кто делает решения, связанные с websocket 2 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4
5 Тем, кто делает свои решения, связанные с чатами Кому будет полезна презентация? 10 1 Людям, которым интересны кейсы успешной продуктовой разработки Тем, кто делает решения, связанные с websocket 2 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4
5 Тем, кто делает свои решения, связанные с чатами Кому будет полезна презентация? 11 1 Людям, которым интересны кейсы успешной продуктовой разработки Тем, кто делает решения, связанные с websocket 2 Тем, кто выбирает стек для проектов 6 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4
5 Тем, кто делает свои решения, связанные с чатами Кому будет полезна презентация? 12 1 Людям, которым интересны кейсы успешной продуктовой разработки Тем, кто делает решения, связанные с websocket 2 Тем, кто выбирает стек для проектов 6 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4 Тем, кому интересны лайфхаки из продакшена 7
Расскажу о том, что было 18 — Это «коробка» — Омниканальность и все необходимые функции в наличи — Есть админка: РМО (рабочее место оператора), РМГ/РМС (рабочее место главного специалиста/супервизора) Поговорим о плюсах
Что не так с доработками? 23 — Разработка велась медленно и непредсказуемо — Доработки нередко могли попадать в основную систему и к конкурентам К сожалению, в крупной системе без них никак
Производительность 24 Самое сложное Внутри системы находилось ядро на python 2.7 Не использовалась нативная асинхронность Система не поддерживала масштабирование вообще (никакое!)
Лайфхак из продакшена #2 42 Ещё важнее — Вам необходим пулинг соединений со стороны приложений — Наиболее это важно для высококонкурентных приложений: асинхронных, например, или полагающихся на green threads
Лайфхак из продакшена #2 43 Ещё важнее — Вам необходим пулинг соединений со стороны приложений — Наиболее это важно для высококонкурентных приложений: асинхронных, например, или полагающихся на green threads — Вам может понадобится ограничивать concurrency со стороны приложения
Почему Kubernetes? 48 И мы выбираем подход «оркестрация» (не будем о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование
Почему Kubernetes? 49 И мы выбираем подход «оркестрация» (не будем о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность
Почему Kubernetes? 50 И мы выбираем подход «оркестрация» (не будем о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность Разработчики сами описывают то как их сервисы работают в продакшене Мы желаем удобства разработчикам
Почему Kubernetes? 51 И мы выбираем подход «оркестрация» (не будем о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность Разработчики сами описывают то как их сервисы работают в продакшене Мы желаем удобства разработчикам Никаких больше тонн баш скриптов, разбросанных по компьютерам и запрятанных под мастрас ансибл плейбуков Мы хотим IAC
Почему Kubernetes? 52 И мы выбираем подход «оркестрация» (не будем о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность Разработчики сами описывают то как их сервисы работают в продакшене Мы желаем удобства разработчикам Никаких больше тонн баш скриптов, разбросанных по компьютерам и запрятанных под мастрас ансибл плейбуков Мы хотим IAC Техника, которую довольно трудно реализовывать руками, здесь нам достается вообще бесплатно! Rolling update
Давайте о плюсах Python 57 Нас интересует версия 3 конечно Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3
Давайте о плюсах Python 58 Нас интересует версия 3 конечно Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3 Язык #1 по куче рейтингов 4
Давайте о плюсах Python 59 Нас интересует версия 3 конечно Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3 Язык #1 по куче рейтингов 4 Производительности хватает на приличную нагрузку + язык серьезно ускоряется 5
Давайте о плюсах Python 60 Нас интересует версия 3 конечно Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3 Язык #1 по куче рейтингов 4 Производительности хватает на приличную нагрузку + язык серьезно ускоряется 5 Есть миллион готовых библиотек 6
Выводы по Python 64 Мое спорное мнение Python — первый язык, с которого вы можете начать любой бекенд Когда вам не хватает его скорости, вы берете go, java/kotlin или rust
Её плюсы 68 Всё из-за её архитектуры Потрясющая скорость Наши сообщения надежно хранятся и доставляются Отменная надежность, масштабирование Это одно из самых важных Гарантия порядка доставки
Про производительность 70 — Нам действительно важно сочетание масштабирования и гарантии порядка доставки — Нам действительно важно держать много RPS в купе с low latency
Некоторые минусы 72 Изучить кафку непросто Высокая сложность По сравнению с, например, RabbitMQ у нас здесь просто распределенный лог Не очень много возможностей Почему, возможно, вы не захотите у себя иметь кафку
Про сам протокол 83 Минусы — Непривычная семантика для тех, кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE
Про сам протокол 84 Минусы — Непривычная семантика для тех, кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше
Про сам протокол 85 Минусы — Непривычная семантика для тех, кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше — Много вопросов с аутентификацией
Про сам протокол 86 Минусы — Непривычная семантика для тех, кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше — Много вопросов с аутентификацией — Если «сессия» истекла, надо рвать соединение
Про сам протокол 87 Минусы — Непривычная семантика для тех, кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше — Много вопросов с аутентификацией — Если «сессия» истекла, надо рвать соединение — Кто-то должен держать пул соединений
Двусторонний роутинг 89 Мы решали эту проблему Мы берем сообщение снаружи и кидаем в кафку Когда мы «пушим» в систему, всё просто Вот это совсем непросто и готовых решений в интернете нет Но как попасть «обратно»?
Двусторонний роутинг 90 Мы решали эту проблему Мы берем сообщение снаружи и кидаем в кафку Когда мы «пушим» в систему, всё просто Вот это совсем непросто и готовых решений в интернете нет Но как попасть «обратно»? Выступление на moscow python conf ++ 2021 Ответ есть в нашем докладе
Подводим итоги 95 Мы достигли следующего: Дизайн в общем для банка стиле Горизонтальное масштабирование Отказоустойчивость Полный контроль над своей системой
Подводим итоги 96 Мы достигли следующего: Дизайн в общем для банка стиле Горизонтальное масштабирование Отказоустойчивость Полный контроль над своей системой Предсказуемая скорость разработки
Подводим итоги 97 Мы достигли следующего: Дизайн в общем для банка стиле Горизонтальное масштабирование Отказоустойчивость Полный контроль над своей системой Предсказуемая скорость разработки Безопасность