봄 부트 (14 세) : 반응 프로그래밍 및 봄 부팅 Webflux 빠른 시작

1. 반응 프로그래밍 무엇입니까

컴퓨터에서 프로그램 또는 무효 프로그래밍 (영어 : 반응성 프로그램)에 응답 스트림 지향 프로그래밍 패러다임과 전파의 변화이다. 이 표현은 데이터 스트림에서 쉽게 정적 또는 동적 프로그래밍 언어 일 수 있음을 의미하고, 관련된 계산 모델은 자동적으로 데이터 스트림을 확산의 값을 변경한다.

예를 들어, 필수적인 프로그래밍 환경에서, A = B + C는 식의 결과가 할당되어 도시하고, 다음에 영향을 미치지 않는다 (B) 또는 (C)의 값을 변화. 그러나, 프로그램에 응답하여, 값이 갱신 B 또는 C로 갱신한다.

반응성 프로그램이 비 블로킹 비동기 및 이벤트 구동 프로그램을 기반으로, 단지 클러스터 확장을 통해 수평으로 프로그램 내에서 스레드 확장을 시작하는 대신에 소량이 필요합니다.

지속성 계층을 통해 기본 데이터베이스에서 구동되는 장면을 상상하는 것은, 서비스 계층의 MVC 계층 모델, 요소 프런트 엔드 인터페이스 사용자 파이프 라인을 건설하는 모든 사용하여 선언적 프로그래밍 패러다임 있도록 변화를 전송할 수있다 우리 단지 최신 폴링 데이터를 얻기 위해 프런트 엔드에 대한 필요성을 제거, 사용자 인터페이스에 발생합니다 해당 변경, 데이터베이스의 데이터에 대한 업데이트합니다.

간단히 말해, 우리는 프로그램이 스레드를 통해 요청 작업이 차단 될 때 차단 쓰기 작업이 밖으로 돌아 완료 될 때까지 기다려야하는 데 사용됩니다. 반응성 프로그래밍 작업이 올 요청 인 경우, 처리를 수행하는 다른 스레드가있을 때 다시 종료 후 비동기 작업 실행의 알림.

2. 왜 반응 프로그램을 사용하여

인터넷의 오늘날의 시대의 맥락에서, 웹 애플리케이션은 종종 높은 동시성을 직시해야, 대용량 데이터 문제의 핵심 요소는 성능을 항상 생각해야합니다.

성능을 차단하면 범인 중 하나입니다.

대부분의 사람들은 네트워크에 추가 I / O를 읽고 파일과 데이터베이스 또는 빠르게를 작성, 많은 사람들이 차단 코드를 작성되었음을 적어도 차단이 큰 문제라고 생각하지 않습니다.

그런 다음 I / O 작업 방법을 구체적 느린?

시간의 눈에 2.1 CPU

다음 콘텐츠 소스 https://blog.csdn.net/get_set/article/details/79466402

그들이 작동하기 때문에 확실히 "번개 남자"라고 CPU는 클럭의 그것의 자신의 세트가있다. 우리의 이야기의 영웅은 또한 세계의 "초"개념을 가지고 있으며, 경우, 그 시계가 약 1 초 후, CPU (A CPU 코어)를 뛰어 CPU의 2.5GHz의 클럭되는 것은 시간의 개념의 눈에서 유효 같은?

씨 CPU 그룹은 하드웨어 유닛 컴퓨팅 그룹입니다. 그 부분을 들어, 함께 여러 개의 작은 파트너의 긴밀한 협력뿐만 아니라 자사의 리듬 :

  • 씨 CPU는 매우 민첩, 한 두 번째 명령을 완료하기 위해 복잡한 행동은 여러 지침이 필요할 수 있습니다.
  • 다행히, "개인 비서"첫 번째 레벨 캐시는 빠르게 반응 할 수있다 초 이해 씨 CPU는 의미했다.
  • 차 지점 씨 CPU를 "GET"하기 위해 십초 비록 "그룹 비서"에서 캐시,하지만 너무 느린 없습니다.
  • 그리고 메모리 그룹 협력 (메모리 처리를) 찾을 데이터 메모리 요청 일반적으로 4~5분과에 익숙해뿐만 아니라, 결국, 데이터를 얻을 수있는 캐시는 나머지의 80 %를 그렇게 나쁘지 싶어하지 보조 캐시는 대부분 적은 지연 일을 얻을 수 있습니다.

