Владислав Школа
Solutions Architect, Startups в Amazon Web Services
Разработайте Infrastructure as Code-архитектуру с нуля и научитесь обеспечивать отказоустойчивую работу систем
Когда проект обрастает фичами, с каждым новым обновлением становится все сложнее разобраться в полотнах кода, сохранять высокую производительность, выявлять и устранять баги. В результате ― в один момент система может не выдержать нагрузки, а бизнес потеряет деньги. Это можно предотвратить, если научиться проектировать системы на старте так, чтобы потом они легко могли масштабироваться и при этом корректно работать.
На курсе вы освоите язык Go, сможете легко интегрировать его в текущий бэкенд и писать на нем микросервисы. Научитесь проектировать архитектуру для высоконагруженных систем и получите набор инструментов, подходов и решений в области системного дизайна.
13 января — 10 марта
17 занятий (по вторникам и четвергам)
О лекторе
Solutions Architect, Startups в Amazon Web Services
Ознакомьтесь с простейшей клиент-серверной архитектурой, а затем с двух- и трехуровневой архитектурой. Разберитесь в преимуществах слоеной архитектуры. Определите различия между монолитом и микросервисом. Научитесь выбирать тип архитектуры в зависимости от задачи.
Изучите базовый синтаксис языка Golang [Go]. Научитесь использовать встроенные структуры данных, классы и интерфейсы, for-/while-циклы и switch-оператор. Решите задачи на базовые структуры данных.
Узнайте, что такое горутины и в чем их преимущество. Научитесь использовать встроенные библиотеки-парсеры для JSON и программировать базовые http-серверы на Go. Изучите процесс коммуникации между разными каналами. Напишите многопоточную программу на Go.
Научитесь применять встроенный http-пакет и внешние фреймворки. Установите Docker и изучите структуру Dockerfile. Создайте Dockerfile для Go-приложения с нуля. Научитесь добавлять Go-зависимости и обрабатывать GET/POST-запросы.
Ознакомьтесь с примерами сервис-ориентированной архитектуры [SOA] и микросервисной архитектуры. Определите их отличия. Изучите протоколы коммуникации между сервисами [REST, SOAP, grpc, GraphQL] и узнайте, зачем нужен Service Discovery. Ознакомьтесь с инструментами для оркестровки контейнеров. Научитесь применять разные протоколы коммуникации между сервисами.
Узнайте, для чего нужен API и из каких компонентов он может состоять. Изучите типы спецификаций для написания API и научитесь писать спецификацию в OpenAPI. Узнайте, какие существуют интеграции API Gateway и почему он стал таким популярным. Напишите сервис на основе сгенерированного кода от OpenAPI-документа.
Определите разницу между синхронными и асинхронными запросами, буферизированными и небуферизированными потоками. Изучите паттерн Public-Subscriber и паттерн Push. Научитесь обрабатывать исключения, пользоваться потоками ввода/вывода для чтения/записи данных и работать с файловой системой. Изучите систему обмена сообщениями на примере Apache Kafka.
Узнайте, зачем необходимо распределять нагрузку. Научитесь балансировать нагрузку с помощью nginx, HA, ELB и DNS-балансировки. Научитесь применять последовательное хеширование для решения проблем с распределением. Решите задачу по системному дизайну с помощью балансировщиков нагрузки.
Узнайте, в чем суть САР-теоремы и почему полная определенность невозможна в распределенных системах. Изучите возможные решения проблем в распределенных системах: двухфазная блокировка, алгоритмы консенсусов [RAFT, Paxos] и распределенные транзакции.
Поймите разницу между транзакционными [OLTP] и аналитическими [OLAP], реляционными [SQL] и нереляционными [NoSQL] базами данных. Ознакомьтесь со способами масштабирования баз данных. Изучите опции масштабирования в DynamoDB.
Узнайте, что такое событие и как правильно определить его структуру. Изучите разницу между тонкими и толстыми событиями. Ознакомьтесь с паттерном Eventbus и ситуациями, в которых его нужно применять. Научитесь обрабатывать ошибки в событийно-ориентированных системах.
Узнайте, что такое поток событий и какие проблемы он способен решить. Научитесь обрабатывать потоки событий. Разберите отличия самых популярных стриминговых систем: Apache Flink, Kinesis и Kafka. Имплементируйте систему обработки ивентов с помощью одной из систем.
Поймите, для чего нужно мониторить систему. Узнайте, из чего состоит и как работает стек ELK. Изучите метрики для мониторинга систем. Научитесь работать со сборщиками логов [LogstashD, FluentD, встроенные сборщики провайдеров] и использовать трейсинг в распределенных системах.
Ознакомьтесь с наиболее распространенными проблемами, возникающими при поддержке распределенных систем. Изучите «инфраструктуру как код» и узнайте, как она упрощает работу с багами и мониторинг. Получите краткий обзор инструментов для IaaC и детально изучите эту модель на примере построения инфраструктуры с Cloud Development Kit (CDK).
Научитесь оптимизировать нагрузку на архитектуру с помощью кэширования [Redis/Memcached] и сетей доставки контента [Content Delivery Network, CloudFront, CloudFlare]. Изучите граничные вычисления.
Ознакомьтесь с современными тенденциями и подходами к разработке архитектур: предметно-ориентированное проектирование [Domain Driven Design], шаблон CQRS, гексагональная архитектура [Hexagonal Architecture] и микрофронтенды.
Спроектируйте и запишите в IaaC архитектуру системы на выбор. Система должна иметь возможность масштабироваться, код ― запускаться без ошибок, сервисы ― написаны на Go или Python [если планируется больше одного сервиса]. Презентуйте проект лектору и коллегам-студентам.
язык GO
знаете базовый синтаксис Gо и пишете на нем микросервисы, можете создавать Gо-приложения с нуля и деплоить их через Docker
best practices построения архитектур
знакомы с лучшими практиками построения архитектуры ПО, умеете подбирать архитектуру под конкретную задачу
оптимизация и масштабирование
понимаете принципы IaaC-архитектуры, создаете легко масштабируемые и отказоустойчивые приложения, можете оптимизировать существующую архитектуру вашего проекта на текущей работе