Cloud/SpringCloud로 개발하는 MSA 10

MS 들 dockerize + window local mysql data -> wsl2 docker mysql + kafka listener

docker network 에서 bridge 모드로 직접 gateway , subnet을 명시하여 하나 만들어준다. ga,subnet을 직접 명시하지 않으면 ip 를 직접 지정해서 container를 띄울떄 오류가 발생할 수 있다. 기본 모드인 bridge모드면 자체 DNS서비스를 제공함으로 container 로 만들시 --name에 부여한 값으로 ping 해보고 통신이 가능하다. RabbitMQ docker run -d --name rabbitmq --network ecommerce-network \ -p 15672:15672 -p 5672:5672 -p 15671:15671 -p 5671:5671 -p 4369:4369 \ -e RABBITMQ_DEFAULT_USER=guest \ -e RABBITM..

MS 모니터링 (wsl2 grafana)

Turbin , Hystrix는 예전에 쓰던것이다. ms에서 생성되는 Hystrix 클라이언트 스트림 메시지를 터빈 서버로 수집함 MicroMeter @GetMapping("/welcome") @Timed(value = "users.welcome",longTask = true) public String welcome() { return greeting.getMessage(); } management: endpoints: web: exposure: include: refresh, health, beans, busrefresh , info, metrics, prometheus application.yml 설정에서 actuator 가 metrics url로 해당 메소드의 정보를 받아올 수 있는 url을 "us..

장애 처리와 MS 분산 추적

user service 에서 문제가 발생한것이 아니라 다른 ms를 호출하는 과정에서 다른 ms에서 문제가 발생하는 경우가 있다. https://tonylim.tistory.com/380 MS간 통신 RestTemplate token: expiration_time: 864000000 secret: '{cipher}AQBQMwrjDGVYOUquU1Rgcxs7c+ELCWNwBYcmKD7cH++Vnd7G5+dT0TvfiR/LBMWOBAHgB58+cwPVQKI05u0jzDoHR2MJE/q3DVJuj64x8SWVf/e6qeUM/CQhy8T5Bs8erpplR7p+fd8r7U/B3rpsgQ63mAgtLrpy3c5A9PlTvWFW6/fg+paWKQP6UEv56lqj tonylim.tistory.com 에 작성된 Feig..

MS간의 data 동기화 (2. kafka 응용)

만들고자 하는 구조이다. 각각ms 가 서로 다른 db를 쓰고 있으니 kafka connect를 통해서 data sync를 맞추려 한다. order serviec , catalog service 각각 서로다른 h2 db를 가지고 있다. 하고자하는것은 order service에서 주문을 한 수량 만큼 catalog service의 db에서 해당 수량만큼 줄어들게 하고 싶다. Order Service Kafka Producer 등록 @EnableKafka @Configuration public class KafkaProducerConfig { @Bean public ProducerFactory producerFactory() { Map properties = new HashMap(); properties.pu..

MS간의 data 동기화 (1. kafka 기본 이론)

각각의 instance가 각각의 db를 가지고 있고 뭔가 변화가 일어날때마다 mQ에 보내서 동기화를 맞춰주는 방법이다. 여러개의 MS instance가 떠도 하나의 db instance로 동기화를 맞춰준다. kafka가 순서를 보장해주던가..? kafka producer , cosumer 는 각각 어떤 플랫폼이나 서비스가 받거나 생산할건지 고려하지 않고 오직 카프카만 집중하여 자신들의 보내거나 소비하고 싶은 데이터를 맡기면 된다. kafka install https://kafka.apache.org/quickstart Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org wsl2 환경에 동일하게 잘 적용된다. 예제도 잘..

gateway 인증 + Cloud Config + Cloud Bus(rabbitMQ) + 암호화

catalog service , user-service 2개의 서비스가 존재한다. api gatway 에서 jwt 를 통해 인증을 거친후에 Eureka (service discovery) 에서 실제 service instance 주소를 알아와서 로드 밸런싱을 해주게 된다. - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/** - Method=GET filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?.*), /$\{segment} - AuthorizationHeaderFilter public GatewayFilter apply(Config config..

API Gateway Service

API gateway 역할을 해주는 spring cloud zuul 과 Ribbon 은 spring boot 2.4 까지는 maintenance. 인증 및 권한 부여 서비스 검색 통합 응답 캐싱 정책 , 회로 차단기 및 Qos(Quality of Service) 다시시도 속도 제한 , 부하 분산 로깅 , 추적 , 상관 관계 헤더 , 쿼리 문자열 및 청구 변환 IP허용 목록에 추가 Spring cloud에서 msa간의 통신 1. RestTemplate 2. Feign Client Zull 실습 spring boot 2.3 이하의 버전만 가능 server: port: 8000 spring: application: name: my-zuul-service zuul: routes: first-service: pa..

Service Discovery

API gateway 가 앞에 따로 존재하고 그뒤에 여러 instance들을 관리해주는 netflix eureka 서버가 존재한다. server: port: 8761 spring: application: name: discoveryservice eureka: client: register-with-eureka: false fetch-registry: false false로 해준것들은 현재 discoveryservice는 eureka server를 담당하는 것인데 굳이 자기 자신을 등록할 필요가 없기 때문이다. server: port: 9001 spring: application: name: user-service eureka: client: register-with-eureka: true fetch-re..

Microservice 소개

Cloud Native Architecture 확장가능한 아키텍처 시스템의 수평적 확정 (Scale out) 에 유연 시스템 또는 서비스 애플리케이션 단위의 패키지 (컨테이너 기반패키지) , 모니터링 탄력적 아키텍처 서비스생성 - 통합 - 배포 , 비즈니스 환경변화에 대응 시간 단축 분활된 서비스 구조 , 무상태 통신 프로토콜 , 독립적이어야 한다. 장애격리 = 특정 서비스에 오류가 발생해도 영향을 퍼트리지 않음 지속적인 통합 CI (Continuous Integeration) 통합서버, 소스관리 (SCM) , 빌드도구 ,테스트 도구 지속적인 배포 Continuous Delivery , Deployment 카나리 배포 (95는 이전서비스, 5는 새로운 서비스) , 블루그린 배포 (점진적으로 업그레이드) ..