씨 CPU는 모든 불만없이 밤을 통해, 전형적인 워커 홀릭, 작업 및 더 많은,하지만 그것을 만들 수있는 등, 그 자신의 운명 무언가가있다. 그냥 효율적으로 일을 다른 그룹 (디스크와 네트워크 카드의 특히 I / O 그룹) 아 터무니 상대적으로 낮은 :

  • 몇 주 동안 데이터 전송이 경과 할 때까지 동료의 I / O 그룹에 대한, (주소) 찾을 수 4 ~ 5 일 소요,한다 씨 CPU는 오랫동안 불평하고 있으며, 모든 시간은 SSD에 뭔가를 찾을 수 있습니다. 기계 디스크는 그가 원하는 데이터도 찾을 수 10 개월 평균을 보내고, 지나치게 터무니, 당신도 20개월에 데이터 1M를 읽으려면! 직원 해고하는 방법이 아닌가요? !
  • 모든 기가비트 네트워크는 높은 비용 후 NIC 정보, 씨 CPU, 그들은 시도 알고있다. 서로 기가비트 네트워크 이야기와 엔진 룸 및 기타 소형 파트너는 가장 빠른 칠십팔시간을 통해 전송 될 수 있으며, 문자 1K 다른 컴퓨터의 CPU 친구로, 부드러운 전송으로 간주 될 수있다. 1K 문자 층에 싸여 후 그러나, 실제로 많은 단어를 쓸 수 없습니다. 더 나쁜, 각 네트워크 통신 "전 카드의 통신 복잡한 절차 안녕하세요 당신이들을 수있는 날? - 당신이 거기에 저를들을 수들을 수있다? - 내가들을 수 있습니다 당신은 것을 여기에서 우리는 경우 일 수있다,이 핸드 쉐이크 확인이 매우 긴 시간을 할애해야한다! "이동하지만, 얼굴을 통신 할 수 없습니다. 이 다행히 대부분의 무서운는 다른 도시와 통신 할 수 주니어 파트너 경우에 따라서는 메시지를 배달하는 데 몇 년이 걸린다!

따라서, 씨 CPU를 들어, 자신을 풍부하게 할 일을 만들고 싶어하는 것은 쉽지 않지만 파트너의 작은 그룹에 대한 감사 및 I / O 그룹에서 일괄 캐시 메모리의 데이터를 돕기 위해, 모순을 완화하기 시작했다.

이 그림은 시간 표시 줄에 관한 것이다 명백한 I / O, 우리가지도를 볼 로그 스케일로의 전환 :

이 도면은 횡축에 스케일 각 해당 I / O, CPU 속도 및 메모리를 보여주는 배 정도이며 비해 수십배의 차이에 의해, 비 직관적 아니다. 따라서, 대형, 높은 동시성 시나리오에서 웹 응용 프로그램의 중요한 캐시, 높은 캐시 적중률은 성능을 의미하는 방법.

  1. 병렬화 : 더 많은 스레드 및 하드웨어 자원을 사용하여;
  2. 하면 동기식 : 기존 자원을 기반으로 효율성을 개선합니다.

3. 기본 개념

여러 개념의 인기 주제를 도입하기 전에 :

3.1 배압 (배압)

게시자가 게시자 릴리스 요소 너무 빨리, 가입자을 억제하지 않도록하는 데 사용 무제한 버퍼 저장 요소를 가지도록 돌아 가기 압력은 일반적인 전략이다.

3.2 대하여 반응성 스트림 (흐름 응답)

일반적으로 구성되어 있습니다 :

  • 발행인 : 가입자 요소
  • 구독자 : 소비자 요소
  • 구독 : 제작사에서 가입이 생성, 가입자와 공유 할 것입니다
  • 프로세서 : 출판사와 가입자 사이의 데이터 처리

