본문 바로가기

전체 글

(92)
[Spring Cloud로 구현하는 마이크로서비스] Section. 12 장애 처리와 Microservice 분산 추적 & 모니터링 Circuit Breaker - 장애가 발생하는 서비스에 반복적인 호출이 되지 못하게 차단 - 특정 서비스가 정상적으로 동작하지 않을 경우 다른 기능으로 대체 수행 연관된 서비스가 특정 한계치 이상 실패한다면 Circuit Breaker는 Open. (차단 or 대체 기능) 정상 작동한다면 Circuit Breaker는 Closed. Mircroservice 통신 시 연쇄 오류 USER서비스와 연관된 서비스가 동작하지 않을 때 대처할 방안이 있어야한다. Resilience4j에서 Circuit breaking을 포함한 다양한 기능을 사용할 수 있다. 따로 Customizer파일을 정의해서 서킷브레이커 상세 설정이나 시간 제한 설정을 상세히 정할 수 있다. 간단하게는 의존성을 추가하고 설정을 생략하고 Ci..
[Spring Cloud로 구현하는 마이크로서비스] Section. 11 데이터 동기화를 위한 Kafka 활용 Apache Kafka - 오픈소스 메시지 브로커 프로젝트 - 실시간 데이터 피드를 관리하기 위해 통일된 높은 처리량, 낮은 지연 시간을 지닌 플랫폼 제공 Kafka가 나오게 된 배경 데이터가 많아도 확장이 용이한 시스템 Kafka Broker 실행된 kafka 서버 3대 이상의 브로커 클러스터 구성 설정 코디네이터로 'Zookeeper' 연동 메타데이터 (Broker ID, Controller ID 저장) 리더 브로커 문제 발생 시 장애 대응하는 역할 누가 메시지를 생성하고 소비하는지 신경쓰지않고 메시지를 교환한다. - kafka client JAVA, Python, Go, C++ 등 많은 언어를 지원한다. Kafka 실행해보기 Zookeeper 실행 ./bin/zookeeper-server-start..
[Spring Cloud로 구현하는 마이크로서비스] Section. 10 마이크로서비스간 통신 동기 Http 통신 AMQP를 통한 비동기 통신 (Config서버에서 각 서비스로 설정정보 넘겨줄때 사용했음) RestTemplate FeignClient - Rest Call을 추상화한 Spring Cloud Netflix 라이브러리 예외 처리 Multiple Order Service - Users의 요청 분산 처리 - Orders 데이터 분산 저장 -> 동기화 문제 발생 상황에 따라 다른 데이터베이스에서 정보를 가져오는 경우가 생길 수 있다. 두 개의 서비스 인스턴스 사용 시 발생하는 문제 하나의 유저가 order서비스에 주문 요청을 넣으면 부하분산 처리에 의해 각각 다른 인스턴스의 DB에 저장된다. *해결방법* 1. 하나의 데이터베이스 사용 (동시성, 트랜잭션 문제 발생하니 해결해야함) 2. 두 데..
[Spring Cloud로 구현하는 마이크로서비스] Section. 9 암호차 처리를 위한 Encryption과 Decryption Encryption types (암호화 타입) Symmetric Encryption (암복호화 같은 키) Asymmetric Encryption (암복호화 다른 키)[private - public key] 암.복호화 구성도 암호화되어 저장된 정보를 복호화하여 마이크로서비스에서 사용하려고 한다. 암.복호화 사용해보기 config-server에 'ecrypt.key' 값을 bootstrap.yml에 설정해둔다. 서버를 재실행하여 'POST /encrypt'를 통해 암호화를 'POST /decrypt'를 통해 복호화를 진행할 수 있다. 데이터베이스 접근 정보 암복호화 적용 user마이크로서비스에 있던 datasource설정 정보를 password 암호화하여 config-server의 user-service.y..
[Spring Cloud로 구현하는 마이크로서비스] Section. 8 Spring Cloud Bus를 이용한 설정정보 변경 Spring Cloud Bus 이전에 사용했던 Actuator Refresh는 마이크로서비스가 수백개라고 하면 config정보가 바뀌면 각각의 마이크로서비스에 refresh를 모두 요청해야하는 단점이 있다. 이러한 문제점을 해결하기 위해 Spring Cloud Bus를 사용해보자. AMQP (메시지 지향 미들웨어를 위한 개방형 프로토콜) - 메시지 지향, 큐잉, 라우팅(Publisher-Subscriber), 신뢰성, 보안 - Erlang, RabbitMQ에서 사용 Kafka프로젝트 (오픈소스메시지브로커프로젝트) - 분산형 스트리밍 플랫폼 - 대용량의 데이터를 처리 RabbitMQ vs. Kafka Spring Cloud Bus 사용하기 변경된 사항을 Cloud Bus에 알리고 Cloud Bus가 Con..
[Spring Cloud로 구현하는 마이크로서비스]Section.7 Configuration Service application내부에서 구성정보를 가지고 있는 것이 아닌 외부 시스템을 통해서 구성정보를 관리하도록 함. Spring Cloud Config 분산 시스템에서 서버, 클라이언트 구성에 필요한 정보를 외부 시스템에서 관리 하나의 중앙화 된 저장소에서 구성요소 관리 기능 각 서비스를 다시 빌드하지 않고, 바로 적응 가능 애플리케이션 배포 파이프라인을 통해 DEV-UAT-PROD환경에 맞는 구성 정보 사용 형상관리, 암호화된 데이터, 파일저장소 각각에 설정 정보를 한데 모아 적용할 수 있다. 또한 모아진 설정 정보를 DEV, PROD 환경에 맞게 설정할 수도 있다. (application-dev.yml, application-prod.yml) Changed configuration values (변경된 C..
[Spring Cloud로 구현하는 마이크로서비스] Section 4: 로그인 처리와 JWT 적용 apigateway 구성 application.yml에 마이크로서비스 정보 추가 - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/login - Method=POST filters: - RemoveRequestHeader=Cookie # 쿠키 삭제 후 실행 - RewritePath=/user-service/(?.*), /$\{segment} - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/users - Method=POST filters: - RemoveRequestHeader=Cookie # 쿠키 삭제 후 실행 - RewritePath..
[Spring Cloud로 구현하는 마이크로서비스] Section 3: E-commerce 애플리케이션 구조 E-commerce 애플리케이션 구성 만들 애플리케이션 구성도 최종적인 구성도 구성요소 Git repository에 소스관리 yml파일이 아닌 Config Server에서 프로파일 정보 및 설정 관리 (동적으로 구축 가능) kafka연동

반응형