Scala-лазание. Архитектура распределенной системы

(на базе Akka, Scala)

Страничка курса: https://maxcom.github.io/scala-course-2018/

Материалы курса и обратная связь

Слайды, примеры программ и другие файлы доступны в репозитарии https://github.com/maxcom/scala-course. Содержимое будет пополняться по ходу курса.

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

Состав курса

  1. Введение в программирование на Scala
  2. Потоки и асинхронное программирование.
  3. Разработка и использование веб-сервисов

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

Практическое задание

  1. Классификатор текстов
  2. Сервис для оценки произвольного текста
  3. Оценка сообщений соц. сетей
  4. Отслеживание новых записей
  5. Хранение состояния приложения на диске; отказоустойчивость
  6. Реактивное обновление интерфейса при изменениях

1. Базовые типы Scala и pattern matching

  1. Материалы курса, обратная связь
  2. Обзор курса
  3. Средства разработки и первые шаги
  4. Case-классы
  5. Алгебраические типы.
  6. Pattern matching

2. Иммутабельность и базовые структуры данных. Работа со списками.

  1. Орг. вопросы и результаты домашнего задания
  2. Обзор большого практического задания
  3. Функциональный подход и иммутабельность.
  4. Персистентные структуры данных на примере List.
  5. Работа со списками: "классика" и ListBuffer.
  6. filter, map и fold.
  7. Доп.: NonEmptyList, immutable queue, операции над Option

3. Персистентные структуры данных. Ленивые вычисления. Монады.

  1. Практическое задание: пишем классификатор
  2. Разбор домашних заданий
  3. Персистентные структуры: Vector и HashMap
  4. "call by value" и "call by name"; lazy
  5. Stream: ленивый список.
  6. Монады и for.
  7. Пример: Eval из библиотеки cats.

4. Implicit значения и преобразования. Тайпклассы. Чтение и запись JSON в play-json.

  1. Imlicit значения
  2. Передача контекста и конфигурации;
  3. “pimp my library”.
  4. Тайпклассы
  5. Сериализация и type classes на примере Play-JSON
  6. Практическая часть: разбор JSON из API vk.com.

5. Базовые примитивы многопоточности

  1. Зачем мы говорили о play-json?
  2. Советы по написанию классификатора
  3. Поток, пулы потоков.
  4. Синхронизация, блокировки и атомики.
  5. Future и Promise.
  6. Реализация map, sequence и других функций стандартной библиотеки. for-нотация для Future.

6. HTTP Протокол. Play Framework. Архитектура высоконагруженных приложений.

  1. Статус по практическому заданию
  2. HTTP протокол и REST.
  3. Play Framework: создаем приложение.
  4. Практическое задание: создаем сервис категоризации.
  5. Архитектура обработки запросов.

7. Акторы Akka.

  1. Статус по практическому заданию
  2. Практическое задание: http client и API vk.com
  3. Актор — асинхронный объект.
  4. Диспетчеры.
  5. Обработка исключительных ситуаций.
  6. Большой рассказ о гарантиях.
  7. CircuitBreaker.
  8. Регулировка скорости обработки.

8. Akka Streams и реактивные потоки

  1. Статус по практическому заданию
  2. Практическое задание: обновление ленты в акторе
  3. Зачем нужны асинхронные потоки?
  4. До streams: back pressure на акторах
  5. Akka Streams
  6. Reactive Streams - стандартное API
  7. Akka Streams в Play

9. Event Sourcing и CQRS. Akka Persistence.

  1. Статус по практическому заданию
  2. Event Sourcing
  3. Akka Persistence
  4. Снапшоты
  5. CQRS
  6. Akka Persistence Query