Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Akka в действии

Покупка
Артикул: 802758.01.99
Доступ онлайн
790 ₽
В корзину
В книге рассказывается о фреймворке Akka и описываются его наиболее важные модули. Большое внимание уделено модели программирования с акторами и модулям поддержки акторов, часто используемых при создании конкурентных и распределенных приложений. Продемонстрированы подходы к разработке через тестирование и приемы развертывания и масштабирования отказоустойчивых систем. Во всех примерах книги используется язык программирования Scala. Издание адресовано разработчикам на Java и Scala, желающим научиться создавать приложения с использованием фреймворка Akka.
Рестенбург, Р. Akka в действии / Р. Рестенбург, Р. Баккер, Р. Уильямс; пер. с англ. А. Н. Киселева. - Москва : ДМК Пресс, 2018. - 522 с. - ISBN 978-5-97060-642-1. - Текст : электронный. - URL: https://znanium.com/catalog/product/1998778 (дата обращения: 27.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Раймонд Рестенбург, Роб Баккер, Роб Уильямс

Akka в действии

M A N N I N G
SHELTER ISLAND

Akka in Action

RAYMOND ROESTENBURG  
ROB BAKKER 
ROB WILLIAMS

Москва, 2018

Akka в действии

Раймонд Рестенбург 
Роб Баккер 
Роб Уильямс

УДК   004.424
ББК   32.972
Р43

Р43   Раймонд Рестенбург, Роб Баккер, Роб Уильямс
Akka в действии / пер. с англ. А. Н. Киселев – М.: ДМК Пресс, 2018. – 522 с.: ил.

            ISBN 978-5-97060-642-1

В книге рассказывается о фреймворке Akka и описываются его наиболее 
важные модули. Большое внимание уделено модели программирования с 
акторами и модулям поддержки акторов, часто используемых при создании 
конкурентных и распределенных приложений. Продемонстрированы под-
ходы к разработке через тестирование и приемы развертывания и масшта-
бирования отказоустойчивых систем. Во всех примерах книги используется 
язык программирования Scala.
Издание адресовано разработчикам на Java и Scala, желающим научиться 
создавать приложения с использованием фреймворка Akka.

 
  
 
 
 
 
 
 
      УДК   004.424
 
 
 
 
 
 
 
 
      ББК   32.972

Original English language edition published by Manning Publications. Copyright © 2017 
by Manning Publications. Russian language edition copyright © 2018 by DMK Press. All 
rights reserved.

Все права защищены. Любая часть этой книги не может быть воспроизведена 
в какой бы то ни было форме и какими бы то ни было средствами без письменного 
разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку 
вероятность технических ошибок все равно существует, издательство не может га-
рантировать абсолютную точность и правильность приводимых сведений. В связи 
с этим издательство не несет ответственности за возможные ошибки, связанные с 
использованием книги.

ISBN 978-1-61729-101-2 (англ.)                        Copyright © 2017 by Manning Publications Co.
ISBN 978-5-97060-642-1 (рус.)                          © Оформление, перевод на русский язык, 
 
                     издание, ДМК Пресс, 2018

Оглавление

Предисловие .....................................................................................................11
Благодарности ..................................................................................................12
О книге ...............................................................................................................13

Кому адресована эта книга ............................................................................13
Содержание книги ..........................................................................................13
Соглашения об оформлении программного кода ........................................15
Требования к программному обеспечению .................................................15
Автор в сети.....................................................................................................15
Об авторах .......................................................................................................16
Об иллюстрации на обложке ..........................................................................16

Глава 1. Введение в Akka ................................................................................18

1.1. Что такое Akka? .........................................................................................22
1.2. Акторы: краткий обзор ............................................................................22
1.3. Два подхода к масштабированию: подготовка примера ......................24
1.4. Традиционное масштабирование ...........................................................26

1.4.1. Традиционный подход к масштабированию и хранению:  
переместить все в базу данных .................................................................. 26

