Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как и зачем мы сделали своё чат-решение?

Как и зачем мы сделали своё чат-решение?

Мое выступление на конференции CrossConf 09-10 сентября 2022 года. Я рассказываю о том как мы сделали свою омниканальную чат-платформу.

https://www.youtube.com/watch?v=rlgPOJdWgJY

Denis Anikin

May 16, 2023
Tweet

More Decks by Denis Anikin

Other Decks in Programming

Transcript

  1. Денис Аникин 3 Кто я такой: — работаю в Райффайзен

    банке — team lead в команде Chat https://xfenix.ru
  2. Денис Аникин 4 Кто я такой: — работаю в Райффайзен

    банке — team lead в команде Chat — community lead в Python Community https://xfenix.ru
  3. Денис Аникин 5 Кто я такой: — работаю в Райффайзен

    банке — team lead в команде Chat — community lead в Python Community — fullstack: разрабатываю на back на python и front на typescript, занимаюсь devops https://xfenix.ru
  4. Тем, кто делает свои решения, связанные с чатами Кому будет

    полезна презентация? 7 1 Тем, кто делает решения, связанные с websocket 2
  5. Тем, кто делает свои решения, связанные с чатами Кому будет

    полезна презентация? 8 1 Тем, кто делает решения, связанные с websocket 2 Тем, кто пишет или хочет писать на python 3
  6. Тем, кто делает свои решения, связанные с чатами Кому будет

    полезна презентация? 9 1 Тем, кто делает решения, связанные с websocket 2 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4
  7. 5 Тем, кто делает свои решения, связанные с чатами Кому

    будет полезна презентация? 10 1 Людям, которым интересны кейсы успешной продуктовой разработки Тем, кто делает решения, связанные с websocket 2 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4
  8. 5 Тем, кто делает свои решения, связанные с чатами Кому

    будет полезна презентация? 11 1 Людям, которым интересны кейсы успешной продуктовой разработки Тем, кто делает решения, связанные с websocket 2 Тем, кто выбирает стек для проектов 6 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4
  9. 5 Тем, кто делает свои решения, связанные с чатами Кому

    будет полезна презентация? 12 1 Людям, которым интересны кейсы успешной продуктовой разработки Тем, кто делает решения, связанные с websocket 2 Тем, кто выбирает стек для проектов 6 Тем, кто пишет или хочет писать на python 3 Тем, кто работает с микросервисной архитектурой 4 Тем, кому интересны лайфхаки из продакшена 7
  10. Расскажу о том, что было 17 — Это «коробка» —

    Омниканальность и все необходимые функции в наличи Поговорим о плюсах
  11. Расскажу о том, что было 18 — Это «коробка» —

    Омниканальность и все необходимые функции в наличи — Есть админка: РМО (рабочее место оператора), РМГ/РМС (рабочее место главного специалиста/супервизора) Поговорим о плюсах
  12. А теперь о минусах 19 И это не для всех

    будет так — Абонентская плата
  13. А теперь о минусах 20 И это не для всех

    будет так — Абонентская плата — Производительность
  14. А теперь о минусах 21 И это не для всех

    будет так — Абонентская плата — Производительность — Безопасность
  15. А теперь о минусах 22 И это не для всех

    будет так — Абонентская плата — Производительность — Безопасность — Качество
  16. Что не так с доработками? 23 — Разработка велась медленно

    и непредсказуемо — Доработки нередко могли попадать в основную систему и к конкурентам К сожалению, в крупной системе без них никак
  17. Производительность 24 Самое сложное Внутри системы находилось ядро на python

    2.7 Не использовалась нативная асинхронность Система не поддерживала масштабирование вообще (никакое!)
  18. А что с масштабированием? 27 Вот это самое печальное —

    Не вертикальное — Не горизонтальное … — Никакое!
  19. Настройка кластера 36 Про HA — у нас 3 реплики

    — а так же 3 sentinel — всё ради HA и быстрого failover
  20. Настройка кластера 37 Про HA — у нас 3 реплики

    — а так же 3 sentinel — всё ради HA и быстрого failover — мы не используем шардирование
  21. Лайфхак из продакшена #2 41 Ещё важнее — Вам необходим

    пулинг соединений со стороны приложений
  22. Лайфхак из продакшена #2 42 Ещё важнее — Вам необходим

    пулинг соединений со стороны приложений — Наиболее это важно для высококонкурентных приложений: асинхронных, например, или полагающихся на green threads
  23. Лайфхак из продакшена #2 43 Ещё важнее — Вам необходим

    пулинг соединений со стороны приложений — Наиболее это важно для высококонкурентных приложений: асинхронных, например, или полагающихся на green threads — Вам может понадобится ограничивать concurrency со стороны приложения
  24. Почему Kubernetes? 48 И мы выбираем подход «оркестрация» (не будем

    о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование
  25. Почему Kubernetes? 49 И мы выбираем подход «оркестрация» (не будем

    о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность
  26. Почему Kubernetes? 50 И мы выбираем подход «оркестрация» (не будем

    о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность Разработчики сами описывают то как их сервисы работают в продакшене Мы желаем удобства разработчикам
  27. Почему Kubernetes? 51 И мы выбираем подход «оркестрация» (не будем

    о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность Разработчики сами описывают то как их сервисы работают в продакшене Мы желаем удобства разработчикам Никаких больше тонн баш скриптов, разбросанных по компьютерам и запрятанных под мастрас ансибл плейбуков Мы хотим IAC
  28. Почему Kubernetes? 52 И мы выбираем подход «оркестрация» (не будем

    о «хореографии») У нас > 1 машины ReplicaSet, HPA и еще несколько концепций — и мы в дамках Нам нужно масштабирование Здесь на помощь спешит control loop, probes, service mesh и много всего разного Нам нужна надежность Разработчики сами описывают то как их сервисы работают в продакшене Мы желаем удобства разработчикам Никаких больше тонн баш скриптов, разбросанных по компьютерам и запрятанных под мастрас ансибл плейбуков Мы хотим IAC Техника, которую довольно трудно реализовывать руками, здесь нам достается вообще бесплатно! Rolling update
  29. Давайте о плюсах Python 56 Нас интересует версия 3 конечно

    Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2
  30. Давайте о плюсах Python 57 Нас интересует версия 3 конечно

    Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3
  31. Давайте о плюсах Python 58 Нас интересует версия 3 конечно

    Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3 Язык #1 по куче рейтингов 4
  32. Давайте о плюсах Python 59 Нас интересует версия 3 конечно

    Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3 Язык #1 по куче рейтингов 4 Производительности хватает на приличную нагрузку + язык серьезно ускоряется 5
  33. Давайте о плюсах Python 60 Нас интересует версия 3 конечно

    Асинхронность из коробки 1 Динамическая типизация == разработка очень быстрая 2 Аннотации типов устраняют проблемы предыдущего пункта 3 Язык #1 по куче рейтингов 4 Производительности хватает на приличную нагрузку + язык серьезно ускоряется 5 Есть миллион готовых библиотек 6
  34. Выводы по Python 63 Мое спорное мнение Python — первый

    язык, с которого вы можете начать любой бекенд
  35. Выводы по Python 64 Мое спорное мнение Python — первый

    язык, с которого вы можете начать любой бекенд Когда вам не хватает его скорости, вы берете go, java/kotlin или rust
  36. Её плюсы 67 Всё из-за её архитектуры Потрясющая скорость Наши

    сообщения надежно хранятся и доставляются Отменная надежность, масштабирование
  37. Её плюсы 68 Всё из-за её архитектуры Потрясющая скорость Наши

    сообщения надежно хранятся и доставляются Отменная надежность, масштабирование Это одно из самых важных Гарантия порядка доставки
  38. Про производительность 70 — Нам действительно важно сочетание масштабирования и

    гарантии порядка доставки — Нам действительно важно держать много RPS в купе с low latency
  39. Некоторые минусы 72 Изучить кафку непросто Высокая сложность По сравнению

    с, например, RabbitMQ у нас здесь просто распределенный лог Не очень много возможностей Почему, возможно, вы не захотите у себя иметь кафку
  40. Лайфхак из продакшена #2 76 Тоже важно — Вам понадобится

    поддерживать dead letter — Вам понадбится поддерживать dead letter + timeout + retry
  41. Про сам протокол 80 Его плюсы — Нативно асинхронен —

    Реализован под все платформы — Быстр
  42. Про сам протокол 82 Минусы — Непривычная семантика для тех,

    кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим
  43. Про сам протокол 83 Минусы — Непривычная семантика для тех,

    кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE
  44. Про сам протокол 84 Минусы — Непривычная семантика для тех,

    кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше
  45. Про сам протокол 85 Минусы — Непривычная семантика для тех,

    кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше — Много вопросов с аутентификацией
  46. Про сам протокол 86 Минусы — Непривычная семантика для тех,

    кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше — Много вопросов с аутентификацией — Если «сессия» истекла, надо рвать соединение
  47. Про сам протокол 87 Минусы — Непривычная семантика для тех,

    кто всю жизнь с HTTP — Нет ничего, протокол очень примитивный, все приходится делать самим — Есть конкурент в лице SSE — По мнению некоторых уже много лет не нужен в силу пункта выше — Много вопросов с аутентификацией — Если «сессия» истекла, надо рвать соединение — Кто-то должен держать пул соединений
  48. Двусторонний роутинг 88 Мы решали эту проблему Мы берем сообщение

    снаружи и кидаем в кафку Когда мы «пушим» в систему, всё просто
  49. Двусторонний роутинг 89 Мы решали эту проблему Мы берем сообщение

    снаружи и кидаем в кафку Когда мы «пушим» в систему, всё просто Вот это совсем непросто и готовых решений в интернете нет Но как попасть «обратно»?
  50. Двусторонний роутинг 90 Мы решали эту проблему Мы берем сообщение

    снаружи и кидаем в кафку Когда мы «пушим» в систему, всё просто Вот это совсем непросто и готовых решений в интернете нет Но как попасть «обратно»? Выступление на moscow python conf ++ 2021 Ответ есть в нашем докладе
  51. Подводим итоги 93 Мы достигли следующего: Дизайн в общем для

    банка стиле Горизонтальное масштабирование
  52. Подводим итоги 94 Мы достигли следующего: Дизайн в общем для

    банка стиле Горизонтальное масштабирование Отказоустойчивость
  53. Подводим итоги 95 Мы достигли следующего: Дизайн в общем для

    банка стиле Горизонтальное масштабирование Отказоустойчивость Полный контроль над своей системой
  54. Подводим итоги 96 Мы достигли следующего: Дизайн в общем для

    банка стиле Горизонтальное масштабирование Отказоустойчивость Полный контроль над своей системой Предсказуемая скорость разработки
  55. Подводим итоги 97 Мы достигли следующего: Дизайн в общем для

    банка стиле Горизонтальное масштабирование Отказоустойчивость Полный контроль над своей системой Предсказуемая скорость разработки Безопасность