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

Elixir в действии

Покупка
Новинка
Артикул: 882739.01.99
Доступ онлайн
998 ₽
В корзину
В книге рассматриваются базовые характеристики и примеры использования языка Elixir, предназначенного для создания масштабируемых, распределенных и отказоустойчивых систем, работающих на основе виртуальной машины Erlang. Сегодня ее используют в самых разных областях: для создания инструментов совместной работы, систем открытых торгов в режиме реального времени, серверов баз данных, многопользовательских онлайн-игр и др. Приведенные в книге примеры подчеркивают преимущества функционального и конкурентного программирования на языке Elixir, которые могут обеспечить бесперебойную работу систем, обслуживающих огромное количество пользователей со всего мира. Издание предназначено для профессиональных разработчиков, имеющих опыт программирования на Java, C#, Ruby, C++ или другом языке общего назначения.
81
119
Юрич, С. Elixir в действии : практическое руководство / С. Юрич ; пер. с анг. Н. А. Нестеровой. - Москва : ДМК Пресс, 2020. - 378 с. - ISBN 978-5-97060-773-2. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2260372 (дата обращения: 08.10.2026). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Саша Юрич
Elixir в действии


Elixir in Action
SECOND EDITION
SAŠA JURIC


Elixir в действии
САША ЮРИЧ
Москва, 2020


УДК	 004.43Elixir
ББК	 32.972
Ю70
Юрич С.
Ю70	 Elixir в действии / пер. с анг. Н. А. Нестеровой. – М.: ДМК Пресс, 2020. – 376 с.: 
ил. 
ISBN 978-5-97060-773-2
В книге рассматриваются базовые характеристики и примеры использования 
языка Elixir, предназначенного для создания масштабируемых, распределенных и отказоустойчивых систем, работающих на основе виртуальной машины Erlang. Сегодня 
ее используют в самых разных областях: для создания инструментов совместной 
работы, систем открытых торгов в режиме реального времени, серверов баз данных, 
многопользовательских онлайн-игр и др.
Приведенные в книге примеры подчеркивают преимущества функционального 
и конкурентного программирования на языке Elixir, которые могут обеспечить бесперебойную работу систем, обслуживающих огромное количество пользователей со 
всего мира.
Издание предназначено для профессиональных разработчиков, имеющих опыт 
программирования на Java, C#, Ruby, C++ или другом языке общего назначения.
УДК  004.43Elixir
ББК  32.972
Original English language edition published by Manning Publications USA, USA. Copyright © 2019 
by Manning Publications Co. Russian-language edition copyright © 2020 by DMK Press. All rights 
reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой 
бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
ISBN 978-1-617-29502-7 (анг.)	
Copyright © 2019 by Manning Publications Co.
ISBN 978-5-97060-773-2 (рус.)	
©  Оформление, издание, перевод, ДМК Пресс, 2020


Содержание
Отзывы о первом издании................................................................................................. 10
Предисловие........................................................................................................................... 11
Благодарности........................................................................................................................ 12
О книге...................................................................................................................................... 13
Об авторе................................................................................................................................. 17
Иллюстрация на обложке................................................................................................... 18
Глава 1. Первые шаги........................................................................................................... 19
1.1. Общие сведения об Erlang.................................................................................................. 19
1.1.1. Высокая доступность................................................................................................... 20
1.1.2. Конкурентная модель Erlang...................................................................................... 21
1.1.3. Системы на стороне сервера...................................................................................... 23
1.1.4. Платформа разработки............................................................................................... 25
1.2. Общие сведения об Elixir.................................................................................................... 26
1.2.1. Упрощенный код......................................................................................................... 27
1.2.2. Композиция функций................................................................................................. 30
1.2.3. Выводы......................................................................................................................... 31
1.3. Недостатки.......................................................................................................................... 32
1.3.1. Скорость....................................................................................................................... 32
1.3.2. Экосистема................................................................................................................... 32
Выводы....................................................................................................................................... 33
Глава 2. Основы языка......................................................................................................... 34
2.1. Интерактивная оболочка................................................................................................... 35
2.2. Работа с переменными....................................................................................................... 36
2.3. Организация кода............................................................................................................... 37
2.3.1. Модули......................................................................................................................... 37
2.3.2. Функции....................................................................................................................... 39
2.3.3. Арность функций......................................................................................................... 42
2.3.4. Видимость функций.................................................................................................... 43
2.3.5. Импорты и псевдонимы............................................................................................. 44
2.3.6. Атрибуты модулей....................................................................................................... 45
2.3.7. Комментарии............................................................................................................... 47
2.4. Понятие системы типов..................................................................................................... 48
2.4.1. Числа............................................................................................................................ 48
2.4.2. Атомы........................................................................................................................... 49
2.4.3. Кортежи........................................................................................................................ 51
2.4.4. Списки.......................................................................................................................... 52
2.4.5. Иммутабельность........................................................................................................ 56
2.4.6. Словари........................................................................................................................ 59
2.4.7. Бинарные данные и битовые строки......................................................................... 62
2.4.8. Строки.......................................................................................................................... 63
2.4.9. Функции первого класса............................................................................................. 65
2.4.10. Прочие встроенные типы......................................................................................... 67
2.4.11. Типы данных более высокого уровня...................................................................... 68
2.4.12. Списки ввода-вывода................................................................................................ 72
2.5. Операторы........................................................................................................................... 73
2.6. Макросы............................................................................................................................... 74