1.4.2. Традиционное масштабирование и интерактивная работа: опрос........ 29
1.4.3. Традиционное масштабирование и интерактивная работа:  
обработка ошибок ....................................................................................... 31

1.5. Масштабирование с Akka .........................................................................32

1.5.1. Подход к масштабированию и хранению с Akka: отправка и прием 
сообщений ................................................................................................... 33

1.5.2. Масштабирование с Akka и интерактивная работа: отправка  
сообщений ................................................................................................... 36

1.5.3. Масштабирование с Akka и отказы: асинхронное разделение ............... 37
1.5.4. Подход Akka: отправка и получение сообщений ..................................... 37

1.6. Акторы: универсальная модель программирования ............................39

1.6.1. Модель асинхронного выполнения ........................................................... 40
1.6.2. Операции с акторами ................................................................................. 41

1.7. Акторы Akka ..............................................................................................44

1.7.1 ActorSystem .................................................................................................. 45
1.7.2. ActorRef, почтовый ящик и актор .............................................................. 47
1.7.3. Диспетчеры ................................................................................................. 47
1.7.4. Акторы и сеть .............................................................................................. 49

1.8. В заключение ............................................................................................49

Глава 2. Подготовка и запуск .........................................................................51

2.1. Клонирование, сборка и интерфейс тестирования ...............................52

 Оглавление

2.1.1. Сборка с помощью sbt ................................................................................ 53
2.1.2. Забегая вперед: REST-сервер GoTicks.com ................................................ 54

2.2. Исследование акторов в приложении .....................................................59

2.2.1. Структура приложения .............................................................................. 59
2.2.2. Актор, осуществляющий продажу: TicketSeller ........................................ 64
2.2.3. Актор BoxOffice  .......................................................................................... 65
2.2.4. Актор RestApi .............................................................................................. 67

2.3. Вперед, в облако .......................................................................................70

2.3.1. Создание приложения в облаке Heroku .................................................... 71
2.3.2. Развертывание и запуск в Heroku ............................................................. 72

2.4. В заключение ............................................................................................73

Глава 3. Разработка с акторами через тестирование .................................75

3.1. Тестирование акторов ..............................................................................76
3.2. Односторонние взаимодействия ............................................................78

3.2.1. Примеры SilentActor .................................................................................. 79
3.2.2. Пример SendingActor  ................................................................................. 84
3.2.3. Пример SideEffectingActor ......................................................................... 89

3.3. Двусторонние взаимодействия ...............................................................92
3.4. В заключение ............................................................................................93

Глава 4. Отказоустойчивость ..........................................................................95

4.1. Что такое отказоустойчивость .................................................................95

4.1.1. Простые объекты и исключения ............................................................... 98
4.1.2. И пусть падает .......................................................................................... 103

4.2. Жизненный цикл актора .......................................................................107

4.2.1. Событие start ............................................................................................ 107
4.2.2. Событие stop ............................................................................................. 108
4.2.3. Событие restart ......................................................................................... 109
4.2.4. Объединяем фрагменты жизненного цикла вместе .............................. 111
4.2.5. Мониторинг жизненного цикла .............................................................. 113

4.3. Супервизор .............................................................................................114

4.3.1. Иерархия супервизора ............................................................................. 114
4.3.2. Предопределенные стратегии ................................................................. 117
4.3.3. Собственные стратегии ............................................................................ 118

4.4. В заключение ..........................................................................................124

Глава 5. Объекты Future ................................................................................125

5.1. Примеры использования объектов Future ........................................... 126
5.2. Объекты Future не блокируют выполнение потока ............................. 131

5.2.1. Объекты Promise – это обещания ............................................................ 135

5.3. Обработка ошибок в объектах Future ................................................... 138
5.4. Комбинирование объектов Future ........................................................ 143
5.5. Объединение объектов Future с акторами ........................................... 152

Оглавление  7

5.6. В заключение ..........................................................................................153

Глава 6. Первое распределенное приложение .........................................155

6.1. Горизонтальное масштабирование ...................................................... 156

