스칼라 또는 클로저 기능 프로그래밍 모범 사례


11

나는 많은 자기 연구 코딩을했고, 병렬 프로그래밍 모델에 대한 경험을 얻었습니다 : 액터, 소프트웨어 트랜잭션 메모리, 데이터 흐름.

이러한 아키텍처를 실제 (고부하 웹 애플리케이션)에 적용하려고 할 때 모든 모델은 데이터의 내구성과 지속성을 지원하지 않습니다. 실제 작업은 데이터를 마지막에 저장해야합니다. 이것은 여전히 ​​DB와 트래핑 DB 동기화, 가능한 확장 성 병목 등을 사용해야한다는 것을 의미합니다.

Akka Actors 또는 Software Transaction Memory를 사용하고 마지막에 지속성을 구현 하는 아키텍처 (src 또는 text 또는 diagram 또는 blueprints)의 좋은 예를 아는 사람이 있습니까?

실제 응용 프로그램의 트랜잭션 메모리, 액터, 데이터 흐름, 튜플 공간에 대한 좋은 예 / 아이디어를 환영합니다.


akka와 stm이 모두 필요합니까?
om-nom-nom이

지속성이 "마지막"인 것으로 간주되는 것은 드문 것 같습니다. "트래핑 DB 동기화, 가능한 확장 성 병목 등"이라고 생각합니다. 그것들은 끝이 아니라 중간에 있기 때문에 정확하게 문제입니다.
Dan Burton

지속성이 끝보다 더 자주 발생한다는 데 동의하십시오

@Stas (1) Scala and Clojure, (2) 모범 사례와 어떻게 관련이 있습니까? 내가 읽은 것은 (1) 언어에 구애받지 않고 (2) 동시성 (특히 내구성 / 지속성) 과만 관련이 있습니다.
사키 스크

답변:


5

액터 / STM 모델과 데이터베이스 지속성은 다소 직교합니다. 서로없이 쉽게 가질 수 있으며 두 가지를 혼동 할 위험이 있다고 생각합니다.

내구성 달성 (ACID의 D)은 트랜잭션 설정, 특히 메시지 전달을 통해 액터 / 프로세스가 조정되는 분산 설정에서 매우 복잡합니다. 비잔틴 장군 문제 와 같은 쟁점에 빠지게됩니다 .

결과적으로 특정 지속성 요구 사항을 충족시키기 위해 솔루션을 어느 정도 조정할 수 있다고 생각합니다. "하나의 크기에 모두 맞는"솔루션은 없습니다.

(Clojure 관점)을 볼 가치가 있습니다.


5

액터 모델은 CQRS (Command / Query Responsibility Segregation) 와 함께 작동 합니다. 데이터 조작을 수행하는 액터에 대한 메시지는 "Command"와 동등한 것으로 사용할 수 있습니다.

그렇다면 지속성 문제와 어떤 관련이 있습니까? 글쎄, 당신은 메모리에서 작업하고 모든 명령을 로그에 씁니다. 이는 추가 전용이기 때문에 더 저렴한 작업이며 때때로 스냅 샷을 덤프하여 필요한 경우 데이터베이스를 다시로드하는 데 필요한 시간을 줄입니다. 로그에 사용 된 공간을 복구하십시오).

이것은 매우 일반적인 기술입니다. 더 많은 영감을 얻으려면 VoltDB와 Redis를보십시오.


4

Rich Hickey는 Datomic이라는 새로운 아이디어를 가지고 있습니다. 지속성, 스토리지 분리, 트랜잭션 관리 및 쿼리에 대한 새로운 접근 방식입니다. 불변 레코드를 기반으로하며 Datalog라는 쿼리 언어를 사용합니다 (Prolog와 기능 공유). 핵심 목표는 쉬운 배포 및 클라우드 배포를 가능하게하는 것이 었습니다. 스토리지는 서비스로서의 서비스에 의존합니다 (구체적인 구현은 아니지만 무선 API를 통해 느슨하게 연결됨).

Clojure에는 DTM이없는 ACI를 제공하는 STM이 있습니다. Datomic은 D를 추가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.