• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

멀티서비스 관련 문의 드립니다!

23.01.13 16:30 작성 조회수 301

0

안녕하세요.

항상 좋은 강의를 제공해주셔서 지식을 습득하는데 큰 도움이 되고 있습니다 감사합니다!

현재 강의를 들으며 서비스를 구축하고 있는데 멀티서비스와 관련하여 몇가지 질문드립니다.

  1. 강의에서 OrderService를 멀티서비스로 구현했을 때 동기화 문제가 발생할 수 있다고 하셨습니다.
    그래서 카프카를 이용해 개선을 진행하셨는데, 만약 같은 두 개의 서버가 같은 DB, 예를 들어 RDS의 URL을 접근하게 될때 궁금한 부분이 존재합니다.
    보기에는 MQ를 이용하면, 요청이 큐 형식으로 순차적으로 진행하게되어 동시에 DB에 write를 할 경우 문제가 발생하지 않는게 맞을까요?

  2. Kafka Listener(Consume)는 실시간으로 topic에 데이터가 들어올 때만 사용하면 되는 것으로 생각해도 될까요? 예를 들어 kafka connect 로 생성할 데이터를 업데이트하고 필요한 경우에는 consume이 아닌 직접 DB에 요청해서 가져와서 활용하는게 맞는 방향일까요? 아니면 항상 데이터는 consume으로 가져와야하는 건가요?

  3. 멀티서비스를 하는 경우 로그가 각각 저장될 것으로 생각됩니다. 현재 slf4j2를 이용해서 서비스 로그를 저장하고 있는데 이 경우 로그를 통합해서 한 곳에서 보려면 어떻게 해야하나요? 서칭했을 땐 fluentd라는 로그수집기를 얘기하던데 이런방식으로 로그를 수집하는 방법이 맞을까요? 추가적으로 이런 로그를 프로메테우스에서도 볼 수 있는지 궁금합니다.

아직 개념이 머릿속에 자리잡지않아서 혼동되는 부분이 있어서 질문 드렸습니다!

감사합니다!

답변 1

답변을 작성해보세요.

0

안녕하세요, 이도원입니다.

올려주신 질문에 답변 및 의견 드립니다.

  1. 여러 서버나 서비스에서 Shared DB(단일 DB)를 사용하는 문제는 해당 하는 DB에 Lock 작업이 처리됩니다. 대부분은 DB에서 제공되는 기능인데, 개발자에 의해 제어할 수도 있습니다. MQ를 사용한다고 했을 때, 큐에 등록된 메시지를 순차적으로 DB에 업데이트 하는 것이기 때문에, 오히려 Shared DB를 사용했을 때는 이러한 방식이 더 적합하지 않는가 싶습니다. 비즈니스 로직에서는 이러한 데이터 동기화에 대한 작업을 처리하는 것 보다는, MQ에 메시지를 전달한 하여, DB에 저장하는 부분에 있어서는 MQ하고 DB하고 처리하도록 하는 구조가 된다고 보시면 될 것 같습니다.

  2. Kafka Listener는 java에서 Kafka Topic에 접속하여 변경된 메시지를 인지하고 가져오도록 구현하게끔 되어 있습니다. 만약 Kafka Listener를 사용하지 않는다면, 개별적인 Kafka Consumer를 구현(접속부터 데이터 가져오고, 처리하는 부분까지) 하시면 됩니다. 이벤트성의 Listener를 통해 처리하는게 더 효율적이라고 생각됩니다.

  3. 로그 수집을 한군데서 통합하여 관리해야 할 경우가 많습니다. 말씀하신 것 처럼 fluentd나 logstash 와 같은 도구를 이용하여 로그를 통합하여 저장하고(각각의 서비스에는 fluentd나 logstash쪽으로 로그를 보내야 하는데, ELK의 경우 File beat를 사용하여 전달하게 됩니다), 통합 로그에 저장된 데이터는 분석을 위한 솔루션과 연결하거나 시각화를 위한 솔루션과 연결하여 사용하실 수 있습니다. 프로메테우스에서도 저장된 로그를 분석하고, 메트릭에 대한 집계를 간략하게 시각화하여 표시할 수 있습니다.

감사합니다.

public님의 프로필

public

질문자

2023.01.16

답변 감사드립니다!!