Akka (toolkit)
<templatestyles src="Module:Hatnote/styles.css"></templatestyles>
![]() |
|
Original author(s) | Jonas Bonér |
---|---|
Developer(s) | Lightbend |
Initial release | July 2009 |
Stable release | 2.4.2[1] / February 17, 2016[2] |
Development status | Active |
Written in | Scala |
Operating system | Cross-platform |
Platform | Java Virtual Machine |
License | Apache License 2.0 |
Website | akka |
Akka is an open-source 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.
Language bindings exist for both Java and Scala. Akka is written in Scala and, as of Scala 2.10, Akka's actor implementation is included as part of the Scala standard library.[3]
Contents
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, 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 Typesafe Platform together with the Play framework and the Scala programming language.
Distinguishing Features
The key points distinguishing applications based on Akka actors are:
- Concurrency is message-based and asynchronous: typically no mutable data are shared and no synchronization primitives are used; Akka implements the actor model.
- The way actors interact is the same whether they are on the same host or separate hosts, communicating directly or through routing facilities, running on a few threads or many threads, etc. Such details may be altered at deployment time through a configuration mechanism, allowing a program to be scaled up (to make use of more powerful servers) and out (to make use of more servers) without modification.
- Actors are arranged hierarchically with regard to program failures, which are treated as events to be handled by an actor's supervisor (regardless of which actor sent the message triggering the failure). In contrast to Erlang, Akka enforces parental supervision, which means that each actor is created and supervised by its parent actor.
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 Typesafe,[9] supported by an active community.[10] The current emphasis is on extending cluster support.
Relation to other Libraries
Other frameworks and toolkits have emerged to form an ecosystem around Akka:
- The Spray toolkit[11] is implemented using Akka and features a HTTP server as well as related facilities, such as a DSL for creating RESTful APIs
- The Play framework for developing web applications offers integration with Akka[12]
- Apache Spark is built upon Akka[13]
- The Socko Web Server library supports the implementation of REST APIs for Akka applications[14]
- The eventsourced[15] library provides Event-driven architecture (see also domain-driven design) support for Akka actors
- The Gatling stress test tool for load-testing web servers is built upon Akka[16]
- The Scalatra web framework is built upon Akka and offers integration with it[17]
- The Vaadin web app development framework can integrate with Akka[18]
- The Apache Flink platform for distributed stream and batch data processing is built upon Akka.[19]
Akka actors are considered an integral part of the Scala standard library.[20] There are more than 250 public projects registered on GitHub which use Akka.[21]
Releases
Version | Date | Comment |
---|---|---|
0.5 | Jul 13, 2009 | |
0.6 | Jan 5, 2010 | |
0.7 | Mar 22, 2010[22] | |
0.8 | Apr 1, 2010 | |
0.8.1 | Apr 6, 2010 | |
0.9 | Jun 1, 2010[23] | |
0.9.1 | Jun 7, 2010 | |
0.10 | Aug 21, 2010[24] | |
1.0 | Feb 16, 2011[25] | |
1.1 | May 12, 2011 | |
1.1.1 | May 24, 2011 | |
1.1.2 | May 25, 2011[26] | |
1.1.3 | Jun 29, 2011 | |
1.2 | Sep 19, 2011 | |
1.3 | Jan 27, 2012 | |
1.3.1 | Feb 7, 2012 | |
2.0 | Mar 6, 2012[27][28] | |
2.0.1 | Apr 13, 2012 | |
2.0.2 | Jun 4, 2012 | |
2.0.3 | Aug 15, 2012 | |
2.0.4 | Nov 14, 2012[29] | |
2.1.0 | Dec 22, 2012[30] | part of Scala 2.10.x distribution |
2.0.5 | Jan 2, 2013 | |
2.1.1 | Feb 26, 2013 | |
2.1.2 | Mar 15, 2013 | |
2.1.4 | May 13, 2013 | |
2.2.0 | July 9, 2013 | |
2.2.1 | Aug 27, 2013 | |
2.2.3 | Oct 23, 2013 | |
2.2.4 | Mar 4, 2014 | |
2.3.0 | Mar 5, 2014 | |
2.3.2 | Apr 9, 2014 | part of Scala 2.11.0 distribution |
2.3.3 | May 22, 2014[31] | |
2.3.4 | Jun 30, 2014[32] | |
2.3.5 | Aug 14, 2014[33] | |
2.3.6 | Sep 5, 2014[34] | |
2.3.7 | Nov 12, 2014[35] | |
2.3.8 | Dec 7, 2014[36] | |
2.3.9 | Jan 19, 2015[37] | |
2.3.10 | Apr 23, 2015[38] | |
2.3.11 | May 12, 2015[39] |
Publications about Akka
There are several books about Akka:
- Akka Essentials[40]
- Akka Concurrency[41]
- Akka in Action[42]
- Effective Akka[43]
- Composable Futures with Akka 2.0, Featuring Java, Scala and Akka Code Examples[44]
Akka also features in
- P. Haller's "Actors in Scala"[45]
- N. Raychaudhuri's "Scala in Action"[46]
- D. Wampler's "Functional Programming for Java Developers"[47]
- A. Alexander's "Scala Cookbook"[48]
- V. Subramaniam's "Programming Concurrency on the JVM"[49]
Besides many web articles describe the commercial use of Akka[50][51] there are also overview articles about it.[52][53]
References
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
External links
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.