6.1.1. Общая терминология ............................................................................... 156
6.1.2. Причины использования модели распределенного  
программирования ................................................................................... 158

6.2. Горизонтальное масштабирование и удаленные взаимодействия .... 159

6.2.1. Реорганизация приложения GoTicks.com ............................................... 161
6.2.2. Удаленные взаимодействия в REPL ........................................................ 161
6.2.3. Удаленный поиск ...................................................................................... 167
6.2.4. Удаленное развертывание ....................................................................... 175
6.2.5. Тестирование с multi-JVM ........................................................................ 180

6.3. В заключение ..........................................................................................186

Глава 7. Настройка, журналирование и развертывание ..........................188

7.1. Настройка ................................................................................................188

7.1.1. Попытка настройки Akka ......................................................................... 189
7.1.2. Использование значений по умолчанию ................................................ 192
7.1.3. Настройка Akka ......................................................................................... 195
7.1.4. Настройка для нескольких систем ........................................................... 196

7.2. Журналирование ....................................................................................199

7.2.1. Журналирование в приложении Akka ..................................................... 199
7.2.2. Использование журналирования ............................................................ 201
7.2.3. Управление журналированием из Akka .................................................. 202

7.3. Развертывание приложений на основе акторов .................................. 204
7.4. В заключение ..........................................................................................208

Глава 8. Шаблоны структуризации акторов ...............................................210

8.1. Конвейеры и фильтры ...........................................................................211

8.1.1. Шаблон: конвейеры и фильтры ............................................................... 211
8.1.2. Конвейеры и фильтры в Akka .................................................................. 212

8.2. Параллельная обработка дроблением с последующим  
объединением результатов ....................................................................216
8.2.1. Область применения ................................................................................ 216
8.2.2. Распараллеливание задач в Akka ............................................................ 218
8.2.3. Реализация компонента дробления с использованием списка 
получателей ............................................................................................... 219

8.2.4. Реализация компонента объединения с использованием  
агрегатора .................................................................................................. 221

8.2.5. Объединение компонентов в реализацию шаблона параллельной 
обработки дроблением ............................................................................. 227

8.3. Маршрутизация ......................................................................................229
8.4. В заключение ..........................................................................................234

 Оглавление

Глава 9. Маршрутизация сообщений ..........................................................236

9.1. Шаблон «Маршрутизатор» .....................................................................237
9.2. Балансировка нагрузки с помощью маршрутизаторов Akka .............. 238

9.2.1. Маршрутизатор с пулом .......................................................................... 242
9.2.2. Маршрутизатор с группой ....................................................................... 250
9.2.3. Маршрутизатор ConsistentHashing ......................................................... 257

9.3. Реализация шаблона маршрутизатора с применением акторов ........ 262

9.3.1. Маршрутизация по содержимому ........................................................... 262
9.3.2. Маршрутизация на основе состояния ..................................................... 263
9.3.3. Реализации маршрутизаторов ................................................................ 265

9.4. В заключение ..........................................................................................266

Глава 10. Каналы обмена сообщениями ....................................................268

10.1. Типы каналов ........................................................................................269

10.1.1. Точка-точка ............................................................................................. 269
10.1.2. Издатель/подписчик .............................................................................. 270

10.2. Специальные каналы ...........................................................................280

10.2.1. DeadLetter ................................................................................................ 281
10.2.2. Гарантированная доставка .................................................................... 283

10.3. В заключение ........................................................................................289

Глава 11. Конечные автоматы и агенты .....................................................291

11.1. Использование конечного автомата ................................................... 292

11.1.1. Краткое введение в конечные автоматы .............................................. 292
11.1.2. Создание модели конечного автомата ................................................. 294

11.2. Реализация модели конечного автомата ............................................ 295

11.2.1. Реализация переходов ............................................................................ 296
11.2.2. Реализация действий при входе в состояния ....................................... 301
11.2.3. Таймеры в конечном автомате .............................................................. 305
11.2.4. Завершение конечного автомата .......................................................... 308

11.3. Реализация общего состояния с помощью агентов ........................... 309

