Akka (toolkit)

Last updated
Akka
Original author(s) Jonas Bonér
Developer(s) Lightbend
Initial releaseJuly 2009 (2009-07)
Stable release
2.9.1 / December 19, 2023;3 months ago (2023-12-19) [1]
Repository
Written in Scala
Operating system Cross-platform
Platform Java Virtual Machine
License multiple
Website akka.io

Akka is a source-available toolkit and runtime simplifying the construction of concurrent and distributed applications on the JVM. Akka supports multiple programming models for concurrency, but it emphasizes actor-based concurrency, with inspiration drawn from Erlang. [2]

Contents

Language bindings exist for both Java and Scala. Akka is written in Scala and, as of Scala 2.10, the actors in the Scala standard library are deprecated in favor of Akka. [3]

History

An actor implementation, written by Philipp Haller, was released in July 2006 as part of Scala 2.1.7. [4] By 2008 Scala was attracting attention for use in complex server applications, but concurrency was still typically achieved by creating threads that shared memory and synchronized when necessary using locks. Aware of the difficulties with that approach and inspired by the Erlang programming language's library support for writing highly concurrent, event-driven applications, the Swedish programmer Jonas Bonér created Akka to bring similar capabilities to Scala and Java. Bonér began working on Akka in early 2009 [5] and wrote up his vision for it in June of that year. [6] The first public release was Akka 0.5, [7] announced in January 2010. [8] Akka is now part of the Lightbend Platform together with the Play framework and the Scala programming language.

In September 2022, Lightbend announced that Akka would change its license from the free software license Apache License 2.0 to a proprietary source-available license, known as the Business Source License (BSL). Any new code under the BSL would become available under the Apache License after three years. [9]

Distinguishing features

The key points distinguishing applications based on Akka actors are:

Akka has a modular structure, with a core module providing actors. Other modules are available to add features such as network distribution of actors, cluster support, Command and Event Sourcing, integration with various third-party systems (e.g. Apache Camel, ZeroMQ), and even support for other concurrency models such as Futures and Agents.

Project structure

Viktor Klang became the technical lead for the Akka project in September 2011. When Viktor became Director of Engineering at Lightbend in December 2012, Roland Kuhn became the technical lead for Akka. The main part of the development is done by a core team employed at Lightbend, [10] supported by an active community. [11] The current emphasis is on extending cluster support.

Relation to other libraries

Other frameworks and toolkits have emerged to form an ecosystem around Akka:

There are more than 250 public projects registered on GitHub which use Akka. [23]

Publications about Akka

There are several books about Akka:

Akka also features in:

Besides many web articles that describe the commercial use of Akka, [36] [37] there are also overview articles about it. [38] [39]

Related Research Articles

<span class="mw-page-title-main">Eclipse (software)</span> Software development environment

Eclipse is an integrated development environment (IDE) used in computer programming. It contains a base workspace and an extensible plug-in system for customizing the environment. It is the second-most-popular IDE for Java development, and, until 2016, was the most popular. Eclipse is written mostly in Java and its primary use is for developing Java applications, but it may also be used to develop applications in other programming languages via plug-ins, including Ada, ABAP, C, C++, C#, Clojure, COBOL, D, Erlang, Fortran, Groovy, Haskell, JavaScript, Julia, Lasso, Lua, NATURAL, Perl, PHP, Prolog, Python, R, Ruby, Rust, Scala, and Scheme. It can also be used to develop documents with LaTeX and packages for the software Mathematica. Development environments include the Eclipse Java development tools (JDT) for Java and Scala, Eclipse CDT for C/C++, and Eclipse PDT for PHP, among others.

BeanShell is a small, free, embeddable Java source interpreter with object scripting language features, written in Java. It runs in the Java Runtime Environment (JRE), dynamically executes standard Java syntax and extends it with common scripting conveniences such as loose types, commands, and method closures, like those in Perl and JavaScript.

Cascading is a software abstraction layer for Apache Hadoop and Apache Flink. Cascading is used to create and execute complex data processing workflows on a Hadoop cluster using any JVM-based language, hiding the underlying complexity of MapReduce jobs. It is open source and available under the Apache License. Commercial support is available from Driven, Inc.

