Открытый вебинар «Тестирование в микросервисной архитектуре» 27.09.2022 в 20:00 | OTUS >
Проходил 27 сентября 2022 года в 20:00

Открытый вебинар
Тестирование в микросервисной архитектуре

Открытый вебинар онлайн

На открытом уроке расскажем про различные типы тестов и инструментов, используемых в тестировании. Как микросервисная архитектура изменила подходы к тестированию.

Запись

О курсе

Microservice Architecture
162 000 ₽
4 месяца
Начало 25 июня

Для кого этот курс

Программа создана специально для back-end разработчиков, Team Lead и администраторов, готовых освоить Best Practice по разработке архитектуры программного обеспечения и сложных распределенных и отказоустойчивых систем.
Сегодня профессиональные навыки разработки архитектуры программного обеспечения являются одной из главных компетенций специалистов по созданию масштабируемых и отказоустойчивых приложений.

Необходимые знания

Знание и опыт работы в одном из следующих стеков: Java (spring …
Программа курса
Модуль 1
Базовые паттерны микросервисных архитектур
Модуль 2
Инфраструктура микросервисов
Модуль 3
Инструменты наблюдаемости
Модуль 4
Коммуникационные паттерны
Модуль 5
Распределенные системы и хранилища
Модуль 6
Проектная работа
Базовые паттерны микросервисных архитектур
В этом модуле вы рассмотрите:
- плюсы и минусы микросервисной архитектуры
- авторизацию и аутентификацию в микросервисной архитектуре и т.д.
Плюсы и минусы микросервисной архитектуры
рассмотреть плюсы и минусы монолитов;
рассмотреть плюсы и минусы микросервисной архитектуры;
рассмотреть сновные паттерны микросервисной архитектуры.
25 июня, 20:00 — 21:30
Лектор: Наталья Чалкова
От монолита к микросервису
рассмотреть паттерн Strangler;
рассмотреть паттерны работы с данными при рефакторинге.
2 июля, 20:00 — 21:30
Паттерны декомпозиции микросервисов // ДЗ
объяснить как декомпозировать на сервисы.
7 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Паттерны декомпозиции микросервисов. В качестве архитектурной задачи возьмем кейс интернет-магазина.
Ката ***I'll Have the BLT*** по ссылке https://nealford.com/katas/list.html
Во всех последующих ДЗ будем работать над данным кейсом.


Для архитектурной задачи используйте один из паттернов декомпозиции и предложите вариант разбиения на микросервисы.

**
В качестве решения предоставьте:**
1) Пользовательские сценарии.
2) Схему взаимодействия сервисов – C4 model контейнерная диаграмма.
Описание каждого микросервиса по одному из шаблонов на выбор (в материалах занятия), включая:
3) Для каждого микросервиса опишите его назначение и зону ответственности.
4) Опишите контракты взаимодействия микросервисов друг с другом.
Атрибуты качества и основы тестирования. Введение в тестирование микросервисных архитектур (часть 1)
понимать атрибуты качества архитектуры;
овладеть основными подходами в тестировании;
разбираться в особенностях тестирования микросервисов.
9 июля, 20:00 — 21:30
Практики тестирования микросервисных архитектур (часть 2)
разобрать концепции тестирования микросервисов;
определить подходы тестирования микросервисов.
14 июля, 20:00 — 21:30
Авторизация и аутентификация в микросервисной архитектуре
рассмотреть основные паттерны аутентификации и авторизации, JWT токены.
16 июля, 20:00 — 21:30
Инфраструктура микросервисов
В данном модуле будут рассмотрены основы работы с инфраструктурными паттернами, принципы работы с Docker и базовые сущности Kubernetes
Инфраструктурные паттерны: CI/CD, дистрибуция артефактов, конфигурирование приложений
использовать инфраструктурные паттерны для организации CI/CD процессов и размещения сервисов;
использовать подходы к конфигурированию сервисов.
21 июля, 20:00 — 21:30
Инфраструктурные паттерны: паттерны развертывания, service discovery, health-checks
рассмотреть паттерны деплоя;
Service Discovery;
Health check.
23 июля, 20:00 — 21:30
Основы работы с Docker // ДЗ
обсудить контейнеризацию;
рассмотреть компоненты docker.
28 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Приложение в docker-образ и запушить его на Dockerhub . В этом и последующих ДЗ у вас будет два варианта задания на выбор:
- Вариант с кодом для глубокого погружения в тему
- Вариант без кода, сфокусированный на представлении архитектуры