3.3 Mono 일본 Flux

  • 모노 : 게시자을 달성하고, 0 또는 1 요소를 반환합니다
  • 플럭스 발행자를 달성하고, N 원소를 반환

4. 봄 Webflux

봄 부팅 Webflux 기반 원자로 달성된다. 봄 부팅 2.0은 스프링 webflux 새 모듈을 포함한다. 이 모듈은 REST, HTML 등 웹 소켓 대화 형 프로그램에 대한 지원 및 웹 소켓 HTTP 응답 클라이언트 및 지원을 포함한다. 일반적으로, 동기화를위한 스프링 MVC, 비동기 처리를위한 봄 Webflux.

봄 부팅 Webflux 유사한 방식 스프링 MVC 주석을 달성하기 위해 두 개의 프로그래밍 모델이 있으며, 다른 하나는 기능적 엔드 포인트의 방법을 사용하는 것입니다.

4.1 적용

지도는 매우 분명하다, WebFlux 및 MVC는 교차. 하지만 조심해야 해 :

  • MVC는 WebFlux을 변경할 필요가 없습니다 장면을 충족합니다.
  • 컨테이너를 지원하기 위해주의를 기울이 다음과 같은 지원 인라인 컨테이너를 볼 수 있습니다.
  • 마이크로 서비스 아키텍처는 WebFlux 및 MVC 혼합 될 수있다. 특히, IO 집약적 인 서비스의 개발은 선택이 달성 WebFlux.

4.2 임베디드 용기

의 Netty에 의해 같은 응용 프로그램을 실행할 수의 스프링 프레임 워크,하지만 WebFlux 기본으로 부팅 시작하고 자동으로 기본 포트 8080을 설정합니다. 또한 부두, 물러 및 다른 컨테이너에 대한 지원을 제공합니다. 해당 구성 요소를 추가 셀프 개발자 컨테이너 스타터 구성하고 해당 임베디드 컨테이너 인스턴스를 사용하려면 따라 달라집니다.

등의 Netty 및 물러이나 비 서블릿 컨테이너; 참고하지만, 3.1 이상 톰캣, 방파제 등 서블릿 컨테이너이어야한다.

4.3 데이터베이스

반응 프로그래밍 전용 데이터베이스 MongoDB를, 레디 스, 카산드라, 카우치베이스 주식회사을 지원합니다.

4.4 빠른 시작

엔지니어링 의존

리스팅 : 봄 - 부팅 - webflux / pom.xml 파일
***

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

서비스 클래스

리스팅 : springbootwebflux / SRC / 메인 / 자바 / COM / springboot / springbootwebflux / 서비스 / IMPL / UserServiceImpl.java
***

@Service
public class UserServiceImpl implements UserSerivice {

    private static Map<Long, User> map = new HashMap<>();

    static {
        map.put(1L, new User(1L, "www.geekdigging.com", 18));
        map.put(2L, new User(2L, "极客挖掘机", 28));
    }

    @Override
    public Mono<User> getUserById(Long id) {

        return Mono.just(map.get(id));
    }
}

Controller 클래스

리스팅 : springbootwebflux / SRC / 메인 / 자바 / COM / springboot / springbootwebflux / 컨트롤러 / UserController.java
***

@RestController
public class UserController {

    @Autowired
    UserSerivice userSerivice;

    @GetMapping("/getUserById/{id}")
    public Mono<User> getUserById(@PathVariable Long id) {
        return userSerivice.getUserById(id);
    }
}

위의 예를 통해 찾을 수 있습니다, 스프링 MVC 전에 개발 모드와 차동 모드는 큰 아니라, 반환 값의 방법에서 차이가있다.

5. 샘플 코드

코드 -Github 샘플

코드 -Gitee 샘플

6. 참고 문헌

https://blog.csdn.net/get_set/article/details/79466402

http://www.ityouknow.com/springboot/2019/02/12/spring-boot-webflux.html

https://www.cnblogs.com/limuma/p/9315442.html

추천

출처www.cnblogs.com/babycomeon/p/11683324.html