Node.js 마이크로 서비스 코딩공작소
책의 탄탄한 구성에 놀랐다.
설명의 흐름 속에 자연스럽게 마이크로서비스를 구현하는 개념들이 필요성과 함께 다가온다.
우선 마이크로서비스가 왜 좋은지를 기존의 방식(모놀리식)과 비교하며 설명해준다.
마이크로서비스의 단점(비동기, 분산처리의 장단점)을 얘기하며 자연스럽게 Node js를 소개하고 서버 클라이언트 개념을 얘기해준다.
자연스럽게 TCP 서버와 HTTP를 거쳐 REST API와 DB 그리고 이를 실습(모놀리식 분산 아키텍처)으로 중간 정리를 한다.
예제에 사용한 node 버전과 github으로 코드를 공개해서 실습을 따라가기도 편하다.
실습 코드도 회원 관리나 상품 관리를 직접 구현해보는 등 실용적으로 구성되어있다.
그 이후는 인터페이스, 레이어, 안정적인 서비스를 위한 cluster, 자동화된 배포를 위한 Jenkins, 과부하를 막기위한 캐싱시스템 redis,
API 호출을 받는 게이트 웨이, logstash나 fluentd 같은 로그 수집기로 한곳에 모으거나 같은 저장소에 저장, 관련 수정할 때 손이 많이 가니까 로그 관리 서비스를 생성, Elasticsearch와 Elasticsearch 전용 시각화 툴 Kibana에 이르기까지
대충 흐리게 주워듣던 개념들이었는데 이것들이 왜 필요한지를 느끼고 실제로 사용해볼 수 있었다.
쓸데없는 내용 없이 필요한 내용들이 알차게 수록되어 있고 무엇보다 좋은 점은 중간 중간 띄어넘는 게 없어서 혼자 공부하는데 겪는 어려움도 적었다.
대학을 다닐 때는 분산 시스템을 경험할 일이 없었는데 현업을 가니 분산 시스템을 모르고선 코딩을 할 수 없는 것 같다.
그냥 개념으로만 볼 때는 어려워보이던 것들이 실제 코드와 흐름 속에서 자연스럽게 이해되어 좋았다.
개념
비동기 프로그래밍
I/O 처리 요청 순서와 별개로 처리를 완료하는 순서는 제각각(개발자가 고려해야함)
REST API 서버
CRUD (Create, Read, Update, Delete) = (Post, Get,
인터페이스
마이크로서비스는 통일된 패킷 구조와 인터페이스 하나로 모든 API를 호출할 수 있는 구조를 만들어야 한다.
레이어
HTTP 게이트웨이는 기본적으로 HTTP 서버다
분산 시스템 만드릭
모든 노드가 접속해 자신의 상태를 저장할 수 있는 서버가 필요
Client 클래스와 Server 클래스를 만든다.
분산 아키텍처의 성능을 보장하려면 프로토콜을 통일
마이크로서비스 아키텍처는 마이크로서비스, 게이트웨이, 분산 처리 서버로 구성
서비스 안정성
Cluster
cluster 모듈은 실행한 프로세스에서 원하는 만큼 자식 프로세스를 생성, 문제가 발생해도 자식에서 발생한 거니 다른 자식은 정상 서비스
Failover 시스템에 문제가 발생했을 때 준비해 둔 예비 시스템으로 자동 전환해서 서비스가 중단되지 않도록 하는 기능
공유 자원 처리
Distributor
모든 마이크로서비스 접속
gate
API 호출을 받아들이는 게이트웨이
redis
키-값 기반 캐싱 + 랭킹 / 채팅 / 좋아요,싫어요 / 별점 / 지리 정보 / 보안
공유 자원 문제를 해결하는 가장 좋은 방법은 데이터베이스 하나에 접근, 이 때 발생하는 부하처리를 위해 메모리 캐싱 시스템을 이용
로그
logstash나 fluentd 같은 로그 수집기로 한곳에 모으거나 같은 저장소에 저장, 관련 수정할 때 손이 많이 가니까 로그 관리 서비스를 생성
Elasticsearch
Kibana : Elasticsearch 전용 시각화 툴
보안
SSL / process 오브젝트를 이용해 정보 수집 가능
배포
배포 전략 : 롤백, 블루-그린 배포, 지속적 배포
Jenkins
자동 배포 툴
Docker
경량화된 가상화 (프로세스를 격리하는 방식, 커네이너 독립적으로 실행) -> 마이크로