Среда выполнения с открытым исходным кодом
Akka — это исходный набор инструментов и среда выполнения, упрощающие создание параллельных и распределенных приложений на JVM . Akka поддерживает несколько моделей программирования для параллелизма, но делает акцент на параллелизме на основе акторов , черпая вдохновение из Erlang . [2]
Языковые привязки существуют как для Java , так и для Scala . Akka написан на Scala, и, начиная с Scala 2.10, актеры стандартной библиотеки Scala устарели в пользу Akka. [3]
История
Реализация актора, написанная Филиппом Халлером, была выпущена в июле 2006 года как часть Scala 2.1.7. [4] К 2008 году Scala привлекла внимание для использования в сложных серверных приложениях, но параллелизм все еще обычно достигался путем создания потоков, которые разделяли память и синхронизировались при необходимости с помощью блокировок. Осознавая трудности с этим подходом и вдохновившись поддержкой библиотеки языка программирования Erlang для написания высокопараллельных, управляемых событиями приложений, шведский программист Йонас Бонер создал Akka, чтобы привнести аналогичные возможности в Scala и Java. Бонер начал работать над Akka в начале 2009 года [5] и описал свое видение этого в июне того же года. [6] Первым публичным релизом была Akka 0.5, [7] анонсированная в январе 2010 года. [8] Akka теперь является частью платформы Lightbend вместе с фреймворком Play и языком программирования Scala .
В сентябре 2022 года Lightbend объявила, что Akka изменит свою лицензию с лицензии свободного программного обеспечения Apache License 2.0 на проприетарную лицензию с доступом к исходному коду , известную как Business Source License (BSL). Любой новый код под BSL станет доступен под лицензией Apache License через три года. [9]
Отличительные черты
Ключевые моменты, отличающие приложения на основе актеров Akka:
- Параллелизм основан на сообщениях и является асинхронным: обычно не происходит обмена изменяемыми данными и не используются примитивы синхронизации; Akka реализует модель акторов .
- Взаимодействие участников одинаково независимо от того, находятся ли они на одном хосте или на разных хостах, взаимодействуют напрямую или через средства маршрутизации, работают в нескольких потоках или во многих потоках и т. д. Такие детали могут быть изменены во время развертывания с помощью механизма конфигурации, что позволяет масштабировать программу (для использования более мощных серверов) и уменьшать ее (для использования большего количества серверов) без внесения изменений.
- Актеры организованы иерархически относительно сбоев программы, которые рассматриваются как события, которые должны быть обработаны супервизором актера (независимо от того, какой актер отправил сообщение, вызвавшее сбой). В отличие от Erlang, Akka обеспечивает родительский надзор, что означает, что каждый актер создается и контролируется его родительским актером.
Akka имеет модульную структуру, с основным модулем, предоставляющим акторов. Другие модули доступны для добавления функций, таких как сетевое распределение акторов, поддержка кластера , Command and Event Sourcing, интеграция с различными сторонними системами (например, Apache Camel , ZeroMQ ) и даже поддержка других моделей параллелизма, таких как Futures и Agents.
Структура проекта
Виктор Кланг стал техническим руководителем проекта Akka в сентябре 2011 года. Когда Виктор стал директором по инжинирингу в Lightbend в декабре 2012 года, Роланд Кун стал техническим руководителем Akka. Основная часть разработки выполняется основной командой, работающей в Lightbend, [10] при поддержке активного сообщества. [11] В настоящее время акцент делается на расширении поддержки кластера .
Связь с другими библиотеками
Появились и другие фреймворки и наборы инструментов, сформировавшие экосистему вокруг Akka:
- Набор инструментов Spray [12] реализован с использованием Akka и включает в себя HTTP-сервер , а также сопутствующие возможности, такие как доменно-ориентированный язык (DSL) для создания RESTful API.
- Фреймворк Play для разработки веб-приложений предлагает интеграцию с Akka [13]
- Вплоть до версии 1.6 Apache Spark использовал Akka для связи между узлами [14].
- Библиотека Socko Web Server поддерживает реализацию REST API для приложений Akka [15]
- Библиотека событий [16] обеспечивает поддержку архитектуры, управляемой событиями (см. также проектирование на основе домена ), для акторов Akka.
- Инструмент стресс-тестирования Gatling для нагрузочного тестирования веб-серверов создан на основе Akka [17]
- Веб- фреймворк Scalatra предлагает интеграцию с Akka. [18]
- Фреймворк разработки веб-приложений Vaadin может интегрироваться с Akka [19]
- Система Apache Flink (платформа для распределенной потоковой и пакетной обработки данных) RPC построена с использованием Akka [20], но изолирована с версии 1.14. [21]
- Фреймворк Lagom для создания реактивных микросервисов реализован поверх Akka. [22]
На GitHub зарегистрировано более 250 публичных проектов , использующих Akka. [23]
Публикации об Акке
Есть несколько книг об Акке:
- Основы Акка [24]
- Примеры кода Akka
- Параллелизм Akka [25]
- Акка в действии, второе издание [26]
- Акка в действии [27]
- Эффективный Акка [28]
- Компонуемые фьючерсы с Akka 2.0, включая примеры кода на Java, Scala и Akka [29]
Акка также присутствует в:
- «Актёры в Ла Скала» П. Галлера [30]
- «Скала в действии» Н. Райчаудхури [31]
- «Функциональное программирование для разработчиков Java» Д. Уомплера [32]
- «Кулинарная книга Scala» А. Александра [33]
- В. Субраманиам «Программирование параллельного выполнения на JVM» [34]
- «Реактивные веб-приложения» М. Бернхардта [35]
Помимо множества веб-статей, описывающих коммерческое использование Akka, [36] [37]
существуют также обзорные статьи о нем. [38] [39]
Ссылки
- ^ Команда Акка. «Выпущен Акка 23.10» . Проверено 27 декабря 2023 г.
- ^ Команда Акка. «Введение в актеры Scala» . Проверено 17 сентября 2018 г.
- ^ Йованович, Воин. "The Scala Actors Migration Guide". Архивировано из оригинала 5 декабря 2013 года . Получено 13 марта 2013 года .
- ^ "История версий Scala - Старые версии". scala-lang.org. 2009-02-16. Архивировано из оригинала 2013-01-04.
- ^ Йонас Бонер (16.02.2009). "init project setup". github.com.
- ^ Бонер, Йонас. "Akka Actor Kernel". [email protected] . Архивировано из оригинала 2016-03-04 . Получено 2017-07-13 .
- ^ Йонас Бонер (12 июля 2009 г.). «v0.5». github.com.
- ^ Йонас Бонер (2010-01-04). «Представляем Akka — более простая масштабируемость, отказоустойчивость, параллелизм и удаленное взаимодействие через актеров». jonasboner.com.
- ^ Бонер, Йонас. «Почему мы меняем лицензию для Akka» . Получено 7 сентября 2022 г.
- ^ "Команда Akka". akka.io . Получено 6 июня 2013 г. .
- ^ "Список участников Akka". github.com . Получено 6 июня 2013 г. .
- ^ Дёниц, Матиас. "Spray toolkit". spray.io . Получено 6 июня 2013 г. .
- ^ "Документация по фреймворку Play: Интеграция с Akka". playframework.com . Получено 6 июня 2013 г. .
- ^ "Исходные данные проекта Spark". github.com . Получено 6 июня 2013 г. .
- ^ "Socko Web Server". sockoweb.org . Получено 6 июня 2013 г. .
- ^ "eventsourced library". eligosource . Получено 6 июня 2013 г. .
- ^ "Инструмент стресс-теста Gatling". github.com . Получено 6 июня 2013 г. .
- ^ "Акка - Скалатра". scalatra.org . Проверено 6 октября 2022 г.
- ^ «Ваадин в Акке». Vaadin.com . Проверено 26 апреля 2014 г.
- ^ «Apache Flink — Акка за победу!». http://flink.apache.org . Проверено 2 декабря 2015 г.
- ^ "Apache Flink: Scala Free в One Fifteen". flink.apache.org . 22 февраля 2022 г. . Получено 22 апреля 2022 г. .
- ^ «Лагом — Интеграция с Аккой».
- ^ Ташарофи, Самира. «Корпус актерского проекта Akka на GitHub». cs.illinois.edu. Архивировано из оригинала 30 октября 2012 г. Проверено 6 июня 2013 г.
- ^ Гупта, Муниш К. (2012). Akka Essentials. Packt Publishing. стр. 334. ISBN 978-1849518284.
- ^ Вятт, Дерек (2013). Акка Параллелизм . Артима. п. 521. ИСБН 978-0981531663.
- ^ Лопес-Санчо Абрахам, Франциско (2023). Акка в действии, второе издание . Публикации Мэннинга. п. 400. ИСБН 978-1617299216.
- ^ Ростенбург, Раймонд (2013). Акка в действии . Публикации Мэннинга. п. 475. ИСБН 978-1617291012.
- ^ Аллен, Джейми (2013). Эффективная Акка . О'Рейли Медиа. п. 74. ИСБН 978-1449360078.
- ^ Slinn, Michael (2012). Компонуемые будущие с Akka 2.0 . Исследования в области микронавтики. стр. 178. ISBN 978-0984278923.
- ^ Халлер, Филипп (2012). Актеры в Scala . Артима. п. 169. ИСБН 978-0981531656.
- ^ Райчаудхури, Ниланджан (2013). Скала в действии . Публикации Мэннинга. п. 416. ИСБН 978-1935182757.
- ^ Уомплер, Дин (2011). Функциональное программирование для разработчиков Java . O'Reilly Media. С. 90. ISBN 978-1449311032.
- ^ Александр, Элвин (2013). Scala Cookbook . O'Reilly Media. стр. 722. ISBN 978-1449339616.
- ^ Субраманиам, Венкат (2011). Программирование параллелизма на JVM: Освоение синхронизации, STM и актеров . Pragmatic Bookshelf. С. 280. ISBN 978-1934356760.
- ^ Бернхардт, Мануэль (2016). Реактивные веб-приложения: охватывает Play, Akka и реактивные потоки . Manning Publications. стр. 328. ISBN 9781633430099.
- ↑ Дарроу, Барб (25 июня 2012 г.). «Juniper networks sign on with Scala». gigaom.com. Архивировано из оригинала 2 июня 2013 г. Получено 8 июня 2013 г.
- ^ Росс, Дэвид. «Масштабирование API Klout с помощью Scala, Akka и Play» . Получено 8 июня 2013 г.
- ^ Хейнс, Стивен (8 мая 2013 г.). "Проекты Java с открытым исходным кодом: Akka". JavaWorld . Получено 15 июля 2020 г. .
- ^ "Java Magazin 6.13". jaxenter.de. Архивировано из оригинала 13 августа 2013 г. Получено 8 июня 2013 г.
Внешние ссылки