In computing, a solution stack or software stack is a set of software subsystems or components needed to create a complete platform such that no additional software is needed to support applications. Applications are said to "run on" or "run on top of" the resulting platform.

<span class="mw-page-title-main">Scala (programming language)</span> General-purpose programming language

Scala is a strong statically typed high-level general-purpose programming language that supports both object-oriented programming and functional programming. Designed to be concise, many of Scala's design decisions are intended to address criticisms of Java.

Echo is a web application framework created by the company NextApp. The latest iteration, Echo3, allows writing applications in either server-side Java or client-side JavaScript. Server-side applications do not require developer knowledge of HTML, HTTP, or JavaScript. Client-side JavaScript-based applications do not require a server, but can communicate with one via AJAX.

<span class="mw-page-title-main">Google Web Toolkit</span> Free Java library

Google Web Toolkit, or GWT Web Toolkit, is an open-source set of tools that allows web developers to create and maintain JavaScript front-end applications in Java. It is licensed under Apache License 2.0.

Apache Camel is an open source framework for message-oriented middleware with a rule-based routing and mediation engine that provides a Java object-based implementation of the Enterprise Integration Patterns using an application programming interface to configure routing and mediation rules.

<span class="mw-page-title-main">Lift (web framework)</span>

Lift is a free and open-source web framework that is designed for the Scala programming language. It was originally created by David Pollak who was dissatisfied with certain aspects of the Ruby on Rails framework. Lift was launched as an open source project on 26 February 2007 under the Apache License 2.0. A commercially popular web platform often cited as being developed using Lift is Foursquare.

Fantom is a general-purpose object-oriented programming language, created by Brian Frank and Andy Frank. It runs on the Java Runtime Environment (JRE), JavaScript, and the .NET Common Language Runtime (CLR). Its stated goal is to provide a standard library API. Fantom uses a curly brace syntax, supports functional programming through closures and concurrency through the Actor model, and blends aspects of both static and dynamic typing.

<span class="mw-page-title-main">Vaadin</span>

Vaadin is an open-source web application development platform for Java. Vaadin includes a set of Web Components, a Java web framework, and a set of tools that enable developers to implement modern web graphical user interfaces (GUI) using the Java programming language only, TypeScript only, or a combination of both.

sbt (software) Open-source build tool for Scala and Java projects

sbt is an open-source build tool created explicitly for Scala and Java projects. It aims to streamline the procedure of constructing, compiling, testing, and packaging applications, libraries, and frameworks. sbt is highly adaptable, permitting developers to customize the build process according to their project's specific needs.

<span class="mw-page-title-main">Play Framework</span> Open-source web framework written in Scala

Play Framework is an open-source web application framework which follows the model–view–controller (MVC) architectural pattern. It is written in Scala and usable from other programming languages that are compiled to JVM bytecode, e.g. Java. It aims to optimize developer productivity by using convention over configuration, hot code reloading and display of errors in the browser.

<span class="mw-page-title-main">Vert.x</span>

Eclipse Vert.x is a polyglot event-driven application framework that runs on the Java Virtual Machine.

Lightbend, formerly known as Typesafe, is a company founded by Martin Odersky, the creator of the Scala programming language, Jonas Bonér, the creator of the Akka middleware, and Paul Phillips in 2011.

Eclipse Deeplearning4j is a programming library written in Java for the Java virtual machine (JVM). It is a framework with wide support for deep learning algorithms. Deeplearning4j includes implementations of the restricted Boltzmann machine, deep belief net, deep autoencoder, stacked denoising autoencoder and recursive neural tensor network, word2vec, doc2vec, and GloVe. These algorithms all include distributed parallel versions that integrate with Apache Hadoop and Spark.

Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure.

