'Akka'에 해당되는 글 3건
03. Akka Introduction - Getting Started :: 2015/11/10 21:24
Getting Started
1) Prerequisites
Akka는 컴퓨터에 Java 8 이상 버전이 설치되어 있어야 한다.
Typesafe(www.typesafe.com)는 Akka의 상용버전을 제공한다. 그리고 Java 8로 업데이트 할 수 없는 프로젝트를 위해서 Java 6을 이용할 수 있도록 Reactive Platform의 일부로써 Scala와 Play와 같은 관련된 프로젝트를 지원한다. 또한 상용 버전에서는 다양한 기능들과 라이브러리들을 제공한다.
2) Getting Started Guides and Template Projects
Akka를 배울 수 있는 가장 좋은 방법은 Typesafe Activator(www.typesafe.com/platform/getstarted)를 다운로드 받아서 Akka Template Project 중에 하나를 테스트해 보는 것이다.
3) Download
Akka를 다운로드 받을 수 있는 방법은 여러 가지가 있다. Typesafe Platform의 일부분으로 Akka를 다운로드 받을 수 있다. (위에서 언급된 방법이다.) 모든 모듈이 포함되어 있는 전체 배포 버전을 다운로드 받을 수도 있다. Maven이나 SBT(Simple Build Tool)와 같은 빌드 툴을 사용하여 Akka Maven Repository로부터 의존성 있는 모듈들을 다운로드 받을 수도 있다.
4) Modules
Akka는 굉장히 모듈화가 잘 되어 있다. 서로 다른 기능들을 포함하고 있는 여러 개의 JAR로 구성되어 있다.
- Akka-actor : Classic Actors, Typed Actors, IO Actor etc.
- Akka-agent : Agents, Scala STM
- Akka-camel : Apache Camel integration
- Akka-cluster : Cluster membership management, elastic routers
- Akka-osgi : OSGi container에서 Akka를 사용하는 utilities
- Akka-osgi-aries : Aries blueprint for provisioning actor systems
- Akka-remote : Remote Actors
- Akka-slf4j : SLF4J Logger (event bus listener)
- Akka-testkit : Toolkit for testing Actor systems
게다가 이렇게 stable module들이 여러 개가 있기 때문에, 각자의 방식으로는 stable core이지만 여전히 "experimental"로 마킹되어 있다. 그것은 의도한대로 기능을 수행하지만, API가 code freezing할만큼 충분히 굳건하지 않다는 것을 의미한다. Mailing list에 이러한 모듈들에 대한 피드백을 제공함으로 도움을 줄 수 있다.
- Akka-contrib : core module로 옮겨질 수도 있는 공헌에 대한 모음. 더 자세한 내용은 External Contributions(9장)을 참고하라.
실제 JAR 파일 명은 예를 들면 다음과 같다.
akka-actor_2.11-2.4.0.jar (다른 모듈들도 유사하다.)
5) Using a release distribution
http://akka.io/downloads 에서 필요한 버전을 다운로드 받고, 압축해제 하면 된다.
6) Using a snapshot version
Akka의 밤마다 하는 snapshot은 http://repo.akka.io/snapshots/ 에 있고, SNAPSHOT과 timestamp로 버전이 매겨져 있다. Timestamp 버전을 선택하여 작업을 하고, 언제 새로운 버전으로 업데이트하는지를 결정할 수 있다.
Warning : 매일 밤마다 배포되거나 milestone release(전환점이 되는 배포)의 Akka SNAPSHOT을 사용하는 것은 무엇을 하고 있는지를 알지 못하면 나중에 어려움에 처할 수 있다.
7) Using a build tool
Akka는 Maven repositories를 지원하는 build tool들을 사용할 수 있다.
8) Maven Repositories
Akka version 2.1-M2 이후 버전 : https://repo1.maven.org/maven2/
이전 Akka version : http://repo.akka.io/releases/
9) Using Akka with Maven
Maven을 이용하여 Akka를 가장 간단하게 시작하는 방법은 Akka Main in Java라고 이름 붙여진 Typesafe Activator Tutorial을 check out하는 것이다.
(http://www.typesafe.com/activator/template/akka-sample-main-java)
Akka는 Maven Central에 배포되어 있기 때문에 (2.1-M2 이후 버전) POM에 Akka dependencies를 추가하는 것으로 충분하다. 예를 들어 akka-actor에 대한 의존성은 다음과 같다.
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.11</artifactId>
<version>2.4.0</version>
</dependency>
Snapshot 버전에 대해서는 다음과 같은 repository 추가가 필요하다.
<repositories>
<repository>
<id>akka-snapshots</id>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>http://repo.akka.io/snapshots/</url>
</repository>
</repositories>
Note : Snapshot 버전에는 SNAPSHOT과 timestamp 버전이 포함되어 배포되어 있다.
10) Using Akka with SBT
SBT를 사용하여 Akka를 시작하는 가장 간단한 방법은 Akka/SBT Template 프로젝트를 check out하는 것이다.
SBT에서 Akka를 사용하는 기본적인 부분을 요약하면 다음과 같다.
https://github.com/harrah/xsbt/wiki/Setup 의 지시대로 SBT를 설치한다.
build.sbt file을 다음과 같이 수정한다.
name := "My Project"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.4.0"
Note : 위에 언급된 libraryDependencies는 SBT v0.12.x 이후에 특화된 부분이다. 이전 SBT 버전을 사용한다면 libraryDependencies는 다음과 같다.
libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.4.0"
Snapshot 버전을 위해서는 다음 항목이 추가되어야 한다.
resolvers += "Akka Snapshot Repository" at "http://repo.akka.io/snapshots/"
11) Using Akka with Gradle
최소한 Gradle 1.4 이상 버전이 필요하다. Scala Plugin을 사용하려면 다음과 같이 설정한다.
apply plugin: ’scala’
repositories {
mavenCentral()
}
dependencies {
compile ’org.scala-lang:scala-library:2.11.7’
}
tasks.withType(ScalaCompile) {
scalaCompileOptions.useAnt = false
}
dependencies {
compile group: ’com.typesafe.akka’, name: ’akka-actor_2.11’, version: ’2.4.0’
compile group: ’org.scala-lang’, name: ’scala-library’, version: ’2.11.7’
}
Snapshot 버전을 위해서는 다음 Repository를 추가한다.
repositories {
mavenCentral()
maven {
url "http://repo.akka.io/snapshots/"
}
}
12) Using Akka with Eclipse
SBT 프로젝트를 만들고 Eclipse 프로젝트 생성을 위해서 sbteclipse(https://github.com/typesafehub/sbteclipse)를 사용한다.
13) Using Akka with IntelliJ IDEA
SBT 프로젝트를 만들고 IntelliJ IDEA 프로젝트 생성을 위해서 sbt-idea(https://github.com/mpeltonen/sbt-idea)를 사용한다.
14) Using Akka with NetBeans
SBT 프로젝트를 만들고 NetBeans 프로젝트 생성을 위해서 nbsbt(https://github.com/dcaoyuan/nbsbt)를 사용한다.
IDE에서 일반적인 scala 지원을 위해서 nbscala(https://github.com/dcaoyuan/nbscala)를 사용할 수도 있다.
15) -optimize Scala compiler flag를 사용하지 말라
Warning : Akka는 -optimize Scala compiler flag로 컴파일하거나 테스트하면 안 된다. 이상 동작하는 경우가 있음이 리포트 되었다.
16) Build from sources
Akka는 Git을 사용하여 Github에 호스팅되어 있다.
다음 repository에서 clone할 수 있다. https://github.com/akka/akka
Building Akka(10장)에서 계속해서 관련 내용이 정리되어 있다.
17) Need Help?
질문이 있다면, Akka Mailing List에서 도움을 얻을 수 있다. https://groups.google.com/forum/#!forum/akka-user
상용 버전 지원에 대해서도 질문할 수 있다. https://www.typesafe.com/
Akka community에 참여하는 것에 대해서 감사를 드린다.
02. Akka Introduction - Why Akka? :: 2015/11/10 20:16
- Why Akka?
1) What features can the Akka platform offer, over the competition?
Akka는 확장할 수 있는 실시간 transaction processing을 제공한다.
Akka는 다음 사항에 대한 통일된 runtime과 프로그래밍 모델을 제공한다.
- Scale up (Concurrency)
- Scale out (Remoting)
- Fault tolerance : 장애 방지
높은 응집력과 일관성 있는 의미의 관리를 위해 한가지 알아야 할 점이 있다.
Akka는 성능 측면 뿐만 아니라 application의 크기에도 유용한 굉장히 확장성 있는 소프트웨어의 한 조각이다. Akka의 core인 akka-actor는 아주 작아서 귀찮음을 피해서 비동기 처리와 lock이 없는 동시처리가 필요한 이미 존재하는 프로젝트에 쉽게 추가할 수 있다.
때로는 필요에 따라 application에 akka의 일부분만 추가할 수도 있다. CPU가 증가할수록 더 많은 core를 처리할 수 있다. Akka는 하나의 machine에서 구동하더라도 탁월한 성능을 제공하기 위한 대안이 될 수 있다. Akka는 또한 사용자가 작업을 위한 올바른 툴을 선택하도록 다수의 동시처리 패러다임을 제공한다.
2) What's a good use-case for Akka?
Akka는 다양한 산업 분야의 많은 거대한 조직에서 채택되었다.
- 상업투자은행
- Retail : 소매
- Social Media
- Simulation
- 게임 및 도박
- 자동차 및 교통 시스템
- Health Care
- Data Analytics
기타 등등. High-Throughput (대용량 처리)와 low latency가 필요한 어떤 시스템이라도 Akka를 사용하는 것이 좋은 후보가 될 수 있다.
Actor는 서비스의 실패(Supervisor : 관리자), load management (부하 관리 : back-off strategies, timeouts, and processing-isolation)을 관리하게 한다. 또한 수평적, 수직적 확장성을 모두 보장한다. (core를 추가하거나 machine을 추가한다.)
Akka를 어떻게 사용하여 무엇을 했는지에 대해서는 다음에 정리되어 있다.
http://stackoverflow.com/questions/4493001/good-use-case-for-akka
이 모든 것은 Apache Version 2 라이선스를 가지는 오픈 소스 프로젝트이다.
01. Akka Introduction - What is Akka? :: 2015/11/10 18:20
- What is Akka?
Scalable real-time transaction processing
우리는 정확한 시간에 동시에 접속하여 쓰는 경우나 장애 방지, 확장 가능한 application을 작성하는 것은 정말로 어렵다고 생각한다. 하지만, 그런 경우는 주로 잘못된 tool을 사용하고, 잘못된 추상화를 했기 때문이다. Akka는 그것을 변화시키기 위해서 탄생했다. Actor Model을 사용하여 추상화 level 수준을 올리고, 확장성 있고 탄력적이고 즉각적으로 반응하는 application을 작성할 수 있는 더 나은 플랫폼을 제공한다. 더 자세한 내용에 대해서는 Reactive Manifesto(reactivemanifesto.org)를 참고하라. 장애 방지를 위해서 Telecom industry에서 self-heal application(비정상 동작 시, 사람의 개입 없이 자동으로 정상 동작 하도록 복구되는 어플리케이션)과 결코 죽지 않는 시스템을 만들기 위해 매우 성공적으로 사용한 "let it crash" model을 수용했다. Actor는 또한 명백한 분산을 위한 추상화, 정말로 확장성 있고 장애를 방지할 수 있는 Application을 위한 기반을 제공한다.
Akka는 오픈소스이고, Apache 2 라이선스 하에서 이용할 수 있다.
http://akka.io/downloads 에서 다운로드 받을 수 있다.
모든 샘플 코드는 컴파일 되어 있다. 따라서, 직접 소스 코드를 보기 위해서는 github에 있는 Akka Docs subproject를 살펴보라.
Java : https://github.com/akka/akka/tree/v2.4.0/akka-docs/rst/java/code/docs
Scala : https://github.com/akka/akka/tree/v2.4.0/akka-docs/rst/scala/code/docs
1) Akka implements a unique hybrid
Actors
Actor는 다음과 같은 특징이 있다.
- 동시 실행, 병렬 실행을 위한 간단한 high-level 추상화 제공
- 비동기(Asynchronous), non-blocking, 고성능의 event-driven programming model 제공
- 매우 가벼운 event-driven process (1GB Heap 메모리 당 7백만 actor 수행)
3장에서 더 자세히 설명되어 있다.
Fault Tolerance
- "let it crash" 의미를 갖는 관리 계층 제공
- 관리 계층은 진정한 장애 방지 시스템을 제공하기 위해서 multiple JVM으로 확장할 수 있음
- Self-heal과 결코 멈추지 않는 굉장한 장애 방지 시스템 작성에 탁월함
3장에서 더 자세히 설명되어 있다.
Location Transparency
Akka에서 모든 것은 분산 환경에서 처리되도록 설계되어 있다. Actor간 모든 상호 작용은 순전히 message전송을 사용하고, 모든 것은 비동기로 처리된다.
Cluster 지원에 대한 overview는 6장에서 더 자세히 설명하고 있다.
Persistence
Actor를 통해 수신된 메시지들은 선택적으로 저장되어 actor가 시작/재시작 될 때 재사용할 수 있다. JVM Crash가 일어나거나, 또 다른 노드로 마이그레이션 될 때, 이것을 통해 actor는 상태를 복구할 수 있다.
더 자세한 내용은 3장에서 설명하고 있다.
2) Scala and Java APIs
Akka는 scala-api와 Java Document를 모두 제공한다.
3) Akka can be used in two different ways
Akka는 다른 방식으로 사용되고, 배포될 수 있다.
- 라이브러리 : Web App에서 classpath 상의 일반적인 JAR 형태로 사용. WEB-INF/lib에 넣는다.
- sbt-native-packager로 패키징하여 사용
- Typesafe ConductR을 사용하여 패키징 및 배포
4) Commercial Support
Akka는 Typesafe Inc 를 통해서 개발 및 제품 기술지원을 포함한 상용 라이선스를 이용할 수 있다.