Antifragile의 조건
- Auto Scaling
ex) 사용자가 많을 때와 사용자가 적을 때에 따라 서버를 자동으로 Scale up | Scale out하는 것.
- Microservices
ex) 개별적인 모듈이나 기능을 개별적으로 운용하고 개발할 수 있는 것.
- Chaos enginerring
ex) 급격하고 예측하기 힘든 상황에서 대해 실험하기 위한 규칙이나 방안.
-CI/CD 지속적인 통합
Cloud native
- Microservices 방식으로 개발되고, CI/CD로 자동으로 통합되고, 빌드, 배포된다.
문제가 발생했을 때 다시 배포하는 과정인 DEVOPS가 있다. 어플리케이션을 Containers가상화 기술을 통해서 사용하게 된다.
CI/CD
카나리 배포 -> 95%만 이전버전 5% 새버전 서비스
블루 그린 배포-> 100%사용자 이전 버전과 거의 동일한 새 버전 으로 점진적으로 개발.
DevOps
지속적으로 테스트해나가는 것을 의미한다.
작은 단위로 나눠 더 자주 통합, 테스트, 배포할 수 있다.
Container 가상화.
like docker
Spring Cloud Config Server
다양한 서비스의 환경설정을 집어 넣을 수 있다.
서비스의 등록과 확인 -> Eureka
gateway, 분산 -> Ribbon, Spring Clode Gate Way
여러개의 서비스를 실행하기 위해서 분명 port를 다르게 써야한다.
만약 서버가 한대 이상이라면 포트를 같게 해도 된다.
ServiceDiscovary -> 어떤 서버가 어디에 있는지를 저장하는 공간이다.
1. 서버에서 요청이들어온다.
2. Load Balancer가 springDiscavary에서 찾고 올바른것을 가져온다.
API GATEWAY란?
- 사용자가 설정한 라우팅 설정에 따라 proxy역할을 한다. 시스템 내부를 숨기고 적절한 대응 가능.
End Point를 직접적으로 사용했을 때 clinet쪽에서도 수정을 해야한다.
ex) 새로운 마이크로 서비스가 추가되던가 새로운 파라메타가 바뀌었던가 수정되었다고 생각했을 때.
백엔드 단에 API gateWay를 두고, 각각의 마이크로 서비스에 대한 end point를 api gateway가 직접 처리를한다.
1. 인증 및 권한 부여
2. 서비스 검색 통합
3. 응답 캐싱
4. 정책 회로 차단기 및 Qos 다시시도
5. 속도 제한
6. 부하 분산
7. 로깅, 추적, 상관관계 -> gate way에서 한번에 관리
8. 헤더, 쿼리 문자열 및 청구 변환
9. IP 등록 -> 등록 원하는 IP만 등록
Ribbon이라는 Load Balancer Client side로 서비스의 이름을 가지고 할 수 있는데. 현재는 Spring gateway를 사용한다.
api gateway -> 8080으로 설정을 해놓으면 그에 매핑되는 곳으로
ex) 8000 or 8001로 메핑해서 url 메핑을 해서 요청한다.
port : 8081
@RestController
@GetMapping("/welcome")
public void hello(){
//코드
}
port: 8082
@RestController
@GetMapping("/welcome")
public void hello(){
//코드
}
각각의 독립적인 서비스를 만들고 Zuul설정을 이용하여
zuul.routes.first-service.path:/first-services/**
zuul.routes.first-service.url: http://localhost:8081
이렇게 메핑을 해줘서 해당 서비스로 가게끔 유도시켜준다.