References

  1. Akka Team. "Akka 23.10 Released" . Retrieved 27 December 2023.
  2. Akka Team. "Scala Actors Introduction" . Retrieved 17 September 2018.
  3. Jovanovic, Vojin. "The Scala Actors Migration Guide". Archived from the original on 5 December 2013. Retrieved 13 March 2013.
  4. "Scala Version History - Older versions". scala-lang.org. 2009-02-16. Archived from the original on 2013-01-04.
  5. Jonas Bonér (2009-02-16). "init project setup". github.com.
  6. Bonér, Jonas. "Akka Actor Kernel". scala-language@googlegroups.com. Archived from the original on 2016-03-04. Retrieved 2017-07-13.
  7. Jonas Bonér (2009-07-12). "v0.5". github.com.
  8. Jonas Bonér (2010-01-04). "Introducing Akka - Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Actors". jonasboner.com.
  9. Bonér, Jonas. "Why We Are Changing the License for Akka" . Retrieved 7 September 2022.
  10. "Akka team". akka.io. Retrieved 6 June 2013.
  11. "Akka contributors list". github.com. Retrieved 6 June 2013.
  12. Doenitz, Mathias. "Spray toolkit". spray.io. Retrieved 6 June 2013.
  13. "Play framework documentation: Integrating with Akka". playframework.com. Retrieved 6 June 2013.
  14. "Spark project sources". github.com. Retrieved 6 June 2013.
  15. "Socko Web Server". sockoweb.org. Retrieved 6 June 2013.
  16. "eventsourced library". eligosource. Retrieved 6 June 2013.
  17. "Gatling stress test tool". github.com. Retrieved 6 June 2013.
  18. "Akka - Scalatra". scalatra.org. Retrieved 2022-10-06.
  19. "Vaadin in Akka". Vaadin.com. Retrieved 26 April 2014.
  20. "Apache Flink - Akka for the win !". flink.apache.org. Retrieved 2 December 2015.
  21. "Apache Flink: Scala Free in One Fifteen". flink.apache.org. 22 February 2022. Retrieved 2022-04-22.
  22. "Lagom - Integrating with Akka".
  23. Tasharofi, Samira. "Akka actor project corpus at GitHub". cs.illinois.edu. Archived from the original on 2012-10-30. Retrieved 2013-06-06.
  24. Gupta, Munish K. (2012). Akka Essentials. Packt Publishing. p. 334. ISBN   978-1849518284.
  25. Wyatt, Derek (2013). Akka Concurrency. Artima. p. 521. ISBN   978-0981531663.
  26. Lopez-Sancho Abraham, Francisco (2023). Akka in Action, Second Edition. Manning Publications. p. 400. ISBN   978-1617299216.
  27. Roestenburg, Raymond (2013). Akka in Action. Manning Publications. p. 475. ISBN   978-1617291012.
  28. Allen, Jamie (2013). Effective Akka. O'Reilly Media. p. 74. ISBN   978-1449360078.
  29. Slinn, Michael (2012). Composable Futures with Akka 2.0. Micronautics Research. p. 178. ISBN   978-0984278923.
  30. Haller, Philipp (2012). Actors in Scala. Artima. p. 169. ISBN   978-0981531656.
  31. Raychaudhuri, Nilanjan (2013). Scala in Action. Manning Publications. p. 416. ISBN   978-1935182757.
  32. Wampler, Dean (2011). Functional Programming for Java Developers . O'Reilly Media. pp.  90. ISBN   978-1449311032.
  33. Alexander, Alvin (2013). Scala Cookbook. O'Reilly Media. p. 722. ISBN   978-1449339616.
  34. Subramaniam, Venkat (2011). Programming Concurrency on the JVM: Mastering Synchronization, STM, and Actors . Pragmatic Bookshelf. pp.  280. ISBN   978-1934356760.
  35. Bernhardt, Manuel (2016). Reactive Web Applications: Covers Play, Akka and Reactive Streams. Manning Publications. p. 328. ISBN   9781633430099.
  36. Darrow, Barb (25 June 2012). "Juniper networks signs on with Scala". gigaom.com. Archived from the original on 2 June 2013. Retrieved 8 June 2013.
  37. Ross, David. "Scaling the Klout API with Scala, Akka and Play" . Retrieved 8 June 2013.
  38. Haines, Stephen (May 8, 2013). "Open source Java projects: Akka". JavaWorld . Retrieved 2020-07-15.
  39. "Java Magazin 6.13". jaxenter.de. Archived from the original on 13 August 2013. Retrieved 8 June 2013.