11.3.1. Простой доступ к общим данным с помощью агентов ....................... 310
11.3.2. Ожидание изменения состояния........................................................... 312

11.4. В заключение ........................................................................................313

Глава 12. Интеграция с другими системами ..............................................315

12.1. Конечные точки сообщений ................................................................315

12.1.1. Нормализатор ......................................................................................... 317
12.1.2. Модель канонических данных ............................................................... 319

12.2. Реализация конечных точек с использованием Apache Camel ......... 322

12.2.1. Реализация конечной точки-потребителя для приема сообщений  
из внешней системы ................................................................................. 323

12.2.2. Реализация конечной точки-производителя для отправки  
сообщений во внешнюю систему ............................................................. 330

Оглавление  9

12.3. Реализация HTTP-интерфейса ............................................................335

12.3.1. Пример HTTP-интерфейса..................................................................... 336
12.3.2. Реализация конечной точки REST на основе akka-http ....................... 338

12.4. В заключение ........................................................................................344

Глава 13. Потоковые приложения ...............................................................346

13.1. Основы потоковой обработки .............................................................347

13.1.1. Копирование файлов .............................................................................. 351
13.1.2. Материализация запускаемых графов ................................................. 355
13.1.3. Обработка событий в потоке ................................................................. 360
13.1.4. Обработка ошибок в потоках ................................................................. 364
13.1.5. Создание протокола с BidiFlow .............................................................. 366

13.2. Потоковая передача данных через HTTP ........................................... 369

13.2.1. Прием потока данных по HTTP ............................................................. 370
13.2.2. Возврат потока данных по HTTP ........................................................... 372
13.2.3. Согласование контента .......................................................................... 373

13.3. Ветвление и слияние со специализированным языком описания 
графов ......................................................................................................378
13.3.1. Ветвление потоков ................................................................................. 378
13.3.2. Слияние потоков .................................................................................... 381

13.4. Посредничество между производителями и потребителями ........... 384

13.4.1. Использование буферов ......................................................................... 385

13.5. Обособление частей графа, действующих с разной скоростью ........ 389

13.5.1. Медленный потребитель, накопление событий в блоках ................... 389
13.5.2. Быстрый потребитель, дополнительные показатели .......................... 390

13.6. В заключение ........................................................................................391

Глава 14. Кластеры .........................................................................................393

14.1. Зачем нужны кластеры? ......................................................................393
14.2. Членство в кластере .............................................................................395

14.2.1. Присоединение к кластеру .................................................................... 396
14.2.2. Выход из кластера .................................................................................. 404

14.3. Обработка заданий в кластере ............................................................410

14.3.1. Запуск кластера ...................................................................................... 412
14.3.2. Распределение заданий с использованием маршрутизаторов ........... 414
14.3.3. Надежная обработка заданий ................................................................ 417
14.3.4. Тестирование кластера........................................................................... 424

14.4. В заключение ........................................................................................428

Глава 15. Хранимые акторы .........................................................................430

15.1. Восстановление состояния с технологией Event Sourcing ................. 432

15.1.1. Обновление записей на месте ............................................................... 432
15.1.2. Сохранение состояния без изменения .................................................. 433
15.1.3. Event Sourcing для акторов .................................................................... 435

 Оглавление

15.2. Хранимые акторы ................................................................................436

15.2.1. Хранимый актор ..................................................................................... 437
15.2.2. Тестирование .......................................................................................... 441
15.2.3. Моментальные снимки .......................................................................... 443
15.2.4. Запрос хранимых событий .................................................................... 449
15.2.5. Сериализация ......................................................................................... 451

15.3. Кластер на основе хранимых акторов  ............................................... 457

15.3.1. Расширение cluster singleton ................................................................. 461
15.3.2. Расширение cluster sharding .................................................................. 465

15.4. В заключение ........................................................................................470

Глава 16. Советы по повышению производительности ..........................471

16.1. Анализ производительности ...............................................................472

