Рабочая неделя в Сан-Франциско 🌉
Беспилотные Waymo и Zoox на каждом шагу.
Многочисленные баннеры с ИИ стартапами.
Вокруг офисы крупнейших технологических компаний и ощущение, что здесь постоянно запускают что-то новое.
Всё-таки Сан-Франциско не просто так называют мировой столицей технологий.
Жизнь кипит 🚀
Иногда приезжаю и думаю: «А может, всё-таки переехать сюда?».
Но пока понимаю, что мне гораздо больше нравится приезжать в Сан-Франциско за этой энергией, идеями и нетворкингом, а потом возвращаться домой))
В следующем месяце снова сюда на ТОП-3 конференцию по ИИ в США 🤩
Беспилотные Waymo и Zoox на каждом шагу.
Многочисленные баннеры с ИИ стартапами.
Вокруг офисы крупнейших технологических компаний и ощущение, что здесь постоянно запускают что-то новое.
Всё-таки Сан-Франциско не просто так называют мировой столицей технологий.
Жизнь кипит 🚀
Иногда приезжаю и думаю: «А может, всё-таки переехать сюда?».
Но пока понимаю, что мне гораздо больше нравится приезжать в Сан-Франциско за этой энергией, идеями и нетворкингом, а потом возвращаться домой))
В следующем месяце снова сюда на ТОП-3 конференцию по ИИ в США 🤩
❤36🔥12
Архитектура_87_терминов_Справочник_GetAnalyst.pdf
2 MB
📚 87 терминов по архитектуре для системного аналитика в одном справочнике [с определениями и наглядныими примерами] 📚
◻️ Общие архитектурные понятия
1. Архитектура системы
2. Компонент
3. Модуль
4. Подсистема
5. Сервис
6. Backend
7. Frontend
8. Web-приложение
9. Сайт
10. Desktop-приложение
11. Мобильное приложение
12. Виджет
🧱 Архитектурные стили и подходы
13. Монолитная архитектура
14. Модульный монолит
15. Сервис-ориентированная архитектура (SOA)
16. Микросервисы (MSA)
17. Событийно-ориентированная архитектура (EDA)
18. Слоистая архитектура
19. API Gateway
20. Хореография
21. Оркестрация
22. Service Registry and Discovery
23. Backend for Frontend (BFF)
24. Database-per-Service (БД на сервис)
25. CQRS (Command Query Responsibility Segregation)
26. Domain-Driven Design (DDD)
27. Event Storming
28. Чистая архитектура
🔗 Интеграция и взаимодействие компонентов
29. API (Application Programming Interface)
30. REST API
31. GraphQL
32. gRPC
33. SOAP
34. WebSocket
35. Синхронное взаимодействие
36. Асинхронное взаимодействие
37. Webhooks
38. Polling
39. Long Polling
40. Message Broker (Брокер сообщений)
41. Kafka
42. RabbitMQ
43. ESB (Enterprise Service Bus)
💾 Хранение данных
44. База данных (БД)
45. СУБД
46. Реляционные БД (PostgreSQL, SQLite, MySQL, Oracle и др.)
47. NoSQL БД (MongoDB, Redis и др.)
48. Файловое хранилище
49. Шардирование
50. Репликация
51. Кэширование
🔐 Безопасность
52. Authentication (Аутентификация)
53. Authorization (Авторизация)
54. SSO (Single Sign-On)
55. OAuth 2.0
56. JWT
57. Token
58. Bearer Token
59. Basic Authentication
60. Keycloak
61. TLS
62. HTTPS
63. WSS (WebSocket Secure)
64. Аудит
🖼 Нефункциональные требования (НФТ)
65. Масштабируемость
66. Доступность
67. Отказоустойчивость
68. Производительность
69. Сопровождаемость
70. Безопасность
⚙️ DevOps и инфраструктура
71. CI/CD (Continuous Integration / Continuous Delivery)
72. Балансировщик нагрузки (Load Balancer)
73. Docker
74. Kubernetes
75. Service Mesh
76. Мониторинг (Prometheus, Grafana, Zabbix и др.)
77. Логирование (ELK с Kibana, Loki + Grafana и др.)
78. Дашборды
79. Tracing
80. Health Check
📐 Проектирование и документация
81. UML Sequence Diagram
82. UML Activity Diagram
83. C4 Model (Context, Container, Component, Code)
84. Archimate
85. ERD (Entity-Relationship Diagram)
86. Нефункциональные требования (НФТ)
87. Архитектурные решения
🔖 Сохраните себе — пригодится при знакомстве с архитектурой, микросервисами, API и в подготовке к собеседованиям 😎
#АрхитектураGA
◻️ Общие архитектурные понятия
1. Архитектура системы
2. Компонент
3. Модуль
4. Подсистема
5. Сервис
6. Backend
7. Frontend
8. Web-приложение
9. Сайт
10. Desktop-приложение
11. Мобильное приложение
12. Виджет
🧱 Архитектурные стили и подходы
13. Монолитная архитектура
14. Модульный монолит
15. Сервис-ориентированная архитектура (SOA)
16. Микросервисы (MSA)
17. Событийно-ориентированная архитектура (EDA)
18. Слоистая архитектура
19. API Gateway
20. Хореография
21. Оркестрация
22. Service Registry and Discovery
23. Backend for Frontend (BFF)
24. Database-per-Service (БД на сервис)
25. CQRS (Command Query Responsibility Segregation)
26. Domain-Driven Design (DDD)
27. Event Storming
28. Чистая архитектура
🔗 Интеграция и взаимодействие компонентов
29. API (Application Programming Interface)
30. REST API
31. GraphQL
32. gRPC
33. SOAP
34. WebSocket
35. Синхронное взаимодействие
36. Асинхронное взаимодействие
37. Webhooks
38. Polling
39. Long Polling
40. Message Broker (Брокер сообщений)
41. Kafka
42. RabbitMQ
43. ESB (Enterprise Service Bus)
💾 Хранение данных
44. База данных (БД)
45. СУБД
46. Реляционные БД (PostgreSQL, SQLite, MySQL, Oracle и др.)
47. NoSQL БД (MongoDB, Redis и др.)
48. Файловое хранилище
49. Шардирование
50. Репликация
51. Кэширование
🔐 Безопасность
52. Authentication (Аутентификация)
53. Authorization (Авторизация)
54. SSO (Single Sign-On)
55. OAuth 2.0
56. JWT
57. Token
58. Bearer Token
59. Basic Authentication
60. Keycloak
61. TLS
62. HTTPS
63. WSS (WebSocket Secure)
64. Аудит
🖼 Нефункциональные требования (НФТ)
65. Масштабируемость
66. Доступность
67. Отказоустойчивость
68. Производительность
69. Сопровождаемость
70. Безопасность
⚙️ DevOps и инфраструктура
71. CI/CD (Continuous Integration / Continuous Delivery)
72. Балансировщик нагрузки (Load Balancer)
73. Docker
74. Kubernetes
75. Service Mesh
76. Мониторинг (Prometheus, Grafana, Zabbix и др.)
77. Логирование (ELK с Kibana, Loki + Grafana и др.)
78. Дашборды
79. Tracing
80. Health Check
📐 Проектирование и документация
81. UML Sequence Diagram
82. UML Activity Diagram
83. C4 Model (Context, Container, Component, Code)
84. Archimate
85. ERD (Entity-Relationship Diagram)
86. Нефункциональные требования (НФТ)
87. Архитектурные решения
🔖 Сохраните себе — пригодится при знакомстве с архитектурой, микросервисами, API и в подготовке к собеседованиям 😎
#АрхитектураGA
🔥31❤17❤🔥3
📦 Новый проект #PostamatGA: брокеры, микросервисы, интеграции, IoT 📦
В этом месяце будем проектировать архитектуру и интеграции платформы для управления сетью постаматов.
Разберём не абстрактную систему из учебника, а сценарии, в которых Backend должен управлять тысячами физических устройств, переживать потерю связи и при этом не выдавать одну посылку дважды.
👉 Сеть постаматов #PostamatGA — платформа, где:
▫️ интернет-магазины и маркетплейсы передают отправления на доставку
▫️ система подбирает и резервирует свободные ячейки
▫️ курьеры загружают посылки и забирают возвраты
▫️ пользователи оплачивают и получают заказы
▫️ операторы следят за постаматами и отправлениями в реальном времени
👉 Как работает основной сценарий
1. Курьер сканирует посылку.
2. Система подбирает свободную ячейку подходящего размера.
3. Постамат открывает ячейку.
4. Курьер загружает посылку и закрывает дверцу.
5. Пользователь получает код или QR для получения заказа.
6. Пользователь забирает посылку, а заказ получает статус «Получен».
7. Если заказ не забрали за 72 часа, запускается процесс возврата.
В постамат попадают только оплаченные заказы.
👉 На первый взгляд, архитектура простая:
🔹 приложение получателя
🔹 интерфейс постамата с пользовательским и служебным режимами
🔹 админ-панель
🔹 Backend
🔹 база данных
👉 Что важно знать про постамат?
Это проблемное физическое IoT-устройство 😃, которое может:
🔻 временно потерять соединение
🔻 повторно отправить одно и то же событие
🔻 выполнить команду открытия дверцы, но не передать подтверждение на backend
🔻 не получить команду на открытие ячейки
🔻 восстановить связь и отправить накопившиеся сообщения одной большой пачкой
А если постаматов тысячи, платформа параллельно получает события о загрузке и выдаче посылок, открытии и закрытии дверей, изменении статусов оплаты, истечении сроков хранения и возвратах.
📌 Поэтому в #PostamatGA начнём с простой C4-схемы и будем постепенно развивать её до распределённой event-driven архитектуры.
На каждом шаге будем решать:
+ где достаточно синхронного API
+ где действительно нужен брокер
+ какие компоненты стоит выделить в микросервисы
+ как не потерять событие и не выполнить одну команду дважды
👉 С чем будем работать на проекте
1️⃣ Проектирование микросервисов
Как разделить систему на независимые части: отправления, ячейки, доступ к заказам, оплаты, уведомления, возвраты и управление устройствами.
2️⃣ API Gateway
Единая точка входа для приложений пользователей и курьеров.
Отдельно разберём, должен ли постамат взаимодействовать через тот же API Gateway или для устройств нужен отдельный контур.
3️⃣ Интеграции
Подключение интернет-магазинов, маркетплейсов, платёжных систем, курьерских служб и самих постаматов.
4️⃣ Брокеры RabbitMQ и Kafka
Какие события передавать через брокер, где оставить синхронные API и какой брокер лучше подходит под разные сценарии системы.
5️⃣ Команды и события
Чем команда «Открыть ячейку» отличается от события «Ячейка открыта» и почему неправильная модель сообщений создаёт связанность между сервисами.
6️⃣ Оркестрация vs хореография
Как управлять процессами доставки, получения и возврата заказа.
7️⃣ Надёжность обработки процессов
Идемпотентность, retry, DLQ, Transactional Outbox, порядок сообщений и восстановление после сбоев.
8️⃣ Схемы архитектуры в C4
Будем постепенно развивать одну C4/Container-схему и показывать, как каждое решение меняет архитектуру проекта.
Всё как обычно: будем делать схемы, продумывать потоки данных и разбирать, почему одно архитектурное решение здесь работает лучше другого.
👉 Хотите участвовать?
Подписывайтесь на @getanalysts и следите за хэштегами #PostamatGA и #АрхитектураGA.
Добро пожаловать в команду нового проекта! 🤝
📱 GetAnalyst | 💙 VK | 💬 Max
В этом месяце будем проектировать архитектуру и интеграции платформы для управления сетью постаматов.
Разберём не абстрактную систему из учебника, а сценарии, в которых Backend должен управлять тысячами физических устройств, переживать потерю связи и при этом не выдавать одну посылку дважды.
👉 Сеть постаматов #PostamatGA — платформа, где:
▫️ интернет-магазины и маркетплейсы передают отправления на доставку
▫️ система подбирает и резервирует свободные ячейки
▫️ курьеры загружают посылки и забирают возвраты
▫️ пользователи оплачивают и получают заказы
▫️ операторы следят за постаматами и отправлениями в реальном времени
👉 Как работает основной сценарий
1. Курьер сканирует посылку.
2. Система подбирает свободную ячейку подходящего размера.
3. Постамат открывает ячейку.
4. Курьер загружает посылку и закрывает дверцу.
5. Пользователь получает код или QR для получения заказа.
6. Пользователь забирает посылку, а заказ получает статус «Получен».
7. Если заказ не забрали за 72 часа, запускается процесс возврата.
В постамат попадают только оплаченные заказы.
👉 На первый взгляд, архитектура простая:
🔹 приложение получателя
🔹 интерфейс постамата с пользовательским и служебным режимами
🔹 админ-панель
🔹 Backend
🔹 база данных
👉 Что важно знать про постамат?
Это проблемное физическое IoT-устройство 😃, которое может:
🔻 временно потерять соединение
🔻 повторно отправить одно и то же событие
🔻 выполнить команду открытия дверцы, но не передать подтверждение на backend
🔻 не получить команду на открытие ячейки
🔻 восстановить связь и отправить накопившиеся сообщения одной большой пачкой
А если постаматов тысячи, платформа параллельно получает события о загрузке и выдаче посылок, открытии и закрытии дверей, изменении статусов оплаты, истечении сроков хранения и возвратах.
📌 Поэтому в #PostamatGA начнём с простой C4-схемы и будем постепенно развивать её до распределённой event-driven архитектуры.
На каждом шаге будем решать:
+ где достаточно синхронного API
+ где действительно нужен брокер
+ какие компоненты стоит выделить в микросервисы
+ как не потерять событие и не выполнить одну команду дважды
👉 С чем будем работать на проекте
1️⃣ Проектирование микросервисов
Как разделить систему на независимые части: отправления, ячейки, доступ к заказам, оплаты, уведомления, возвраты и управление устройствами.
2️⃣ API Gateway
Единая точка входа для приложений пользователей и курьеров.
Отдельно разберём, должен ли постамат взаимодействовать через тот же API Gateway или для устройств нужен отдельный контур.
3️⃣ Интеграции
Подключение интернет-магазинов, маркетплейсов, платёжных систем, курьерских служб и самих постаматов.
4️⃣ Брокеры RabbitMQ и Kafka
Какие события передавать через брокер, где оставить синхронные API и какой брокер лучше подходит под разные сценарии системы.
5️⃣ Команды и события
Чем команда «Открыть ячейку» отличается от события «Ячейка открыта» и почему неправильная модель сообщений создаёт связанность между сервисами.
6️⃣ Оркестрация vs хореография
Как управлять процессами доставки, получения и возврата заказа.
7️⃣ Надёжность обработки процессов
Идемпотентность, retry, DLQ, Transactional Outbox, порядок сообщений и восстановление после сбоев.
8️⃣ Схемы архитектуры в C4
Будем постепенно развивать одну C4/Container-схему и показывать, как каждое решение меняет архитектуру проекта.
Всё как обычно: будем делать схемы, продумывать потоки данных и разбирать, почему одно архитектурное решение здесь работает лучше другого.
👉 Хотите участвовать?
Подписывайтесь на @getanalysts и следите за хэштегами #PostamatGA и #АрхитектураGA.
Добро пожаловать в команду нового проекта! 🤝
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍13❤🔥2
🎒💐 День знаний, которого, скорее всего, не будет у моих детей 😭💐
Сегодня с утра половина российских рабочих чатов выглядит примерно так:
— Буду после 11:00, у ребёнка линейка.
— Я тоже на линейке, к 13 буду.
— И я.
— Понятно. До обеда никого не ищем 😃
По улицам идут дети с огромными букетами, первоклассники теряются среди бантов и школьной формы, а родители делают примерно 700 одинаковых фотографий у школы ❤️🔥
А я с радостью и лёгкой ностальгией смотрю сегодня на фотографии друзей, родственников и коллег из GetAnalyst.
Мне завидно, друзья. У вас есть возможность вместе прожить эту общую атмосферу настоящего праздника и нового старта.
🇺🇸 В США первое сентября — просто ещё один день в календаре.
Здесь нет единого Дня знаний и привычных нам торжественных линеек. В разных штатах и школьных округах занятия начинаются в разное время.
В Сан-Диего дети в этом году учатся уже с 10 августа.
В Сан-Франциско — с 17 августа.
А в Нью-Йорке первый учебный день будет только 10 сентября.
Никакого общего первого звонка.
Никаких обязательных белых бантов.
Никаких гладиолусов размером с первоклассника 🥲
❤️🔥 Я правда скучаю по тому самому 1 сентября.
Для меня оно всегда было вторым Новым годом: новым стартом, новым этапом и даже во взрослом возрасте — поводом для очередного учебного или карьерного рывка.
Даже период активного найма почему-то начинается именно после этой даты.
Не хватает мне всей этой суеты 😃
Потому что первое сентября мгновенно возвращает в детство:
📚 запах новых учебников
📓 идеально чистый дневник, в котором пока нет ни одной оценки
✏️ новые ручки и тетради, которыми жалко пользоваться
💐 букет, за которым почти не видно меня
🎒 надежда начать учебный год без троек и забытых ДЗ
Но День знаний сегодня не только у школьников, студентов и родителей, которые официально отсутствуют на работе до обеда.
👉 Если вы читаете GetAnalyst — это и ваш праздник тоже.
Вы здесь изучаете ИИ, API, базы данных, интеграции, архитектуру, брокеры и ещё десятки тем, о существовании которых в школе нас почему-то не предупредили 🥲
Просто вместо букваря у нас OpenAPI.
Вместо задачника — реальные проекты.
Вместо контрольной — техническое интервью.
А вместо фразы «Выйди к доске» — «Сделай шаринг экрана» 😅
Так что поздравляю всех нас вечных студентов с Днём знаний! ❤️🔥
Пусть новые знания превращаются не в оценки, а в сильные проекты, уверенные собеседования, новые должности и зарплаты 🚀
Сегодня с утра половина российских рабочих чатов выглядит примерно так:
— Буду после 11:00, у ребёнка линейка.
— Я тоже на линейке, к 13 буду.
— И я.
— Понятно. До обеда никого не ищем 😃
По улицам идут дети с огромными букетами, первоклассники теряются среди бантов и школьной формы, а родители делают примерно 700 одинаковых фотографий у школы ❤️🔥
А я с радостью и лёгкой ностальгией смотрю сегодня на фотографии друзей, родственников и коллег из GetAnalyst.
Мне завидно, друзья. У вас есть возможность вместе прожить эту общую атмосферу настоящего праздника и нового старта.
🇺🇸 В США первое сентября — просто ещё один день в календаре.
Здесь нет единого Дня знаний и привычных нам торжественных линеек. В разных штатах и школьных округах занятия начинаются в разное время.
В Сан-Диего дети в этом году учатся уже с 10 августа.
В Сан-Франциско — с 17 августа.
А в Нью-Йорке первый учебный день будет только 10 сентября.
Никакого общего первого звонка.
Никаких обязательных белых бантов.
Никаких гладиолусов размером с первоклассника 🥲
❤️🔥 Я правда скучаю по тому самому 1 сентября.
Для меня оно всегда было вторым Новым годом: новым стартом, новым этапом и даже во взрослом возрасте — поводом для очередного учебного или карьерного рывка.
Даже период активного найма почему-то начинается именно после этой даты.
Не хватает мне всей этой суеты 😃
Потому что первое сентября мгновенно возвращает в детство:
📚 запах новых учебников
📓 идеально чистый дневник, в котором пока нет ни одной оценки
✏️ новые ручки и тетради, которыми жалко пользоваться
💐 букет, за которым почти не видно меня
🎒 надежда начать учебный год без троек и забытых ДЗ
Но День знаний сегодня не только у школьников, студентов и родителей, которые официально отсутствуют на работе до обеда.
👉 Если вы читаете GetAnalyst — это и ваш праздник тоже.
Вы здесь изучаете ИИ, API, базы данных, интеграции, архитектуру, брокеры и ещё десятки тем, о существовании которых в школе нас почему-то не предупредили 🥲
Просто вместо букваря у нас OpenAPI.
Вместо задачника — реальные проекты.
Вместо контрольной — техническое интервью.
А вместо фразы «Выйди к доске» — «Сделай шаринг экрана» 😅
Так что поздравляю всех нас вечных студентов с Днём знаний! ❤️🔥
Пусть новые знания превращаются не в оценки, а в сильные проекты, уверенные собеседования, новые должности и зарплаты 🚀
❤70❤🔥11
🧐 Нужен ли здесь брокер? Разбор реальной задачи ⁉️
Начинаем проектировать архитектуру #PostamatGA.
На первом черновике схемы уже есть основные компоненты.
Ваша задача — определить, где нужен брокер.
Не просто поставить Kafka между всеми сервисами, а понять, какую проблему она должна решить 😃
📌 Основной сценарий
Пользователь оформил заказ в маркетплейсе и выбрал доставку через постамат.
Маркетплейс передал в нашу платформу данные об отправлении. Далее курьер приезжает к постамату, чтобы загрузить его.
1️⃣ Курьер сканирует QR-код посылки
2️⃣ Система резервирует свободную ячейку подходящего размера
3️⃣ Постамату отправляется команда открыть ячейку
4️⃣ Курьер загружает посылку. После чего постамат сообщает серверу, что посылка внутри
5️⃣ Отправление получает статус «Готово к получению», пользователю отправляется одноразовый код + QR
6️⃣ Пользователь вводит код.
Система проверяет его, после чего отправляет команду открыть ячейку
7️⃣ Когда дверца закрыта и посылки внутри больше нет, отправление получает статус «Выдано».
Если посылку не забрали за 72 часа, запускается процесс возврата.
⚠️ Что может пойти не так?
▫️ постамат временно потерял связь
▫️ одно событие от устройства пришло несколько раз
▫️ команда открытия ячейки была доставлена повторно
▫️ сервис уведомлений недоступен
▫️ получение и запуск возврата произошли почти одновременно
При этом:
✔️ одну ячейку нельзя назначить двум отправлениям одновременно
✔️ недоступность уведомлений не должна блокировать загрузку посылки
✔️ повторная команда не должна неконтролируемо открыть ячейку
✔️ от ввода корректного кода до открытия ячейки должно пройти не более 5-ти секунд
❓ Определите:
1. Куда вы добавили бы брокер первым?
2. Какие события через него передавали бы?
3. Какие проблемы это решит?
Попробуйте решить, а затем сверяйтесь с разбором ниже 👇
.
.
.
.
.
.
.
.
.
✅ Разбор решения
Единственного правильного варианта здесь нет. Но брокер должен появляться там, где нам нужны независимость компонентов, гарантированная доставка и повторная обработка.
1️⃣ Отправка уведомлений
Когда отправление получает статус «Готово к получению», сервис отправлений публикует событие:
ShipmentReady
Сервис управления доступом получает его, создаёт одноразовый код и QR-код, после чего формирует событие:
PickupAccessCreated
Сервис уведомлений получает его через брокер и отправляет данные пользователю.
Если сервис уведомлений или внешний SMS/Push-провайдер временно недоступен, загрузка посылки не блокируется. Сообщение остаётся в очереди и будет обработано позже.
2️⃣ События от постамата
Постамат передаёт на Backend технические события:
▫️ CellOpened — ячейка открыта
▫️ CellClosed — дверца закрыта
▫️ ParcelDetected — посылка находится внутри
▫️ ParcelRemoved — посылка извлечена
❗️Закрытая дверца сама по себе не означает, что посылка была загружена или получена. Поэтому состояние двери и наличие посылки — это разные события, которые надо контроллировать бэком.
Далее, например, событие "посылка извлечена" могут одновременно использовать:
→ сервис отправлений — чтобы изменить статус
→ сервис постаматов — чтобы освободить ячейку
→ сервис аналитики — чтобы сохранить статистику
→ сервис уведомлений — чтобы оповестить пользователя о состоянии посылки
3️⃣ Запуск возврата
Планировщик задач контролирует срок хранения отправления.
Когда 72 часа истекли, он публикует событие:
ReturnRequired
Сервис возвратов получает его через брокер и запускает процесс возврата, вкключающий смену статуса, уведомление пользователя, оповещение маркетплейста.
При этом брокер не должен использоваться как таймер на 72 часа. Срок контролирует планировщик, а брокер доставляет уже созданное событие.
Если вдруг покупатель всё же придёт за отправлением раньше забора посылки курьером, то процесс возврата должен быть прерван - это отдельное событие к обработке для брокера.
Что брокер не решает?
❌ Дубли событий
❌ Повторное открытие
❌ Потерю связи с устройством
❌ Одновременное получение и возврат
❌ Назначение одной ячейки двум отправлениям
#PostamatGA #АрхитектураGA
Начинаем проектировать архитектуру #PostamatGA.
На первом черновике схемы уже есть основные компоненты.
Ваша задача — определить, где нужен брокер.
Не просто поставить Kafka между всеми сервисами, а понять, какую проблему она должна решить 😃
📌 Основной сценарий
Пользователь оформил заказ в маркетплейсе и выбрал доставку через постамат.
Маркетплейс передал в нашу платформу данные об отправлении. Далее курьер приезжает к постамату, чтобы загрузить его.
1️⃣ Курьер сканирует QR-код посылки
2️⃣ Система резервирует свободную ячейку подходящего размера
3️⃣ Постамату отправляется команда открыть ячейку
4️⃣ Курьер загружает посылку. После чего постамат сообщает серверу, что посылка внутри
5️⃣ Отправление получает статус «Готово к получению», пользователю отправляется одноразовый код + QR
6️⃣ Пользователь вводит код.
Система проверяет его, после чего отправляет команду открыть ячейку
7️⃣ Когда дверца закрыта и посылки внутри больше нет, отправление получает статус «Выдано».
Если посылку не забрали за 72 часа, запускается процесс возврата.
⚠️ Что может пойти не так?
▫️ постамат временно потерял связь
▫️ одно событие от устройства пришло несколько раз
▫️ команда открытия ячейки была доставлена повторно
▫️ сервис уведомлений недоступен
▫️ получение и запуск возврата произошли почти одновременно
При этом:
✔️ одну ячейку нельзя назначить двум отправлениям одновременно
✔️ недоступность уведомлений не должна блокировать загрузку посылки
✔️ повторная команда не должна неконтролируемо открыть ячейку
✔️ от ввода корректного кода до открытия ячейки должно пройти не более 5-ти секунд
❓ Определите:
1. Куда вы добавили бы брокер первым?
2. Какие события через него передавали бы?
3. Какие проблемы это решит?
Попробуйте решить, а затем сверяйтесь с разбором ниже 👇
.
.
.
.
.
.
.
.
.
✅ Разбор решения
1️⃣ Отправка уведомлений
Когда отправление получает статус «Готово к получению», сервис отправлений публикует событие:
ShipmentReady
Сервис управления доступом получает его, создаёт одноразовый код и QR-код, после чего формирует событие:
PickupAccessCreated
Сервис уведомлений получает его через брокер и отправляет данные пользователю.
Если сервис уведомлений или внешний SMS/Push-провайдер временно недоступен, загрузка посылки не блокируется. Сообщение остаётся в очереди и будет обработано позже.
2️⃣ События от постамата
Постамат передаёт на Backend технические события:
▫️ CellOpened — ячейка открыта
▫️ CellClosed — дверца закрыта
▫️ ParcelDetected — посылка находится внутри
▫️ ParcelRemoved — посылка извлечена
❗️Закрытая дверца сама по себе не означает, что посылка была загружена или получена. Поэтому состояние двери и наличие посылки — это разные события, которые надо контроллировать бэком.
Далее, например, событие "посылка извлечена" могут одновременно использовать:
→ сервис отправлений — чтобы изменить статус
→ сервис постаматов — чтобы освободить ячейку
→ сервис аналитики — чтобы сохранить статистику
→ сервис уведомлений — чтобы оповестить пользователя о состоянии посылки
3️⃣ Запуск возврата
Планировщик задач контролирует срок хранения отправления.
Когда 72 часа истекли, он публикует событие:
ReturnRequired
Сервис возвратов получает его через брокер и запускает процесс возврата, вкключающий смену статуса, уведомление пользователя, оповещение маркетплейста.
При этом брокер не должен использоваться как таймер на 72 часа. Срок контролирует планировщик, а брокер доставляет уже созданное событие.
Если вдруг покупатель всё же придёт за отправлением раньше забора посылки курьером, то процесс возврата должен быть прерван - это отдельное событие к обработке для брокера.
Что брокер не решает?
❌ Дубли событий
❌ Повторное открытие
❌ Потерю связи с устройством
❌ Одновременное получение и возврат
❌ Назначение одной ячейки двум отправлениям
#PostamatGA #АрхитектураGA
❤17🔥13
🔵🔥 Нотация C4 для архитектуры: теория, 7 примеров и практический видеоурок 🔥🔵
Как показать архитектуру системы так, чтобы её поняли и бизнес, и разработчики?
Нотация моделирования архитектуры C4 поможет.
Собрала в одном посте все материалы по C4: от теории до готовых схем с конкретными примерами 👇👇👇
🎬 Практический видеоурок: C4 за 90 минут
Разбираем уровни Context, Container и Component и наглядно показываем, как проектировать архитектуру на примере двух реальных проектов.
К уроку — полный комплект схем C4 / Context и C4 / Container по каждому проекту: можно посмотреть процесс, а затем изучить результат.
⏯ YouTube
⏯ RuTube
⏯ VK Video
⏯ Telegram
🔗 Статья с доп. материалами
📚 Коротко по теории
C4 — модель описания архитектуры системы на четырёх уровнях.
Каждый следующий раскрывает детали предыдущего.
🔗 Официальный сайт C4
🔗 Нотация С4 — примеры диаграмм и инструменты
1️⃣ C4 / Context — контекст
Система, её интеграции и пользователи.
✔️ Главный прямоугольник - наша система
✔️ Серые прямоугольники вокруг - внешние
✔️ Пользователи
👩💻 Полезна бизнес- и техническим специалистам
2️⃣ C4 / Container — контейнеры
Независимые по коду приложения в системе, детализация главного прямоугольника c C4 / Context.
✔️ Пользователи и внешние системы с уровня C4 / Context
✔️ Мобильные, веб- и десктоп приложения
✔️ Сервер-приложения: монолит, сервисы, микросервисы, API Gateway
✔️ Базы данных и файловые хранилища
✔️ Виды API
✔️ Технологии (языки программирования, СУБД, протоколы для API и др)
✔️ Базы данных и файловые хранилища
✔️ Очереди и брокеры
👩💻 Полезна архитекторам, разработчикам и системным аналитикам.
3️⃣ C4 / Component — компоненты
Модули кода и зависимости между ними.
Детализирует один из контейнеров с C4 / Container.
На каждый контейнер своя схема.
Отлично подходит для детализации модульного монолита.
4️⃣ C4 / Code — код
На этом уровне детализируют каждый компонент c C4 / Component, показывая его реализацию в коде. Обычно это UML-диаграмма классов или другая визуализация.
🛠 Основные инструменты:
🔗 Draw.io - графический
🔗 Structurizr - код
🔗 MermaidChart - код
🔗 PlantUML - код, самый неудобный
Ключевые элементы нотации для каждого уровня прикреплены в картинках к посту.
Необязательно рисовать все четыре уровня: выбирайте нужную детализацию под задачу и аудиторию.
🖼 Примеры схем архитектуры
Можно изучать и использовать как ориентир для своих проектов.
В подборке есть и монолиты, и микросервисные системы с брокерами.
🔗 RideFlow — заказ такси
🔗 TelMed — телемедицина
🔗 BookingGA — сервис аренды недвижимости
🔗 GreenChargeGA — зарядки для электроавто
🔗 CityGA — поиск мероприятий в городе
🔗 AdFlowGA — рекламный сервис
🔗 Пример архитектуры C4 в Mir
🔖 Это максимально полный гайд по C4.
Сохраняйте, чтобы теория, примеры и практика по C4 были под рукой, когда понадобится спроектировать архитектуру.
#АрхитектураGA
📱 Tg | 💙 ВК | 💬 Max
Как показать архитектуру системы так, чтобы её поняли и бизнес, и разработчики?
Нотация моделирования архитектуры C4 поможет.
Собрала в одном посте все материалы по C4: от теории до готовых схем с конкретными примерами 👇👇👇
🎬 Практический видеоурок: C4 за 90 минут
Разбираем уровни Context, Container и Component и наглядно показываем, как проектировать архитектуру на примере двух реальных проектов.
К уроку — полный комплект схем C4 / Context и C4 / Container по каждому проекту: можно посмотреть процесс, а затем изучить результат.
⏯ YouTube
⏯ RuTube
⏯ VK Video
⏯ Telegram
📚 Коротко по теории
C4 — модель описания архитектуры системы на четырёх уровнях.
Каждый следующий раскрывает детали предыдущего.
1️⃣ C4 / Context — контекст
Система, её интеграции и пользователи.
✔️ Главный прямоугольник - наша система
✔️ Серые прямоугольники вокруг - внешние
✔️ Пользователи
👩💻 Полезна бизнес- и техническим специалистам
2️⃣ C4 / Container — контейнеры
Независимые по коду приложения в системе, детализация главного прямоугольника c C4 / Context.
✔️ Пользователи и внешние системы с уровня C4 / Context
✔️ Мобильные, веб- и десктоп приложения
✔️ Сервер-приложения: монолит, сервисы, микросервисы, API Gateway
✔️ Базы данных и файловые хранилища
✔️ Виды API
✔️ Технологии (языки программирования, СУБД, протоколы для API и др)
✔️ Базы данных и файловые хранилища
✔️ Очереди и брокеры
👩💻 Полезна архитекторам, разработчикам и системным аналитикам.
3️⃣ C4 / Component — компоненты
Модули кода и зависимости между ними.
Детализирует один из контейнеров с C4 / Container.
На каждый контейнер своя схема.
Отлично подходит для детализации модульного монолита.
4️⃣ C4 / Code — код
На этом уровне детализируют каждый компонент c C4 / Component, показывая его реализацию в коде. Обычно это UML-диаграмма классов или другая визуализация.
🛠 Основные инструменты:
Ключевые элементы нотации для каждого уровня прикреплены в картинках к посту.
Необязательно рисовать все четыре уровня: выбирайте нужную детализацию под задачу и аудиторию.
🖼 Примеры схем архитектуры
Можно изучать и использовать как ориентир для своих проектов.
В подборке есть и монолиты, и микросервисные системы с брокерами.
Сохраняйте, чтобы теория, примеры и практика по C4 были под рукой, когда понадобится спроектировать архитектуру.
#АрхитектураGA
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍9🔥6
🧩 7 архитектурных решений, которые аналитик принимает раньше архитектора
«Пользователь заказал товар, курьер загрузил посылку в постамат, пользователь её забрал».
Один процесс. Но сколько вопросов появляется, когда начинаешь его проектировать:
▫️ какие микросервисы нужны
▫️ где хранить данные об отправлениях, ячейках и оплатах
▫️ какие API использовать
▫️ где ждать ответ, а где передавать событие через брокер
▫️ кто вообще имеет право открыть ячейку
И это вопросы, с которыми системный аналитик сталкивается уже при проработке требований — ещё до готовой схемы архитектуры.
Конечно, архитектурные решения принимаются вместе с архитектором и разработчиками.
👉 Но аналитику важно понимать, что именно мы выбираем и как этот выбор влияет на работу системы.
В карточках разбираем 7 таких решений на примере проекта #PostamatGA. Без попытки поставить Kafka между всеми прямоугольниками 😃
📌 Сохраните последнюю карточку — пригодится при обсуждении следующей большой фичи или нового проекта.
#АрхитектураGA
📱 Tg | 💙 ВК | 💬 Max
«Пользователь заказал товар, курьер загрузил посылку в постамат, пользователь её забрал».
Один процесс. Но сколько вопросов появляется, когда начинаешь его проектировать:
▫️ какие микросервисы нужны
▫️ где хранить данные об отправлениях, ячейках и оплатах
▫️ какие API использовать
▫️ где ждать ответ, а где передавать событие через брокер
▫️ кто вообще имеет право открыть ячейку
И это вопросы, с которыми системный аналитик сталкивается уже при проработке требований — ещё до готовой схемы архитектуры.
Конечно, архитектурные решения принимаются вместе с архитектором и разработчиками.
👉 Но аналитику важно понимать, что именно мы выбираем и как этот выбор влияет на работу системы.
В карточках разбираем 7 таких решений на примере проекта #PostamatGA. Без попытки поставить Kafka между всеми прямоугольниками 😃
📌 Сохраните последнюю карточку — пригодится при обсуждении следующей большой фичи или нового проекта.
#АрхитектураGA
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤🔥2
Вы уже уверенный Middle, Middle+ или Senior. Понимаете процессы, работаете с интеграциями и API.
Микросервисы в теории понятны.
Знаете, зачем нужна Kafka.
Но как спроектировать реальный асинхронный процесс, в котором участвуют несколько сервисов?
🔴 Почему, например, остановка одного сервиса всё ещё блокирует процесс, несмотря на Kafka?
Потому что асинхронный обмен не отменяет зависимость между шагами. Если следующий шаг требует результата предыдущего, сообщение в брокере этот результат не заменит.
Нужно определить, где процесс может продолжаться независимо, где должен ждать и что произойдёт, если ожидание затянется.
От определения микросервисов и выбора технологий — к проектированию процессов между ними. На этом строится наш практический курс «Проектирование архитектуры» для системных аналитиков уровня уверенный Middle / Middle+ / Senior.
👉 Посмотреть программу
Что будем делать
▫️ Проектировать архитектуру с нуля: выбирать между монолитом, сервисной и микросервисной архитектурой.
▫️ Описывать архитектуру упрощенными схемами и с помощью нотации C4, чтобы обсуждать решения с командой.
▫️ Выбирать способы взаимодействия: REST, GraphQL, WebSocket и другие.
▫️ Проектировать асинхронные взаимодействия с Kafka и RabbitMQ, работать с вебхуками и описывать требования для разработчиков.
После практики с нами
✔️ Приходите на архитектурный митинг и ведёте его, а не просто участвуете.
✔️ Обосновываете повышение грейда конкретными навыками.
✔️ Проходите технические собеседования и сами выбираете оффер.
✔️ Переходите из проектной разработки в продукт с SOA или микросервисами.
✔️ Закрываете пробелы, которые давно хотели закрыть, и собираете своё публичное портфолио.
Процесс
12 онлайн-практикумов и теоретические модули в записи: разбираем демонстрационный проект и применяем подходы на дополнительном проекте для закрепления навыков.
✅ Домашние задания и обратная связь — на всех тарифах. Глубина проверки зависит от тарифа.
🗓 Старт 15 сентября
Предзапись до 11 сентября
🎁 скидка + мини-курс «Интеграции 4.0 — продвинутый уровень» в подарок
👉 Посмотреть программу и записаться
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Forwarded from 👩🏻💻 Подкаст Системных Аналитиков | GetAnalyst
щё недавно системный аналитик описывал требования и передавал их разработчикам. Теперь с помощью вайбкодинга он может сам превратить идею и требования в работающее приложение.
Означает ли это, что граница между аналитиком и программистом постепенно исчезает? И станет ли умение создавать решения с помощью ИИ новым обязательным навыком аналитика?
В этом выпуске проверяем возможности вайбкодинга на реальном кейсе.
Видео с демо (рекомендуется):
⏯ YouTube
⏯ RuTube
⏯ VK Video
⏯ Telegram
Аудио:
⏯ Apple Podcast
⏯ Яндекс.Музыка
⏯ Castbox
⏯ Звук
⏯ Spotify
GetAnalyst — база знаний с нереальным количеством практики в открытом доступе 😍
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7🔥4😁3❤2👍2