Akka (2)
Akka 라이브러리와 모듈** Actors ( Library, the Core)** Akka의 Actor 를 사용함으로써, 분산시스템또는 동시성처리에 대한 개인적인 문제로부터 일관성 있고 통합된 모델을 제공해 relieves 해줍니다.
Actor는 프로그래밍 패러다임인 극한의 OOP의 한 기둥중 하나인 캡슐화에서 가져왔습니다. 객체와는 다르게 Actor는상태뿐만 아니라 실행도 캡슐화 합니다. Actor와의 통신은 메서드 호출을 통해서가 아니라 메시지 전달을 통해 이루어집니다. 이 차이는 사소한 것처럼 보일수 있지만 실제로는 동시성과 원격 통신과 관련하여 OOP의 한계에서 벗어날 수 있습니다.
Actor로 풀어야할 도전과제는 다음과 같습니다.**
- 고성능 동시성 애플리케이션을 설계하는 방법.
- 다중쓰레드 환경에서의 에러처리 방법.
- 동시성의 함정에 내 프로젝트를 보호하는 방법
원격 (remoting)****원격은 다른 컴퓨터의 살아있는 액터와 메시지를 균형있게 교환할 수 있도록 가능하게 해줍니다. Jar 아티펙트를 배포하는동안 Remoting은 라이브러리보다 모듈 같습니다.
Remoting의 해결 과제는 다음과 같습니다.**
- 원격 호스트의 Actor시스템의 주소를 알아내는 방법
- 원격 Actor System의 각각의 액터의 주소를 얻는 방법
- 유선 메시지를 바이트로 변환하는 방법
- 호스트와 출돌한 Actor System과 호스트 사이의 저수준의 접속(또는 재접속을) 투명하게 관리하는 방법
- 같은 네트워크 상의 서로 다른 액터들의 통신을 투명하게 다중화 하는 방법.
클러스터**Remoting이 원격 시스템의 구성 요소와 주소를 지정하고 통신하는 문제를 해결하는동안 클러스터링은 멤버쉽 프로토콜로 연결된 “메타 시스템”으로 구성 할 수 있는 기능을 제공합니다. 대부분의 경우 Remoting 직접 사용하는 것 대신에 클러스터 모듈을 사용하는 것을 원할 것입니다.** 클러스터 모듈의 해결 과제는 다음과 같습니다.****- 각각 통신하고 클러스터의 한 부분으로서 각각 고려하되는 Actor 시스템들의 유지보수 방법
- 이미 존재하는 맴버(Actor System)들에게 안전하게 새로운 시스템을 소개하는 방법
- 일시적으로 도달할 수 없는 시스템을 신뢰할 수 있게 발견하는 방법
- 클러스터의 작은 부분으로 남아있는 멤버들의 동의
- 클러스터의 작은 부분이 남아 있도록 전체 멤버들이 동의하기 위해서 실패한 호스트들/시스템들 ( 또는 축소된 시스템을) 제거하는 방법.
- 현재 멤버중에서 계산을 분배하는 방법
- 클러스터의 확실한 역할을 정의하는 방법, 다른 말로는 확실한 서비스들과 그렇지 않은 것들을 제공하는 방법
클러스터 싱글 톤****분산 시스템에서 공통적으로 사용되는 (실제로는 너무 일반적 임) 유스 케이스는 클러스터의 다른 구성원간에 공유되고 호스트 시스템이 실패 할 경우 마이그레이션되는 주어진 작업을 담당하는 단일 엔티티를 갖는 것입니다.
이것은 명백하게 전체 클러스터에서 일반적인 병목현상이 나타나고, 스케일링을 제한 합니다. 이런 패턴을 사용하는 것은 피할 수 없는 시나리오가 있습니다. 클러스터 싱글톤은 선택된 액터 시스템의 호스트의 부분적인 액터 따릅니다. 다른 시스템들은 어디서든 독립적으로 서비스되고 접근하여 이야기할 수 있습니다.
클러스터 싱글톤 모듈이 해결 과제는 다음과 같습니다.**- **하나의 서비스 인스턴스가 전체 클러스터에서 실행중인지 확인하는 방법- 서비스가 올라갔을 때 축소되는 과정동안 또는 일반적으로 충돌한 호스트 시스템이 작동하는지 알아내는 방법
- 시간 경과에 따라 다른 시스템으로 마이그레이션 할 수 있는 클러스터의 다른 멤버들로 부터 이 인스턴스를 접근할 수 있는 방법.
클러스터 발행-구독** 시스템 간의 조정을 위해서 전체 또는 클러스터의 담당하는 시스템들에게 종종 메시지를 분배하는 것이 필요합니다. 이 패턴은 일반적으로 publish - subscribe 라고 하며 이 모듈은이 정확하게 해결합니다. 한가지 종류의 구독자들에게 메시지를 브로드캐스트 하는 것이 가능하고 또는 임의적인 액터에게 발행할 수 있습니다.
발행-구독은 다음과 같은 과제를 해결합니다.****- 클러스터의 관심있는 당사자들에게 메시지를 브로드 캐스팅하는 방법.
- 클러스터의 관심있는 당사자 집합에서 구성원에게 메시지를 보내는 방법.
- 클러스터의 특정 주제 이벤트 구독 및 구독 취소 방법.
영속 (Persistence)****OOP의 객체 같이 Actor들은 자신의 상태를 휘발성 메모리에 보관하고있습니다. 시스템이 다운될때 또는 충돌이 나거나 할때 모든 데이터는 메모리에서 잃어버립니다. 영속은 그들의 현재 상태를 가져오도록 액터들에게 패턴을 제공해줍니다. 시작되었을 때, 이벤트들은 객체 주인인 액터들의 상태를 복구하는 과정을 가능하게 합니다. 이벤트 흐름은 질의되거나 추가적인 파이프라인의 과정으로 공급됩니다.
영속성은 다음과 같은 문제를 해결합니다.**- 액터시스템이 재시작되거나 충돌났을때 객체/액터의 상태를 복구하는 방법
- CQRS system을 구현하는 방법
- 네트워크 오류와 시스템 충돌하는 경우 메시지가 확실하게 전달되는 방법.
- 객체의 현재 상태를 유도하는 도메인 이벤트를 조사하는 방법
- 이벤트 소싱을 내 응용프로그램에서 사용하여 프로젝트가 계속 진화하는 동안 장기 실행 프로세스를 지원하는 방법
분산 데이터****최후의 일관성은 받아들이는 것이다. 이것은 데이터를 노드 사이에 공유할 수 있다. (Akka 클러스터 및 클러스터 파티션에도 읽기 및 쓰기 모두 허용된다) 이것으로 충돌없이 복제된 데이터 형식 사용할 수 있다. 다른 노드들의 쓰기가 동시에 발생할 수 있으며 나중에 예측 가능한 방식으로 병합된다.
분산 데이터 모듈은 유용한 데이터들을 공유할 수 있는 인프라를 제공합니다.
분산 데이터는 다음과 같은 문제를 풀기 위함이다.**
- 클러스터 파티션에도 쓰기들을 허용하는 방법.
- 공유데이터에 같은 시간동안 로컬 읽기와 쓰기를 낮은 대기시간으로 허용하는 방법
Stream**Actor는 동시성 모델의 기초적인 것이다. 그러나 사용자들이 같은 패턴을 계속해서 구현하는 공통 패턴이 있다. 아주 일반적으로 액터의 체인 또는 그래프가 잠재적으로 크거나 무한한 순차적 이벤트 스트림을 처리하고 자원 사용을 적절히 조정하여 체인이나 그래프에서 느린 처리 단계가 느린 처리 단계를 압도하지 않아야하는 시나리오가 일반적입니다. 스트림은 액터들 위에 더 높은 수준의 추상화를 제공하여 이러한 처리 네트워크를 작성하고 백그라운드에서 모든 세부 사항을 처리하며 안전하고 형식화 된 구성 가능한 프로그래밍 모델을 제공합니다. Streams는 또한 Reactive Streams 표준 을 구현하여 해당 표준의 모든 타사 구현과의 통합을 가능하게합니다.
Stream은 다음과 같은 문제를 해결합니다.**- 고성능의 이벤트 나 대규모 데이터 세트를 처리하여 동시성을 활용하고 리소스 사용을 엄격하게 유지하는 방법
- 재사용 가능한 이벤트 / 데이터 처리 부분을 유연한 파이프 라인으로 어셈블하는 방법.
- 비동기 서비스를 서로 융통성있게 연결하는 방법과 성능이 좋습니다.
- 제 3 자 라이브러리와의 인터페이스를 위해 Reactive Streams 호환 인터페이스를 제공하거나 사용하는 방법. -_- GG
HTTP**API를 원격으로 제공하기 위한 사실상의 표준, 내부적으로 또는 외부적으로 HTTP 이다. Akka는 HTTP 서비스를 만들거나 소비하는 라이브러리를 제공해준다. HTTP 생성 툴을 통해서 그리고 클라이언트는 다른 서비스에서 사용할 수 있도록 사용하게 해준다. 이런 툴은 부분적으로 streaming을 맞춰준다. 그리고 많은 양의 데이터 또는 실시간 이벤트를 Akka Stream의 모델로 기초해서 도와준다.
HTTP는 이런 몇가지 문제를 해결한다.**- 성능에 맞는 HTTP API 통해 외부 세계의 클러스터와 시스템을 서비스할 수 있도록 하는 방법
- HTTP 를 이용한 시스템의 큰 데이터 셋을 stream 하는 방법.
- HTTP 를 이용한 시스템의 실시간 이벤트를 stream 하는 방법.
전체 가능한 모듈들 중 불완전한 것을 피할 수 있다. 그러나
위의 내용은 사용 가능한 모든 모듈의 불완전한 목록이지만, Akka 위에 시스템을 구축하기 시작할 때 얻을 수있는 정교함과 모듈의 풍경에 대한 좋은 개요를 제공합니다. 이 모듈들은 모두 완벽하게 통합됩니다. 예를 들어, 웹 사이트의 온라인 사용자가 액세스하는 많은 상태 저장 비즈니스 객체 (문서, 장바구니 등)를 가져옵니다. Sharding and Persistence를 사용하여 Sharded Entity로 모델링하여 주문형 확장 (예 : 휴일 전 광고 캠페인 도중) 할 수있는 클러스터에서 균형을 유지하고 일부 시스템이 고장 났을 때에도 유지할 수 있도록하십시오. Persistence Query를 사용하여 비즈니스 객체의 도메인 이벤트의 실시간 스트림을 가져 와서 Streams를 사용하여 스트리밍 BigData 엔진으로 파이프하십시오.
막판에 -_-; 너의 영어문장에 초보는 죽어난다.
**http://doc.akka.io/docs/akka/current/java/guide/modules.html