6    Содержание
2.7. Среда выполнения.............................................................................................................. 75
2.7.1. Модули и функции в среде выполнения.................................................................... 75
2.7.2. Запуск среды выполнения........................................................................................... 78
Выводы....................................................................................................................................... 80
Глава 3. Поток управления................................................................................................. 81
3.1. Сопоставление с образцом................................................................................................. 81
3.1.1. Оператор сопоставления............................................................................................ 82
3.1.2. Сопоставление кортежей............................................................................................ 82
3.1.3. Сопоставление с константой...................................................................................... 83
3.1.4. Переменные в качестве образцов.............................................................................. 84
3.1.5. Сопоставление списков............................................................................................... 85
3.1.6. Сопоставление словарей............................................................................................. 86
3.1.7. Сопоставление с битовыми строками и бинарными данными............................... 86
3.1.8. Сложные сопоставления............................................................................................. 88
3.1.9. Обобщенное поведение.............................................................................................. 90
3.2. Сопоставление с образцом в функциях............................................................................ 90
3.2.1. Функции с несколькими предложениями................................................................. 91
3.2.2. Ограничители.............................................................................................................. 94
3.2.3. Анонимные функции с несколькими предложениями............................................ 96
3.3. Условные конструкции....................................................................................................... 97
3.3.1. Ветвление с помощью функций с несколькими предложениями........................... 97
3.3.2. Классические конструкции ветвления...................................................................... 99
3.3.3. Специальная форма with.......................................................................................... 101
3.4. Циклы и итерации............................................................................................................ 104
3.4.1. Итерация на основе рекурсии.................................................................................. 105
3.4.2. Хвостовые вызовы функций..................................................................................... 106
3.4.3. Функции высшего порядка....................................................................................... 109
3.4.4. Генераторы................................................................................................................. 114
3.4.5. Потоки........................................................................................................................ 116
Выводы..................................................................................................................................... 119
Глава 4. Абстракции данных............................................................................................ 121
4.1. Создание абстракций с помощью модулей.................................................................... 122
4.1.1. Создание простой абстракции................................................................................. 123
4.1.2. Сложные абстракции................................................................................................. 125
4.4.3. Структурирование данных с помощью словарей................................................... 126
4.1.4. Абстракции на основе структур............................................................................... 127
4.1.5. Прозрачность данных............................................................................................... 131
4.2. Работа с иерархическими данными................................................................................ 133
4.2.1. Генерация идентификаторов................................................................................... 134
4.2.2. Обновление записей................................................................................................. 136
4.2.3. Обновление неизменяемых иерархических данных.............................................. 138
4.2.4. Итеративное обновление.......................................................................................... 140
4.2.5. Практика: импорт из файла...................................................................................... 141
4.3. Полиморфизм с помощью протоколов........................................................................... 143
4.3.1. Общие сведения о протоколах................................................................................. 143
4.3.2. Реализация протокола.............................................................................................. 144
4.3.3. Встроенные протоколы............................................................................................. 145
Выводы..................................................................................................................................... 147
Глава 5. Основы конкурентности.................................................................................... 148
5.1. Конкурентность в BEAM................................................................................................... 148
5.2. Работа с процессами......................................................................................................... 151