16.1.1. Производительность системы ............................................................... 472
16.1.2. Показатели производительности .......................................................... 474

16.2. Оценка производительности акторов ................................................ 477

16.2.1. Сбор данных в почтовом ящике ............................................................ 478
16.2.2. Сбор и обработка данных ...................................................................... 485

16.3. Улучшение производительности устранением узких мест ............... 487
16.4. Настройка диспетчера .........................................................................489

16.4.1. Выявление проблем с пулами потоков ................................................. 489
16.4.2. Использование нескольких экземпляров диспетчеров ....................... 491
16.4.3. Изменение размера пула потоков статически ..................................... 493
16.4.4. Изменение размера пула потоков динамически ................................. 496

16.5. Изменение поведения механизма освобождения потоков .............. 498

16.5.1. Ограничения механизма освобождения потоков ................................ 500

16.6. В заключение ........................................................................................502

Глава 17. Заглядывая вперед .......................................................................504

17.1. Модуль akka-typed ................................................................................505
17.2. Akka Distributed Data ............................................................................509
17.3. В заключение ........................................................................................509

Предметный указатель .................................................................................511

Предисловие

Разработка хороших, конкурентных и распределенных приложений – 
сложная задача. Завершив очередной проект на Java, в котором потребова-
лось использовать массу кода для управления низкоуровневыми потоками 
выполнения, я задался целью найти более простой инструмент для реали-
зации следующего проекта, который обещал быть еще более сложным.
В марте 2010 г. я увидел твит Дина Вамплера (Dean Wampler), который 
заставил меня обратить внимание на Akka: 

W00t! RT @jboner: #akka 0.7 is released: http://bit.ly/9yRGSB

После недолгого изучения исходного кода и создания прототипа мы ре-
шили использовать Akka. Мы сразу заметили, что новая модель програм-
мирования действительно упрощает решение задач, с которыми мы ис-
пытали немало сложностей в предыдущем проекте.
Я убедил Роба Баккера (Rob Bakker) совершить со мной увлекательное 
путешествие в мир новой ультрасовременной технологии, и мы вместе 
отважно принялись за реализацию первого проекта с применением Scala 
и Akka. Мы сразу же обратились к Джонасу Бонеру (Jonas Bonér, создатель 
Akka) за помощью и, как выяснилось потом, оказались первыми широко 
известными пользователями Akka. Мы завершили этот проект, за которым 
последовало множество других, и всякий раз убеждались в преимуществах 
использования Akka.
В ту пору в Интернете было мало информации об Akka, поэтому я ре-
шил начать вести блог об этом фреймворке и таким способом внести свой 
вклад в его развитие.
Я был очень удивлен, когда мне предложили написать эту книгу. Я спросил у 
Роба, хочет ли он присоединиться ко мне. Позже мы поняли, что нам не обой-
тись без посторонней помощи, и пригласили Роба Уильямса (Rob Williams). 
К тому моменту он уже имел опыт создания проектов на Java и Akka.
Мы рады, что наконец смогли закончить эту книгу, описывающую версию 
Akka (2.4.9), которая включает исчерпывающий набор инструментов для 
создания распределенных и конкурентных приложений. Мы благодарны 
читателям, участвующим в программе MEAP (Manning Early Access Program) 
издательства Manning, за их отзывы. Также для нас, начинающих авторов, 
бесценной оказалась поддержка издательства Manning Publications.
Всех нас объединило понимание, полученное с опытом работы до исполь-
зования Akka, что для разработки распределенных и конкурентных прило-
жений на JVM необходим простой и надежный инструмент. Надеемся, нам 
удастся убедить вас, что Akka является именно таким инструментом.

Раймонд Рестенбург

Благодарности

