Original text
[1] reactive-streams.org (http://www.reactive-streams.org/)
[2] reactive stream wiki (https://en.wikipedia.org/wiki/Reactive_Streams)
이 글은 위 원본 글을 번역한 글입니다. 오역이 있을 수 있습니다.
리액티브 스트림(Reactive Streams)
리 액티브 스트림은 논블로킹(non blocking) 역압(back pressure)으로 비동기 스트림 처리 표준을 제공하기위한 계획입니다. 여기에는 런타임 환경 (JVM 및 JavaScript)과 네트워크 프로토콜을 위한 노력이 포함됩니다.
문제
데이터의 스트림, 특히 볼륨이 미리 결정되지 않은 "라이브"데이터를 처리하려면 비동기 시스템에서 특별한주의가 필요합니다. 가장 중요한 문제는 빠른 데이터 소스가 스트림 대상을 압도하지 않도록 리소스 소비를 제어해야한다는 것입니다. 비동기성은 컴퓨팅 리소스를 병렬로 사용하거나 네트워크 호스트를 공동 작업하거나 단일 시스템 내의 여러 CPU 코어를 사용할 수 있도록하기 위해 필요합니다.
리액티브 스트림의 주요 목표는 수신 측에서 임의의 양의 데이터를 강제로 버퍼링하지 않도록하면서 비동기 경계를 통과하는 스트림 데이터를 다른 스레드 또는 스레드 풀로 전달하는 것을 제어하는 것입니다. 다시 말해서, 배압은 스레드 사이를 중재하는 큐를 제한 할 수 있도록하기 위해이 모델의 필수적인 부분입니다. 비동기 처리의 이점은 역 압력 통신이 동기 적이면 무효화됩니다 (Reactive Manifesto 참조). 따라서 Reactive Streams 구현의 모든 측면에 대해 비 차단 및 비동기 동작을 수행하도록주의를 기울여야합니다.
규칙을 준수함으로써 스트림 응용 프로그램의 전체 처리 그래프에서 앞서 언급 한 이점 및 특성을 유지하면서 원활하게 상호 운용 할 수있는 많은 구현을 만들 수 있는 것이 사양의 의도입니다.
범위
리액티브 스트림의 범위는 목표를 달성하기 위해 필요한 작업과 엔티티를 설명하는 인터페이스, 메소드 및 프로토콜의 최소 집합을 찾는 것입니다. 논블로킹 백압으로 데이터의 비동기 스트림을 달성합니다.
최종 사용자 DSL 또는 프로토콜 바인딩 API는 잠재적으로 다른 프로그래밍 언어를 사용하여 플랫폼의 관용구에 가능한 한 사실을 유지할 수있는 여러 가지 구현을 장려하고 활성화 할 수 있도록 의도적으로 그 범위를 벗어났습니다.
이 Reactive Streams 사양 및 구현 경험을 수용하면 향후 JDK 릴리스에서의 Java 플랫폼 지원 또는 향후 웹 브라우저에서의 네트워크 프로토콜 지원을 비롯하여 광범위한 통합이 이루어질 것으로 예상됩니다.
워킹 그룹
기본 의미론
기본 의미론은 역류를 통해 흐름 요소의 전달이 조절되는 방법을 정의합니다. 요소가 전송되는 방법, 전송 중 표시 또는 역 압력이 신호되는 방식은이 사양의 일부가 아닙니다.
JVM 인터페이스(완료)
이 워킹 그룹은 공유 메모리 힙을 사용하여 JVM 내의 객체와 스레드간에 스트림을 전달하기 위해 서로 다른 구현 및 언어 바인딩의 상호 운용을 허용하는 것을 주된 목적으로하는 프로그래밍 인터페이스 세트에 기본 의미를 적용합니다.
2015 년 4 월 30 일부터 자바 API, 텍스트 사양, TCK 및 구현 예를 비롯하여 JVM 용 리 액티브 스트림 1.0.0 버전을 출시했습니다. Maven Central에서 해당 코드 아티팩트를 사용할 수 있습니다.
<dependency>
<groupId>org.reactivestreams</groupId>
<artifactId>reactive-streams</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.reactivestreams</groupId>
<artifactId>reactive-streams-tck</artifactId>
<version>1.0.0</version>
</dependency>
이 소스 코드는 github에서 사용할 수 있습니다. 피드백을 제공하기 위해 github 문제를 사용하십시오.
모든 아티팩트 및 사양은 Creative Commons Zero에서 공개 도메인으로 공개됩니다.
JVM 용 Reactive Streams 1.0.0에 대한 자세한 내용은 여기를 참조하십시오.
구현 자에 대한 참고 사항
최종 사양을 구현하려면 README 및 Java API 설명서를 읽은 다음 사양을 살펴보고 TCK 및 예제 구현을 살펴 보는 것이 좋습니다. 위의 문제가있는 경우 닫힌 문제를 살펴본 다음 아직 해결되지 않은 경우 새로운 문제를여십시오.
이 작업은 reactive-streams-jvm 저장소에서 수행되었습니다.
JavaScript 인터페이스
이 작업 그룹은 JavaScript 런타임 환경에서 요소 스트림을 관 {하기위한 최소한의 오브젝트 특성 세트를 정의합니다. 목표는 여러 구현이 동일한 런타임 환경 내에서 상호 운용되도록하는 테스트 가능한 스펙을 제공하는 것입니다.
이 작업은 reactive-streams-js 저장소에서 수행됩니다.
네트워크 프로토콜
이 워킹 그룹은 데이터 요소의 직렬화 및 비 직렬화와 관련된 다양한 전송 매체를 통해 반응 스트림을 전달하기위한 네트워크 프로토콜을 정의합니다. 이러한 전송의 예로는 TCP, UDP, HTTP 및 WebSockets가 있습니다.
이 작업은 reactive-streams-io 저장소에서 수행됩니다.
리액티브 스트림 위키 정의
리액티브 스트림은 논블로킹(non blocking) 역압(back pressure)으로 비동기 스트림 처리 표준을 제공하기위한 계획입니다.[1]
리액티브 스트림의 주요 목표는 수신 측에서 임의의 양의 데이터를 강제로 버퍼링하지 않도록하면서 비동기 경계에서 스트림 데이터를 다른 스레드 또는 스레드 풀로 전달하는 것과 같은 스트림 데이터 교환을 제어하는 것입니다. 다시 말해서, 배압은 스레드 사이를 중재하는 큐를 제한 할 수 있도록하기 위해이 모델의 필수적인 부분입니다.
명세의 의도는 많은 준수 구현의 생성을 허용하는 것으로, 규칙을 준수함으로써 스트림 애플리케이션의 전체 처리 그래프에서 언급 된 이점 및 특성을 유지하면서 원활하게 상호 운용 될 수 있습니다.
리액티브 스트림의 범위는 비 차단 백압으로 데이터의 비동기 스트림을 달성하는 데 필요한 작업과 엔티티를 설명하는 인터페이스, 메소드 및 프로토콜의 최소 세트입니다. 최종 사용자 DSL 또는 프로토콜 바인딩 API는 잠재적으로 다른 프로그래밍 언어를 사용하여 플랫폼의 관용구에 가능한 한 사실을 유지할 수있는 여러 가지 구현을 장려하고 활성화 할 수 있도록 의도적으로 그 범위를 벗어났습니다.
리액티브 스트림은 Netflix, Pivotal 및 Typesafe의 엔지니어들 사이에서 2013 년 말에 시작되었습니다. 가장 초기의 토론 중 일부는 Typesafe의 Play 팀과 Akka 팀간에 2013 년에 시작되었습니다. [2] [3] Typesafe는 리 액티브 스트림의 주된 기여자 중 하나입니다. [4] 다른 참여자로는 Red Hat, Oracle, Twitter 및 spray.io가 있습니다. [5] Reactive Streams의 Java 구현을 Java 9의 일부로 만드는 작업이 진행 중입니다. JSR 166의 리더 인 Doug Lea는 Reactive Streams에서 현재 제공하는 인터페이스를 포함하는 새로운 Flow 클래스 [7]를 제안했습니다. [4] ] [8]
JVM을위한 Reactive Streams의 버전 1.0.0은 2015 년 4 월 30 일 Java API, 텍스트 사양, TCK 및 구현 예제를 포함하여 발표되었습니다 [4] [5] [9]. 알파벳 순서로 나열된, 1.0.0 용 TCK에 의해 검증 된 다수의 호환 구현이 제공됩니다 : [9]
- Akka stream [12] [13]
- MongoDB [14]
- Ratpack [15]
- Reactive Rabbit — driver for RabbitMQ/AMQP
- Spring and Pivotal Project Reactor[16]
- Netflix RxJava [17]
- Slick 3.0. [18] [19]
- Vert.x 3.0 [20]
- Cassandra [21]
- Elasticsearch [22]
- Apache Kafka [23]
- Parallel Universe Quasar [24]
- Play Framework
Spring 5는 Reactive Stream과 호환되는 Reactor Core를 기반으로 제작되었다고 발표되었습니다.
Reference
[1] reactive-streams.org (http://www.reactive-streams.org/)
[2] A Journey into Reactive Streams
[3] Reactive Streams 1.0.0 interview
[4] Reactive Streams Releases First Stable Version for JVM
[5] Reactive Streams 1.0.0 – a new standard in reactive data processing
[6] jdk9 Candidate classes Flow and SubmissionPublisher
[8] JEP 266: More Concurrency Updates
[9] a b Reactive Streams 1.0.0 is here!
[11] Reactive Streams for the JVM specification
[12] InfoQ: Reactive Streams with Akka Streams
[13] Design Principles behind Akka Streams
[14] MongoDB Reactive Streams Java Driver
[15] Ratpack: The Reactive Streams API
[16] Reactor 2.0.0.RC1 with native Reactive Streams support now available!
[17] Advanced RxJava: The Reactive-Streams API (part 1)
[18] Slick 3: Reactive Streams for Asynchronous Database Access in Scala
[20] Vert.x Reactive Streams Integration
[21] Accessing Cassandra in a Reactive Way
[22] elastic4s — Non blocking, type safe DSL and Scala client for Elasticsearch
[23] Reactive Streams for Apache Kafka
[24] Quasar and Reactive Streams
[25] Play Framework — Reactive Streams integration (experimental)
[27] reactive stream wiki (https://en.wikipedia.org/wiki/Reactive_Streams)
'Devlopment > Reactive, Concurrency' 카테고리의 다른 글
ReactiveX (0) | 2017.01.17 |
---|---|
리액티브란 무엇인가? (What's in a Name : Reactive) (0) | 2017.01.10 |
리액티브 프로그래밍 대 리액티브 시스템 (Reactive Programming vs Reactive Systems) (0) | 2017.01.09 |
데이터 스트림 (0) | 2016.12.29 |
동시성 관련 분류 (0) | 2016.12.27 |
vert.x VS Akka (0) | 2016.11.22 |
리액티브 프로그래밍이란 무엇입니까? What is reactive programming? (0) | 2016.11.21 |
1. 소프트웨어 패러다임 - 성능 그리고 동시성 (0) | 2016.11.17 |
동시성(Concurrency) vs 병렬성(Parallelism) (0) | 2016.11.17 |
synchronous, asynchronous, blocking, non-blocking (0) | 2016.10.31 |