Содержание    7
5.2.1. Создание процессов.................................................................................................. 152
5.2.2. Обмен сообщениями................................................................................................. 154
5.3. Серверные процессы с сохранением состояния............................................................. 159
5.3.1. Серверные процессы................................................................................................. 159
5.3.2. Сохранение состояния процесса.............................................................................. 163
5.3.3. Изменяемое состояние............................................................................................. 165
5.3.4. Сложные состояния................................................................................................... 168
5.3.5. Регистрация процессов............................................................................................. 172
5.4. Особенности времени выполнения................................................................................. 173
5.4.1. Последовательность выполнений действий в процессах....................................... 173
5.4.2.  Бездонные почтовые ящики процессов................................................................. 175
5.4.3. Конкурентность без разделения ресурсов............................................................... 176
5.4.4. Внутреннее устройство планировщиков................................................................. 177
Выводы..................................................................................................................................... 178
Глава 6. Обобщенные серверные процессы............................................................... 179
6.1. Создание обобщенного серверного процесса................................................................ 179
6.1.1. Подключение к обобщенному коду с помощью модулей...................................... 180
6.1.2. Реализация обобщенного кода................................................................................. 181
6.1.3. Использование обобщенной абстракции................................................................ 182
6.1.4. Поддержка асинхронных запросов.......................................................................... 184
6.1.5. Упражнение: реорганизация сервера для списка дел............................................. 185
6.2. Использование GenServer................................................................................................. 186
6.2.1. Поведения OTP.......................................................................................................... 187
6.2.2. Подключение к GenServer......................................................................................... 187
6.2.3. Обработка запросов.................................................................................................. 188
6.2.4. Обработка простых сообщений................................................................................ 190
6.2.5. Прочие особенности GenServer................................................................................ 191
6.2.6. Жизненный цикл процесса...................................................................................... 194
6.2.7. Совместимые с OTP процессы.................................................................................. 195
6.2.8. Упражнение: создание сервера для списка дел на основе GenServer.................... 196
Выводы..................................................................................................................................... 196
Глава 7. Создание конкурентной системы.................................................................... 198
7.1. Работа с проектом mix...................................................................................................... 198
7.2. Управление несколькими списками дел......................................................................... 200
7.2.1. Создание кеш-процесса............................................................................................ 201
7.2.2. Создание тестов......................................................................................................... 203
7.2.3. Анализ зависимостей процесса................................................................................ 206
7.3. Сохранение данных.......................................................................................................... 208
7.3.1. Кодирование и сохранение....................................................................................... 208
7.3.2. Использование базы данных.................................................................................... 210
7.3.3. Анализ системы......................................................................................................... 213
7.3.4. Устранение узкого места процесса........................................................................... 214
7.3.5. Упражнение: пул процессов и синхронизация........................................................ 217
7.4. Логика работы процессов................................................................................................. 218
Выводы..................................................................................................................................... 219
Глава 8. Основы отказоустойчивости............................................................................ 220
8.1. Ошибки времени выполнения......................................................................................... 221
8.1.1. Типы ошибок............................................................................................................. 221
8.1.2. Обработка ошибок..................................................................................................... 222
8.2. Ошибки в конкурентных системах.................................................................................. 226
8.2.1. Установка связей между процессами....................................................................... 227
8.2.2. Мониторы.................................................................................................................. 229


8    Содержание
8.3. Супервизоры..................................................................................................................... 230
8.3.1. Подготовка существующего кода............................................................................. 232
8.3.2. Запуск процесса-супервизора.................................................................................. 232
8.3.3. Спецификации потомков......................................................................................... 235
8.3.4. Обертка супервизора................................................................................................ 237
8.3.5. Использование модуля обратного вызова............................................................... 237
8.3.6. Связывание всех процессов...................................................................................... 238
8.3.7. Частота перезапусков................................................................................................ 241
Выводы..................................................................................................................................... 242
Глава 9. Изолирование последствий ошибок............................................................. 243
9.1. Деревья супервизоров...................................................................................................... 244
9.1.1. Разделение слабо связанных частей........................................................................ 244
9.1.2. Усовершенствованное обнаружение процессов...................................................... 247
9.1.3. Via-кортежи............................................................................................................... 249
9.1.4. Регистрация рабочих процессов базы данных........................................................ 251
9.1.5. Наблюдение за рабочими процессами.................................................................... 253
9.1.6. Построение дерева супервизоров............................................................................ 256
9.2. Динамический запуск рабочих процессов...................................................................... 259
9.2.1. Регистрация серверных процессов.......................................................................... 260
9.2.2. Динамические супервизоры..................................................................................... 260
9.2.3. Обнаружение серверных процессов........................................................................ 262
9.2.4. Использование временных рабочих процессов...................................................... 263
9.2.5. Тестирование системы.............................................................................................. 264
9.3. Let it crash.......................................................................................................................... 265
9.3.1. Процессы, отказа которых допускать нельзя.......................................................... 266
9.3.2. Обработка ожидаемых ошибок................................................................................ 267
9.3.3. Сохранение состояния.............................................................................................. 268
Выводы..................................................................................................................................... 269
Глава 10. За пределами GenServer................................................................................. 270
10.1. Задачи.............................................................................................................................. 270
10.1.1. Задачи с ожиданием ответа.................................................................................... 271
10.1.2. Задачи без ожидания ответа................................................................................... 273
10.2. Агенты............................................................................................................................. 275
10.2.1. Использование агентов........................................................................................... 275
10.2.2. Агенты и конкурентность....................................................................................... 276
10.2.3. Сервер списка дел на основе модуля Agent........................................................... 277
10.2.4. Пределы возможностей агентов............................................................................. 279
10.3. Таблицы ETS.................................................................................................................... 281
10.3.1. Основные операции................................................................................................ 284
10.3.2. Хранилище ключ/значение на основе таблицы ETS............................................. 287
10.3.3. Прочие операции ETS.............................................................................................. 290
10.3.4. Упражнение: реестр процессов.............................................................................. 293
Выводы..................................................................................................................................... 295
Глава 11. Работа с компонентами.................................................................................. 296
11.1. OTP-приложения............................................................................................................ 296
11.1.1. Создание приложений с помощью инструмента mix........................................... 296
11.1.2. Поведение приложения.......................................................................................... 298
11.1.3. Запуск приложения................................................................................................. 299
11.1.4. Библиотечные приложения.................................................................................... 300
11.1.5. Создание приложения текущей системы.............................................................. 300
11.1.6. Структура каталогов приложения.......................................................................... 302
11.2. Работа с зависимостями................................................................................................. 304