Нам потребовалось много времени, чтобы написать эту книгу. На всем его 
протяжении нам помогало множество людей, и мы благодарны им за эту 
помощь. Я благодарю всех читателей, участвовавших в программе MEAP 
и купивших ранний выпуск этой книги, за их отзывы, которые помогли 
значительно улучшить книгу, и за их терпение в течение нескольких лет. 
Мы надеемся, что вам понравится конечный результат и вы многому на-
учились, участвуя в программе MEAP.
Отдельное спасибо членам проекта Akka, в особенности Джонасу Бонеру 
(Jonas Bonér), Виктору Клангу (Viktor Klang), Роланду Куну (Roland Kuhn), 
Патрику Нордвалу (Patrik Nordwall), Бъерну Антонссону (Björn Antonsson), 
Эндре Варга (Endre Varga) и Конраду Малавски (Konrad Malawski) – все они 
вдохновляли нас и внесли свой бесценный вклад в книгу.
Мы также хотим поблагодарить Эдвина Рестенбурга (Edwin Roestenburg) 
и компанию CSC Traffic Management из Нидерландов, доверивших нам 
начать использовать Akka в важнейших проектах и давших невероятную 
возможность получить первый опыт с Akka. Мы также хотим сказать спа-
сибо компании Xebia, позволившей Рею в рабочие часы писать книгу и 
предоставившей потрясающее рабочее место для экспериментов с Akka.
Мы благодарим издательство Manning Publications за оказанное нам до-
верие. Это наша первая книга, поэтому мы знаем, что это было рискован-
ное предприятие для них. Мы хотим поблагодарить следующих сотрудни-
ков Manning за их превосходный труд: Майка Стефенса (Mike Stephens), 
Джеффа Блейла (Jeff Bleiel), Бена Берга (Ben Berg), Энди Кэрролл (Andy 
Carroll), Кевина Салливана (Kevin Sullivan), Кэти Теннант (Katie Tennant) и 
Дотти Марсико (Dottie Marsico).
Мы благодарим Дуга Уоррена (Doug Warren), выполнившего техниче-
скую корректуру всех глав. А также многих рецензентов, давших нам цен-
ные советы во время работы над книгой: Энди Хикса (Andy Hicks), Дэви-
да Гриффита (David Griffith), Дюшана Кайсела (Dušan Kysel), Иэна Старкса 
(Iain Starks), Джереми Пьерре (Jeremy Pierre), Кевина Эслера (Kevin Esler), 
Марка Янссена (Mark Janssen), Майкла Шлейхардта (Michael Schleichardt), 
Ричарда Джеппса (Richard Jepps), Робина Перси (Robin Percy), Рона Ди 
Франго (Ron Di Frango) и Уильяма Е. Вилера (William E. Wheeler).
Напоследок, но не в последнюю очередь, мы хотим сказать спасибо 
всем, кто значит для нас больше всего на свете и поддерживал нас во вре-
мя работы над книгой. Рей благодарит свою жену Шанель (Chanelle), а Роб 
Уильямс – свою маму, Гейл (Gail) и Лауру (Laurie).

О книге

В этой книге рассказывается о фреймворке Akka и описываются его наи-
более важные модули. Мы сосредоточимся на модели программирования 
с акторами и на модулях поддержки акторов, часто используемых при 
создании конкурентных и распределенных приложений. На протяжении 
книги мы постоянно будем показывать, как тестировать код, что является 
важным аспектом повседневного труда разработчика программного обес-
печения. Во всех наших примерах мы будем использовать язык програм-
мирования Scala.
После знакомства с основами программирования и тестирования акто-
ров мы рассмотрим все важные аспекты, с которыми вам придется столк-
нуться при использовании фреймворка Akka в приложениях. 

Кому адресована эта книга

Эта книга адресована всем, кто желает узнать, как создавать приложения с 
Akka. Примеры написаны на Scala, поэтому мы предполагаем, что вы уже 
имеете некоторое знакомство с этим языком программирования или же-
лаете освоить его в процессе чтения. Также предполагается, что вы знако-
мы с языком Java, особенно если учесть, что Scala действует поверх JVM.

Содержание книги

