Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

Server services/MSA 설계

MSA 설계

방피터 2023. 6. 13. 21:43

거창하게 MSA 설계 라고 적어놨지만

난 MSA 실무에 투입되어 본 적도 없고 컴공 출신도 아니야 ㅋ

그런데 하게 되었으니 해야지 ㅋ

쫄지만 마 ㅋㅋㅋ

쫄지마 ㅋ

Micro Service Architecture 라더라

처음 들어봄 ㅋ 관심이 없었으니 ㅋ

요약하면 커다란 서비스를 작은 서비스들로 쪼개서 운영하는 것.

이렇게 하면 장점이 몇개 생기는데

사용량에 따라서 특정 서비스 용량 조절이 가능하고

서비스 장애 대응이 좋고

...

그리고 생각안남 ㅋ

논문 쓸 것도 아니고 몰라도 됨.

그리고 직관적으로 좋다는 거 다 알잖아?

 

그래서 설계 시작

👇👇👇

대에에강 그려봄

난 Miro.com에서 이런 저런 설계를 하는데 꽤 좋아. 다들 써봐 ㅋ

암튼 위 그림 처럼 대강 그려봤어.

사용자 인증은 크으으은 회사(구글같은)한테 맞기는 게 좋을 거 같아서 따로 했고

그 다음에는 커어어어다란 API gateway에게 맡기는 거지 ㅋ

그리고 API gateway는 각 MSA 모듈과 맵핑되어 있도록 했어.

마지막으로 각 MSA간 DB sync나 기타 정보 교환에 카프카를 써보기로 했음 ㅇㅇ

왜 카프카냐고?

이름이 멋있음 준내 멋있음.

KAFKA~~~ 크~~

다른 것들도 많은데 있던데.. RabitMQ 같은 거... 이름이 구려.

 

이렇게 했으면 각 서비스 구조를 생각해보려구

초기 모델

우린 이게 맞는지 안맞는지 고민따위는 하지 않아 ㅋ

일단 그려 ㅋㅋ

 

내가 맡은 파트가 결제 서비스인데

회사에서 고민해놓은 MSA 구조가 아예 없어서

내가 그릴 수 밖에 없었어.

내가 그린 MS는 간단하게

API 서버, Kafka 서버, DB

이렇게 3부분으로 나눌 수 있는데

기존 서비스가 Django로 되어 있어서 Python 쓰시라고 Fast api를 넣었고

api 서버와 kafka 서버는 분리했어.

그리고 서비스용 DB가 있지.

 

kafka 서버는 nest.js를 사용했는데 이유는

Fast api에 있는 kafka 라이브러리가 굉장히 구렸고

어차피 별도의 thread를 돌려야 했으므로...

합치면 등신같은 코드가 나올 것 같은 느낌적인 느낌...

퓨전 실패...

그에 비해 nest.js는 microservices 파트에서

공식적으로 kafka를 지원하고 있었고

로고가 멋있잖아.

Nest.js Kafka support

정했으니까 더 간결하게 표현해보자구

👇👇

간결 버전!

kafka consume event가 있으면 kafka 처리 서버는 api 서버에 데이터를 전달하면 되는데..

Kafka produce는 어떻게 해야할까?

API 서버가 kafka에 다이렉트로 데이터를 produce 해야 할까?

아니면 카프카 처리 서버가 DB Subscription으로 변화가 생기면 Produce해야 할까?

고민이 생기더라고 ㅋ

결국은

api와 Kafka 처리 서버 사이에 별도의 프로토콜을 만들고

business logic은 api 서버에서 처리하는 것으로 결정!

👇👇👇

MSA v1

음 간결해졌군~ 보기 좋아 ㅋ

NEST Kafka MSA는 이제 kafka 서버 설정

그리고 토픽에 대한 consume, produce만 딱 담당하고

나머지는 API 서버에서 몽땅 다 하는 걸로

 

이렇게 하면 kafka쪽은 모든 MSA 모듈이 공용으로 사용할 수 있게 되고

API쪽은 최대한 kafka는 잊고 CRUD와 Business 로직에 집중할 수 있을거 같아.

아냐?

그래도 어쩔 수 없어 ㅋ

 

이젠 Nest kafka consume, produce 설정하는 프로토콜 만들고

도커 짜서 배포하는 험난한 과정이 기다리고 있지 😭😭😭

kafka 클러스터 구성은 덤이야 ㅋ

같이 할래? ㅋㅋ

안녕~

👋👋👋

반응형