Содержание    9
11.2.1. Добавление зависимости........................................................................................ 305
11.2.2. Реорганизация пула процессов.............................................................................. 305
11.2.3. Визуализация системы........................................................................................... 308
11.3. Создание веб-сервера..................................................................................................... 309
11.3.1. Выбор зависимостей............................................................................................... 309
11.3.2. Запуск сервера......................................................................................................... 310
11.3.3. Обработка запросов................................................................................................. 312
11.3.4. Логика работы системы.......................................................................................... 315
11.4. Настройка приложений.................................................................................................. 319
11.4.1. Окружение приложения.......................................................................................... 319
11.4.2. Изменяемость настроек.......................................................................................... 320
11.4.3. Особенности скриптов конфигурации.................................................................. 321
Выводы..................................................................................................................................... 322
Глава 12. Создание распределенной системы............................................................ 323
12.1. Примитивы распределенных вычислений................................................................... 325
12.1.1. Запуск кластера....................................................................................................... 325
12.1.2. Взаимодействие узлов............................................................................................ 326
12.1.3. Обнаружение процессов......................................................................................... 329
12.1.4. Ссылки и мониторы................................................................................................ 332
12.1.5. Прочие сервисы распределения............................................................................. 333
12.2. Создание отказоустойчивого кластера......................................................................... 335
12.2.1. Устройство кластера................................................................................................ 336
12.2.2. Распределенный кеш.............................................................................................. 336
12.2.3. Создание репликационной базы данных.............................................................. 341
12.2.4. Тестирование системы............................................................................................ 344
12.2.5. Обнаружение потери связности сети..................................................................... 346
12.2.6. Высокодоступные системы..................................................................................... 347
12.3. Особенности сетевого соединения................................................................................ 348
12.3.1. Имена узлов............................................................................................................. 348
12.3.2. Файлы cookie............................................................................................................ 349
12.3.3. Скрытые узлы.......................................................................................................... 350
12.3.4. Фаерволы.................................................................................................................. 350
Выводы..................................................................................................................................... 352
Глава 13. Запуск системы.................................................................................................. 353
13.1. Запуск системы с помощью инструментов Elixir......................................................... 353
13.1.1. Использование команд mix и elixir........................................................................ 354
13.1.2. Выполнение скриптов............................................................................................. 355
13.1.3. Компиляция для промышленной эксплуатации................................................... 356
13.2. OTP-релизы..................................................................................................................... 358
13.2.1. Создание релиза с помощью distillery................................................................... 358
13.2.2. Использование релиза............................................................................................ 360
13.2.3. Структура релиза..................................................................................................... 361
13.3. Анализ поведения системы............................................................................................ 365
13.3.1. Отладка..................................................................................................................... 365
13.3.2. Журналирование..................................................................................................... 367
13.3.3. Взаимодействие с системой................................................................................... 367
13.3.4. Трассировка............................................................................................................. 368
Выводы..................................................................................................................................... 371


Отзывы о первом издании
Увлекательно и познавательно… море практических советов. 
– Вед Антани, компания Electronic Arts
Прекрасно показано на реальных примерах, на что способен Elixir по части распределенных вычислений. 
– Кристофер Бэйли, компания HotelTonight
Если вы хотите научиться думать и решать проблемы как настоящий эликсирщик, 
эта книга для вас! 
– Космас Чатзимикалис
Функциональное программирование стало понятнее. 
– Мохсен Мостафа Джокар, газета Hamshari
Возможно, лучшее введение в Elixir и функциональное программирование. 
– Покупатель интернет-магазина Amazon
Отличная книга для опытных разработчиков, желающих познакомиться с Elixir 
поближе. 
– Покупатель интернет-магазина Amazon


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