Книга состоит из семнадцати глав.
Глава 1 знакомит с акторами Akka. Здесь вы узнаете, как модель про-
граммирования с акторами решает некоторые ключевые проблемы, кото-
рые традиционно осложняют масштабирование приложений.
Глава 2 сразу же погружается в пример HTTP-службы, реализованной с 
применением Akka, чтобы показать, как быстро можно создать действующую 
службу и запустить ее в облаке. Она позволит вам понять, о чем 
рассказывается в последующих главах.
Глава 3 рассказывает о модульном тестировании акторов с использованием 
ScalaTest и модуля akka-testkit.
Глава 4 объясняет, как мониторинг акторов позволяет создавать надежные, 
отказоустойчивые системы.
Глава 5 знакомит с объектами Future, чрезвычайно удобным и простым 
инструментом объединения результатов функций, выполняющихся асинхронно. 
Здесь вы также узнаете, как объединить акторы и объекты Future.

 О книге

Глава 6 рассказывает о модуле akka-remote, позволяющем взаимодействовать 
с распределенными акторами по сети. Здесь вы также узнаете, 
как осуществлять модульное тестирование распределенной системы акторов.

Глава 7 объясняет, как для настройки Akka использовать библиотеку 
Typesafe Config Library. В ней также рассказывается, как можно использовать 
эту библиотеку для настройки компонентов вашего приложения.
Глава 8 описывает шаблоны структуризации приложений на основе акторов. 
Здесь вы узнаете, как реализовать пару классических шаблонов интеграции 
корпоративных приложений.
Глава 9 объясняет, как применять маршрутизаторы. Маршрутизаторы 
можно использовать для переключения, широковещательной рассылки и 
балансировки сообщений между акторами.
Глава 10 знакомит с каналами сообщений, которые можно использовать 
для передачи сообщений от одного актора другому. Здесь вы познакомитесь 
с каналами вида точка-точка и публикация/подписка, а также с каналами 
для недоставленных сообщений и с каналами гарантированной 
доставки.
Глава 11 обсуждает вопросы конструирования конечных автоматов акторов 
с использованием модуля FSM и знакомит с агентами, которые можно 
использовать для асинхронной передачи состояния.
Глава 12 объясняет приемы интеграции с другими системами. В этой 
главе вы узнаете, как организовать поддержку различных протоколов с 
помощью Apache Camel и как сконструировать http-службу с применением 
модуля akka-http.
Глава 13 знакомит с модулем akka-stream. Здесь вы узнаете, как с использованием 
Akka конструировать потоковые приложения. В этой главе 
подробно описывается процесс создания потоковой HTTP-службы для обработки 
событий в журнале.
Глава 14 объясняет, как пользоваться модулем akka-cluster. Здесь вы 
узна ете, как динамически масштабировать акторы в сетевом кластере.
Глава 15 знакомит с модулем akka-persistence. В этой главе вы узнаете, 
как записывать и восстанавливать состояние с использованием хранимых 
акторов, как использовать кластерные расширения для создания приложения 
покупательской корзины в кластере.
Глава 16 обсуждает ключевые аспекты производительности систем акторов 
и дает советы по анализу проблем, связанных с производительностью.

Глава 17 заглядывает вперед и знакомит с двумя грядущими нововведениями, 
которые, как нам кажется, приобретут особую важность: модулем 

Автор в сети  15

akka-typed, который сделает возможным проверку сообщений акторов на 
этапе компиляции, и модулем akka-distributed-data, который обеспечивает 
распределение состояния в памяти кластера.

Соглашения об оформлении программного кода

Весь исходный код в листингах или в тексте оформлен моноширинным 
шрифтом, чтобы выделить его на фоне обычного текста. Многие листинги 
сопровождаются примечаниями и комментариями, подчеркивающими 
важные понятия. Код примеров из этой книги доступен для загрузки на 
веб-сайте издательства Manning www.manning.com/books/akka-in-action и в ре-
позитории GitHub https://github.com/RayRoestenburg/akka-in-action.

Требования к программному обеспечению

Все примеры написаны на языке Scala. Они были протестированы с верси-
ей Scala 2.11.8. Найти дистрибутив Scala можно здесь: http://www.scala-lang.

