Основы разработки высокопроизводительных приложений на Java
1. Основы языка Java и подготовка среды разработки.
Понятия JDK, javac, Maven, Gradle, IDE, Spring. Настройка окружения для разработки, установка среды разработки, подготовка репозитория git и форк репозитория с базовым шаблоном сервиса для дальнейших блоков.
2. Системы версионирования кода.
Способы обеспечения одновременной разработки проекта несколькими людьми. Системы контроля версий. Git, SVN. Отличия. Типовые операции.
3. Системы сборки и версионирования программных пакетов.
Проблема управления версиями программных модулей и публикации артефактов. Системы сборки Maven и Gradle. Репозиторий артефактов программного кода.
4. Изучения работы фреймворка Spring.
Какой жизненный цикл у бина и у приложения, какие есть встроенные механизмы у Spring для работы с часто встречающимися задачами.
5. Работа с presistance слоем.
Сохранение данных в БД PostgreSql, проверка данных, работа с ORM Hibernate, транзакции и часть модуля Spring-Data. Тестирование репозиториев.
6. Разработка HTTP API сервиса.
Работа с http запросами, обсуждение многослойной архитектуры с разделением по слоям ответственности, обработка ошибок, тестирование контроллеров.
Классические BigData-системы на основе технологий Hadoop и Spark
1. Общие вопросы организации BigData-систем. Проблемы организации BigData-систем.
Определение понятия Большие Данные. Специфика проектирования и создания систем работы с большими данными.
2. Классификация характера задач для выбора подходящей реализации. Методы декомпозиции BigData-задач.
Виды задач, решаемых BigData-системами. Зависимость способа решения задачи от ее разновидности. Составные части BigData-систем.
3. Основные метриками для оценки производительности BigData-систем.
Виды задач, решаемых BigData-системами. Зависимость способа решения задачи от ее разновидности. Составные части BigData-систем.
4. Знакомство с Hadoop-стеком.
Появление и развитие технологии Hadoop. Спектр решаемых задач. Примеры использования в крупных копаниях. Составные части Hadoop-кластера. Экосистема Hadoop-проектов.
5. Парадигма MapReduce.
Распределенное выполнение программ. Операции отображения и свертки. Примеры. Возможность переопределять части MapReduce программы в каркасе Hadoop.
6. Разработка MapReduce программ на Java.
Особенности реализации функций отображения и свертки в Java. Работа с консолью Hadoop-кластера. Спецификация параметров запуска MapReduce Java-приложения.
7. Интерфейсы программного каркаса Hadoop для различных языков программирования.
Возможности Hadoop Streaming API. Примеры реализации MapReduce-программ на языке python и запуска из консоли bash. Текущий контроль.
8. Программный каркас Apache Spark.
Состав и назначение Spark-кластера. Спектр решаемых задач. Примеры работы с источниками данных. План выполнения вычислений. Работа с основной и внешней памятью. Использование программного интерфейса Spark RDD.
9. Технология построения аналитических платформ на Apache Spark SQL.
Предпосылки появления программного интерфейса Spark SQL. Умные источники данных для Spark.
Технологии поставки и хранения данных в BigData-системах
1. Импорт данных при помощи Sqoope.
Проблема импорта данных в системы пакетной обработки. Импорт данных в HDFS при помощи Sqoop. Настройка количества операций отображения. Передача пароля через командную строку.
2. Технология брокера сообщений.
Архитектура событийно-ориентированных BigData-систем. Задача брокера сообщений. Типовые архитектуры систем передачи сообщений. Достоинства и недостатки. Семантики доставки (точно один раз, как минимум один раз, максимум один раз)
3. Брокер сообщений Apache Kafka.
Архитектура. Производители, потребители, брокеры. Вопросы масштабирования. Принципы организации долговременного хранения сообщений. Настройка дедупликации сообщений.
4. Поточная доставка данных при помощи Flume.
Архитектура Flume. Агент, канал передачи, селектор, слив. Варианты конфигурирования. Примеры и упражнения.
5. Обработка потока данных при помощи Apache Spark Streaming.
Принцип микропакетной обработки. Плавающее окно. Спектр решаемых задач. Работа с программным интерфейсом DStream.
6. Проблема масштабирования хранения данных. Работа с классическими СУБД.
Определение Базы Данных и Системы Управления Базами Данных. Организация хранения информации в классических СУБД на примере PostgreSQL. Вопросы обеспечения целостности данных. Требования ACID.
7. Распределенные файловые системы.
Подходы к хранению данных. Специфика хранения файлов. Архитектура популярных распределенных файловых систем на примере HDFS, NFS v4.1, Lustre. Использование распределенных файловых систем в задачах обработки больших объемов данных.
8. Архитектура NoSQL-систем.
Специфика хранения данных по записям. Проблематика обеспечения согласованности данных. Теорема CAP. Архитектура NoSQL (not only SQL) на примере Apache Cassandra и их отличие от классических СУБД.
9. Технология построения аналитических платформ на Apache Hive.
Состав и назначение кластера Hive. Связь с технологией Hadoop. Синтаксис запросов HiveQL. Возможность создания пользовательских функций
10. Кеширование данных. Проектирование кешей.
Понятие и назначение кеша данных. Ограничения. Стратегии замещения данных в кеш, стратегии предвыборки. Популярные системы кеширования для BigData-задач.
11. Платформа вычислений в памяти Apache Ignite.
Технологии вычислений в памяти и хранения данных в памяти. Кластер Ignite. Возможности Ignite для организации кеширования, вычислений, передачи сообщений и машинного обучения на основе больших данных.
Контейнеризация и развертывание высокопроизводительных приложений
1. Системы развертывания BigData-приложений.
Специфика развертывания распределенных высокопроизводительных приложений. Введение в облачные сервисы (IaaS, PaaS, SaaS). Философия DevOps, непрерывная интеграция и доставка кода.
2. Технология контейнеризации приложений.
Технология Docker. Разграничение пространств процессов в операционной системе при помощи cgroups. Состав технологии: файлы докер, реестр образов, контейнеры, демон Docker. Слои доступа к файлам.
3. Docker Swarm – технология масштабирования приложений в кластере.
Кластер Docker-хостов. Создание кластера. Масштабирование контейнеров. Маршрутизация входящих соединений. Конфигурирование развертывания в yml-файлах.
4. Архитектура системы оркестрации контейнеров Kubernetes.
Оркестрация сервисов масштабных приложений. Проблемы и вызовы. Состав кластера Kubernetes. Основные элементы развертывания (Pod, Service, Route).
5. Динамические Service Mesh на примере Istio.
Создание динамических сетей маршрутизации данных между сервисами. Отделение слоя доставки данных и авторизации от бизнес-логики.
Практика, подготовка и защита выпускной квалификационной работы
Практика, подготовка к защите и защита итогового проекта. В рамках модуля обучающиеся проходят практику на базе индустриального партнера, развивая навыки, полученные в предыдущих модулях, готовят и представляют к защите итоговый проект.