**! Важно !**

**В проектной работе необходимо написание кода**. Если вы планируете выполнять проект, рекомендуем выбирать вариант ДЗ с кодом - это облегчит подготовку к защите.

---

**Вариант 1 (С КОДОМ)**

Шаг 1. Создать минимальный сервис, который
1) отвечает на порту 8000
2) имеет http-метод:
- GET /health/
- RESPONSE: {"status": "OK"}


Шаг 2. Cобрать локально образ приложения в докер контейнер под архитектуру AMD64.

Запушить образ в dockerhub


На выходе необходимо предоставить
1) имя репозитория и тэг на Dockerhub
2) ссылку на github c Dockerfile, либо приложить Dockerfile в ДЗ


*Обратите внимание*, что при сборке на m1 при запуске вашего контейнера на стандартных платформах будет ошибка такого вида:

*standard_init_linux.go:228: exec user process caued: exec format error*


Для сборки рекомендую указать тип платформы linux/amd64:
*docker build --platform linux/amd64 -t tag*


Более подробно можно прочитать в статье: https://programmerah.com/how-to-solve-docker-run-error-standard_init_linux-go219-exec-user-process-caused-exec-format-error-39221/

---

**Вариант 2 (БЕЗ КОДА)**

**Необходимо подготовить:**

Деплоймент диаграмму проекта включая сервис аутентификации в С4 model.
Архитектура Kubernetes
рассмотреть архитектуру Кubernetes и минимальную единицу рабочей нагрузки - Pod.
30 июля, 20:00 — 21:30
Базовые сущности Кubernetes: ReplicaSet, Deployment, Service, Ingress // ДЗ
рассмотреть базовые сущности Кubernetes: ReplicaSet, Deployment,Service, Ingress.
4 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Основы работы с Kubernetes. **Вариант 1 (С КОДОМ)**

**Шаг 1.** Создать минимальный сервис, который
1) отвечает на порту 8000
2) имеет http-метод


GET /health/


RESPONSE: {"status": "OK"}


**Шаг 2.** Cобрать локально образ приложения в докер.

Запушить образ в dockerhub


**Шаг 3.** Написать манифесты для деплоя в k8s для этого сервиса.


Манифесты должны описывать сущности: Deployment, Service, Ingress.

В Deployment могут быть указаны Liveness, Readiness пробы.

Количество реплик должно быть не меньше 2. Image контейнера должен быть указан с Dockerhub.


Хост в ингрессе должен быть arch.homework. В итоге после применения манифестов GET запрос на http://arch.homework/health должен отдавать {“status”: “OK”}.


**Шаг 4.** На выходе предоставить

0) ссылку на github c манифестами. Манифесты должны лежать в одной директории, так чтобы можно было их все применить одной командой kubectl apply -f .

1) url, по которому можно будет получить ответ от сервиса (либо тест в postmanе).


*Задание со звездой*:

В Ingress-е должно быть правило, которое форвардит все запросы с /otusapp/{student name}/* на сервис с rewrite-ом пути. Где {student name} - это имя студента.

Например: curl arch.homework/otusapp/aeugene/health -> рерайт пути на arch.homework/health


**Рекомендации по форме сдачи дз:**
- использовать nginx ingress контроллер, установленный через хелм, а не встроенный в миникубик:
kubectl create namespace m && helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx/ && helm repo update && helm install nginx ingress-nginx/ingress-nginx --namespace m -f nginx-ingress.yaml (файл приложен к занятию)
- https://kubernetes.github.io/ingress-nginx/user-guide/basic-usage/
необходимо в новых версиях nginx добавлять класс ингресса
ingressClassName: nginx
- прикладывать к 2 дз урл для проверки: curl http://arch.homework/health или как указано в дз со *.

К 3 ДЗ и далее прикладывать коллекцию postman и проверять ее работу через newman run имя_коллекции (прикладывать кроме команд разворачивания приложения, команду удаления)
- прописать у себя в /etc/hosts хост arch.homework с адресом своего миникубика (minikube ip), чтобы обращение было по имени хоста в запросах, а не IP.
- Обратите внимание, что при сборке на m1 при запуске вашего контейнера на стандартных платформах будет ошибка такого вида:
standard_init_linux.go:228: exec user process caued: exec format error


Для сборки рекомендую указать тип платформы linux/amd64:
docker build --platform linux/amd64 -t tag .


Более подробно можно прочитать в статье: https://programmerah.com/how-to-solve-docker-run-error-standard_init_linux-go219-exec-user-process-caused-exec-format-error-39221/

---

**Вариант 2 (БЕЗ КОДА)**

Предложить тест на основные сущности кубера из 10 вопросов.
Базовые сущности Kubernetes: Persistent Volume, Persistent Volume Claim, StatefulSet, ConfigMap, Secret
рассмотреть базовые сущности Кubernetes: Persistent Volume, Persistent Volume Claim, StatefulSet, ConfigMap, Secret.
6 августа, 20:00 — 21:30
Базовые сущности Кubernetes: Job, CronJob, DaemonSet
рассмотреть базовые сущности Кubernetes: Job, CronJob, DaemonSet.
11 августа, 20:00 — 21:30
Работа с Helm-ом // ДЗ
рассмотреть работу с Helm;
рассмотреть ArgoCD.
13 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Инфраструктурные паттерны. **Вариант 1 (С КОДОМ)**

Сделать простейший RESTful CRUD по созданию, удалению, просмотру и обновлению пользователей.

Пример API - https://app.swaggerhub.com/apis/otus55/users/1.0.0


Добавить базу данных для приложения.

Конфигурация приложения должна хранится в Configmaps.

Доступы к БД должны храниться в Secrets.

Первоначальные миграции должны быть оформлены в качестве Job-ы, если это требуется.

Ingress-ы должны также вести на url arch.homework/ (как и в прошлом задании)


На выходе должны быть предоставлена
1) ссылка на директорию в github, где находится директория с манифестами кубернетеса
2) инструкция по запуску приложения.
- команда установки БД из helm, вместе с файлом values.yaml.
- команда применения первоначальных миграций
- команда kubectl apply -f, которая запускает в правильном порядке манифесты кубернетеса
3) Postman коллекция, в которой будут представлены примеры запросов к сервису на создание, получение, изменение и удаление пользователя. Важно: в postman коллекции использовать базовый url - arch.homework.
4) Проверить корректность работы приложения используя созданную коллекцию newman run коллекция_постман и приложить скриншот/вывод исполнения корректной работы


*Задание со звездочкой:*

Добавить шаблонизацию приложения в helm чартах

---

**Вариант 2 (БЕЗ КОДА)**

В данном ДЗ нужно будет более детально показать как произошло распределение моделей данных(сущностей) между микросервисами.

Подготовить:

ER-диаграмму структуры базы данных (БД) для микросервисов, на которой будут отражены связи между сущностями, ограничения (констрейнты), ключи(foreign keys, primary keys).

Желательно подготовить ddl скрипты проектируемой структуры БД для одного или нескольких ключевых микросервисов.
Kubernetes Q&A
рассмотреть все интересующие вопросы по обучению и ДЗ за прошедший модуль.
18 августа, 20:00 — 21:30
Инструменты наблюдаемости
В этом модуле вы рассмотрите необходимые инструменты наблюдаемости.
Мониторинг и алертинг
рассмотреть мониторинг и алертинг.
20 августа, 20:00 — 21:30
Prometheus. Grafana // ДЗ
prometheus;
grafana;
alertManager;
promQL.
25 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Prometheus. Grafana. **Вариант 1 (С КОДОМ)**

Сделать дашборд в Графане, в котором были бы метрики с разбивкой по API методам:
1. Latency (response time) с квантилями по 0.5, 0.95, 0.99, max
2. RPS
3. Error Rate - количество 500ых ответов


Добавить в дашборд графики с метрикам в целом по сервису, взятые с nginx-ingress-controller:
1. Latency (response time) с квантилями по 0.5, 0.95, 0.99, max
2. RPS
3. Error Rate - количество 500ых ответов


Настроить алертинг в графане на Error Rate и Latency.


На выходе должно быть:

0) скриншоты дашборды с графиками в момент стресс-тестирования сервиса. Например, после 5-10 минут нагрузки.

1) json-дашборды.


*Задание со звездочкой*

Используя существующие системные метрики из кубернетеса, добавить на дашборд графики с метриками:
1. Потребление подами приложения памяти
2. Потребление подами приолжения CPU


Инструментировать базу данных с помощью экспортера для prometheus для этой БД.

Добавить в общий дашборд графики с метриками работы БД.

---

**Вариант 2 (БЕЗ КОДА)**

Подготовить постановку задачи для DevOps.

Предложить 2-3 варианта бизнес-метрик мониторинга, а также технических метрик мониторинга, которые должны будут обеспечить наблюдаемость за системой в процессе ее эксплуатации.
Системы логирования (ELK, EFK, Graylog2)
рассмотреть системы логирования (ELK, EFK);
изучить паттерн “агрегация логов” и инструменты для его применения;
изучить распределенную трассировку запросов.
27 августа, 20:00 — 21:30
Коммуникационные паттерны
В этом модуле вы рассмотрите асинхронный и синхронный API, основы Event Driven Architecture. На примере Kafka рассмотрите распределенные очереди сообщений. Рассмотрите паттерн Transactional Log и инструменты Change Data Capture. Проведете тестирование микросервисов
Backend for frontends. Apigateway // ДЗ
рассмотреть паттерны BFF и APIgateway.
8 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Backend for frontends. Apigateway. **Вариант 1 (С КОДОМ)**

Добавить в приложение аутентификацию и регистрацию пользователей.


Реализовать сценарий "Изменение и просмотр данных в профиле клиента".

Пользователь регистрируется. Заходит под собой и по определенному урлу получает данные о своем профиле. Может поменять данные в профиле. Данные профиля для чтения и редактирования не должны быть доступны другим клиентам (аутентифицированным или нет).


На выходе должны быть

0) описание архитектурного решения и схема взаимодействия сервисов (в виде картинки)

1) команда установки приложения (из helm-а или из манифестов). Обязательно указать в каком namespace нужно устанавливать.
1) команда установки api-gateway, если он отличен от nginx-ingress.
2) тесты постмана, которые прогоняют сценарий:
- регистрация пользователя 1
- проверка, что изменение и получение профиля пользователя недоступно без логина
- вход пользователя 1
- изменение профиля пользователя 1
- проверка, что профиль поменялся
- выход* (если есть)
- регистрация пользователя 2
- вход пользователя 2
- проверка, что пользователь2 не имеет доступа на чтение и редактирование профиля пользователя1.


В тестах обязательно
- наличие {{baseUrl}} для урла
- использование домена arch.homework в качестве initial значения {{baseUrl}}
- использование сгенерированных случайно данных в сценарии
- отображение данных запроса и данных ответа при запуске из командной строки с помощью newman.

---

**Вариант 2 (БЕЗ КОДА)**

**Необходимо подготовить:**

Диаграммы последовательности (сиквенс-диаграммы) реализующие сценарий аутентификации и следующий за ним ключевой сценарий из ДЗ1:
- Сценарий 1. Пользователь не аутентифицирован, проходит аутентификацию и дальше идет переход на выполнение ключевого сценария.
- Сценарий 2. Пользователь аутентифицирован, осуществляет попытку доступа к данным, которые ему не принадлежат или не доступны в виду ролевой модели.
Асинхронный и синхронный API
рассмотреть основные типы межсервисного взаимодействия;
обсудить версионирование API;
рассмотреть описание API.
10 сентября, 20:00 — 21:30
Event Driven Architecture
рассмотреть основы Event Driven Architecture.
15 сентября, 20:00 — 21:30
Распределенные очереди сообщений на примере Kafka и RabbitMQ
rabbitmq;
Kafka.
17 сентября, 20:00 — 21:30
GraphQL. gRPC
рассмотреть основные паттерны использования GraphQL. Основные паттерны использования gRPC.
22 сентября, 20:00 — 21:30
RESTful // ДЗ
рассмотреть Restful API, JSON-API, OData.
24 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Stream processing. **Вариант 1 (С КОДОМ)**

Реализовать сервис заказа. Сервис биллинга. Сервис нотификаций.


При создании пользователя, необходимо создавать аккаунт в сервисе биллинга. В сервисе биллинга должна быть возможность положить деньги на аккаунт и снять деньги.


Сервис нотификаций позволяет отправить сообщение на email. И позволяет получить список сообщений по методу API.


Пользователь может создать заказ. У заказа есть параметр - цена заказа.

Заказ происходит в 2 этапа:
1) сначала снимаем деньги с пользователя с помощью сервиса биллинга
2) отправляем пользователю сообщение на почту с результатами оформления заказа. Если биллинг подтвердил платеж, должно отправиться письмо счастья. Если нет, то письмо горя.


Упрощаем и считаем, что ничего плохого с сервисами происходить не может (они не могут падать и т.д.). Сервис нотификаций на самом деле не отправляет, а просто сохраняет в БД.


ТЕОРЕТИЧЕСКАЯ ЧАСТЬ:

0) Спроектировать взаимодействие сервисов при создании заказов. Предоставить варианты взаимодействий в следующих стилях в виде sequence диаграммы с описанием API на IDL:
- только HTTP взаимодействие
- событийное взаимодействие с использование брокера сообщений для нотификаций (уведомлений)
- Event Collaboration cтиль взаимодействия с использованием брокера сообщений
- вариант, который вам кажется наиболее адекватным для решения данной задачи. Если он совпадает одним из вариантов выше - просто отметить это.


ПРАКТИЧЕСКАЯ ЧАСТЬ:

Выбрать один из вариантов и реализовать его.

На выходе должны быть

I) описание архитектурного решения и схема взаимодействия сервисов (в виде картинки)

II) команда установки приложения (из helm-а или из манифестов). Обязательно указать в каком namespace нужно устанавливать.

III) тесты постмана, которые прогоняют сценарий:
1. Создать пользователя. Должен создаться аккаунт в биллинге.
2. Положить деньги на счет пользователя через сервис биллинга.
3. Сделать заказ, на который хватает денег.
4. Посмотреть деньги на счету пользователя и убедиться, что их сняли.
5. Посмотреть в сервисе нотификаций отправленные сообщения и убедиться, что сообщение отправилось
6. Сделать заказ, на который не хватает денег.
7. Посмотреть деньги на счету пользователя и убедиться, что их количество не поменялось.
8. Посмотреть в сервисе нотификаций отправленные сообщения и убедиться, что сообщение отправилось.


В тестах обязательно
- наличие {{baseUrl}} для урла
- использование домена arch.homework в качестве initial значения {{baseUrl}}
- отображение данных запроса и данных ответа при запуске из командной строки с помощью newman.

---

**Вариант 2 (БЕЗ КОДА)**

Сформировать формат сообщений, которые будут передаваться асинхронно между микросервисами (Json-схема и т.п.) с их описанием.
Service mesh на примере Istio
ответить на вопрос, что такое Service mesh?
рассказать об устройстве Istio;
рассказать о возможностях Istio и способах их настройки.
29 сентября, 20:00 — 21:30
Практика системного проектирования
отработать навыки системного проектирования на примере практических кейсов.
1 октября, 20:00 — 21:30
Распределенные системы и хранилища
В этом модуле вы рассмотрите распределенные системы, основные паттерны кэширования. Научитесь решать типичные проблемы, связанные с кэшированием и выбирать инструмент кэширования под задачу. Рассмотрите виды шаринга и проанализируете стратегии шардирования. Обсудите пример реализации своей CP системы и AP системы.
Введение в распределенные системы
рассмотреть распределенные системы.
6 октября, 20:00 — 21:30
Распределенные транзакции // ДЗ
выбрать стратегию реализации согласованности в распределённой архитектуре;
использовать двухфазные коммиты и паттерн «Сага»;
использовать паттерны транзакционной отправки сообщений.
8 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Распределенные транзакции. **Вариант 1 (С КОДОМ)**

Сценарий для интернет-магазина:

Реализовать сервисы "Платеж", "Склад", "Доставка".

Реализовать сервисы "Платеж", "Склад", "Доставка".


Для сервиса "Заказ", в рамках метода "создание заказа" реализовать механизм распределенной транзакции (на основе Саги или двухфазного коммита).

Во время создания заказа необходимо:
1) в сервисе "Платеж" убедиться, что платеж прошел
2) в сервисе "Склад" зарезервировать конкретный товар на складе
3) в сервисе "Доставка" зарезервировать курьера на конкретный слот времени.


Если хотя бы один из пунктов не получилось сделать, необходимо откатить все остальные изменения.


На выходе должно быть:

0) описание того, какой паттерн для реализации распределенной транзакции использовался

1) команда установки приложения (из helm-а или из манифестов). Обязательно указать в каком namespace нужно устанавливать и команду создания namespace, если это важно для сервиса.

2) тесты в postman


В тестах обязательно
- использование домена arch.homework в качестве initial значения {{baseUrl}}

---

**Вариант 2 (БЕЗ КОДА)**

Сформировать сиквенс-диаграмму распределенной транзакции.

При необходимости, актуализировать деплоймент и контейнерную диаграммы проекта, которые выполнялись в ДЗ1 и ДЗ2.
Паттерны кэширования и основные принципы
использовать основные паттерны кэширования;
решать типичные проблемы, связанные с кэшированием;
выбирать инструмент кэширования под задачу.
13 октября, 20:00 — 21:30
Шардирование
рассмотреть виды шардинга;
проанализировать стратегии шардирования;
рассмотреть консистентное шардирование.
15 октября, 20:00 — 21:30
CP cистемы
рассмотреть алгоритмы согласования.
20 октября, 20:00 — 21:30
AP системы
рассмотреть проблемы master-master репликации;
рассмотреть алгоритм GOSSIP (Scuttlebut).
22 октября, 20:00 — 21:30
Паттерны поддержания консистентности данных (Stream processing)
рассмотреть паттерны Stream Processing, Event Sourcing;
рассмотреть инструменты Change Data Capture.
27 октября, 20:00 — 21:30
Идемпотентость и коммутативность API в HTTP и очередях // ДЗ
рассмотреть идемпотентность и коммутативность в API и очередях.
29 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Идемпотентость и коммутативность API в HTTP и очередях. **Вариант 1 (С КОДОМ)**

На выходе должно быть:

0) описание того, какой паттерн для реализации идемпотентности использовался

1) команда установки приложения (из helm-а или из манифестов). Обязательно указать в каком namespace нужно устанавливать и команду создания namespace, если это важно для сервиса.

2) тесты в postman


В тестах обязательно
- использование домена arch.homework в качестве initial значения {{baseUrl}}

---

**Вариант 2 (БЕЗ КОДА)**

Опишите, какие паттерны для реализации идемпотентности и коммутативности будете использовать при решении архитектурной задачи с указанием микросервисов, в которых эти паттерны будут применяться.
Проектная работа
Заключительный месяц курса посвящен проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей
Консультация по проектам и домашним заданиям // Проект
получить ответы на вопросы по проекту, ДЗ и по курсу.
5 ноября, 20:00 — 21:30
Лектор: Наталья Чалкова
Домашние задания: 1
ДЗ
Проектная работа. 1. Выбрать тему
2. Утвердить темы в чате по дз
3. Презентовать проект


-----------


Основные требования:



- должны быть реализованы критичные пользовательские сценарии. Вашем приложением можно пользоваться. Может быть какой-то небольшой набор функций, но они все целостные, и все пользовательские сценарии закончены.
- если фронтенда не будет, ничего страшного, но если будет это дополнительный плюс. Для демонстрации работоспособности и пользовательского пути можно продемонстрировать тесты в postman.
Защита проектных работ
защитить проект и получить рекомендации экспертов.
3 декабря, 20:00 — 21:30
Лектор: Наталья Чалкова
Защита проектных работ - 2
защитить проект и получить рекомендации экспертов.
10 декабря, 20:00 — 21:30
Лектор: Наталья Чалкова

Преподаватель

Станислав Щетинников
Директор по развитию в Сбербанке
Программирует больше 15 лет. Архитектурой систем занимается уже больше 8 лет.

До этого несколько лет работал руководителем разработки в myTarget и Домклик. Любит Data Science, python, golang, DDD и микросервисную архитектуру.