org/download/.
Обязательно установите последнюю версию sbt (0.13.12 на момент на-
писания этих строк); если у вас установлена более старая версия sbt, вы 
рискуете столкнуться с проблемами. Загрузить дистрибутив sbt можно от-
сюда: http://www.scala-sbt.org/download.html.
Фреймворк Akka версии 2.4.9 требует наличия Java 8, поэтому вам также 
придется установить эту версию Java. Ее можно найти по адресу: http://

www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html.

Автор в сети

Одновременно с покупкой «Akka в действии» вы получаете бесплатный 
доступ к частному веб-форуму, организованному издательством Manning 
Publications, где можно оставлять комментарии о книге, задавать техничес-
кие вопросы, а также получать помощь от автора и других пользователей. 
Чтобы получить доступ к форуму и зарегистрироваться на нем, откройте 
в веб-браузере страницу https://www.manning.com/books/akka-inaction. Здесь 
описывается, как попасть на форум после регистрации, какие виды помо-
щи доступны и правила поведения на форуме.
Издательство Manning обязуется предоставить своим читателям место 
встречи, где может состояться содержательный диалог между отдельными 
читателями и между читателями и автором. Но со стороны автора отсутст-
вуют какие-либо обязательства уделять форуму какое-то определенное 
внимание – его присутствие на форуме остается добровольным (и неопла-
чиваемым). Мы предлагаем задавать автору стимулирующие вопросы, 
чтобы его интерес не угасал! 

 О книге

Форум и архивы предыдущих обсуждений будут доступны на сайте из-
дательства, пока книга находится в печати.

Об авторах

Раймонд Рестенбург (Raymond Roestenburg) – опытный разработчик, 
программист-полиглот и архитектор ПО. Активный член сообщества Scala, 
внештатный разработчик Akka, принимавший  участие в разработке моду-
ля Akka-Camel.
Роб Баккер (Rob Bakker) – опытный разработчик ПО, занимающийся 
созданием серверных систем и их интеграцией. Использует Scala и Akka 
начиная с версии 0.7.
Роб Уильямс (Rob Williams) – основатель онтометрики (ontometric), 
практики, ориентированной на Java-решения, включая машинное обучение. 
Впервые использовал акторы десять лет тому назад и на их основе 
реализовал несколько проектов.

Об иллюстрации на обложке

Иллюстрация с изображением китайского императора на обложке «Akka 
в действии» взята из книги «Collection of the Dresses of Different Nations, 
Ancient and Modern» (Коллекция костюмов разных народов, античных и 
современных) Томаса Джеффериса (Thomas Jefferys), опубликованной в 
Лондоне между 1757 и 1772 годом. На титульной странице указано, что это 
выполненная вручную каллиграфическая цветная гравюра, обработанная 
гуммиарабиком.
Томас Джефферис (1719–1771) носил звание «Географ короля Георга III». 
Английский картограф, был ведущим поставщиком карт того времени. Он 
выгравировал и напечатал множество карт для нужд правительства, других 
официальных органов и широкий спектр коммерческих карт и атласов, 
в частности Северной Америки. Будучи картографом, интересовался 
местной одеждой народов, населяющих разные земли, и собрал блестящую 
коллекцию различных платьев в четырех томах.
Очарование далеких земель и дальних путешествий для удовольствия 
было относительно новым явлением в конце XVIII века, и коллекции, такие 
как эта, были весьма популярны, знакомя с внешним видом жителей 
других стран. Разнообразие рисунков, собранных Джефферисом, свидетельствует 
о проявлении народами мира около 200 лет яркой индивидуальности 
и уникальности. С тех пор стиль одежды сильно изменился, 
и исчезло разнообразие, характеризующее различные области и страны. 
Теперь трудно отличить по одежде даже жителей разных континентов. 
Если взглянуть на это с оптимистической точки зрения, мы пожертвовали 
культурным и внешним разнообразием в угоду разнообразию личной 

Доступ онлайн
790 ₽
В корзину