Api gateway 핵심, proxy 선택
Api gw 의 핵심은 요청지 - 룰엔진 - 엔드포인트 간의 커넥트이며, 이를 가능하게 해주는 proxy 를 선택해야 한다.
기존 uengine-gw 는 직접 작성한 servlet 코드로 proxy 를 작성하였다. 직접 작성한 코드의 단점으로는
- 1) TCP 프로토콜 밖에 서포트 하지 못한다.
- 2) Battle-tested 되지 못한 코드로서 신뢰성이 없다.
해서 대체할 proxy 엔진을 분석해본다.
Ngnix
Ngnix 프락시 서버는 Kong, Tyk 에서 선택한 프락시 서버이다. Haproxy 와 설정법이 유사하다.
- 설정예
server {
listen 443 ssl proxy_protocol;
server_name localhost;
set_real_ip_from 172.31.0.0/20;
real_ip_header proxy_protocol;
access_log /var/log/nginx/elb-access.log elb_log;
# SSL Certificate settings go here.
location / {
proxy_pass http://docker;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
지원 프로토콜은 UDP,TCP,WebSocket 를 지원하며, Plus 버젼에서는 Iot 를 위한 MQTT 프로토콜 등도 지원한다.
But. Haproxy 와 마찬가지로, Proxy 과정중에 일어나는 이벤트에 대한 확장, 커스텀 로직등을 코딩으로 인젝트 할 수 없고, 정해진 문법의 Configuration 을 통해서만 가능하다. 이 Configuration 에서는 타임아웃, 로드밸런싱 등 메커니즘 적인 요소에 특화되어있다.
그래서, Kong 과 Tyk 에서는 Ngnix proxy 실행 전과 후 룰엔진 필터를 살행하고, 필터를 통과할 경우 Ngnix proxy 를 실행시키는 아키텍쳐 구조로 되어있다.
- Kong, Tyk 의 기본컨셉
Spring Cloud Netflix
http://cloud.spring.io/spring-cloud-netflix/
Spring Cloud Netflix 는 Zull, eureka, Ribbon, Hystrix, Spring cloud config 등 넷플릭스의 클라우드 라이브러리를 통합하여 제공하는 라이브러리다.
Spring Cloud Netflix 를 씀으로써 상황에 따라 어플리케이션을 디스커버리 서버로, 게이트웨이로 사용할 수 있다.
지원 프로토콜은 UDP,TCP,WebSocket 이다.
@Configuration
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello World";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Spring Cloud Netflix 를 쓸 경우 서비스 디스커버리와 로드밸런싱 이외의 기능들은 모두 만들어야 하는 부담이 있지만, 코어 기능인 proxy 를 비롯하여 검증된 솔루션이라는 점에서 신뢰성이 있다.
uengine-gw 의 proxy 엔진 선택
- 당장의 완성도 있는 솔루션은 Tyk, Kong
- Tyk, Kong 이 유지보수가 가능한가? 책임질 수 있는가?
- Tyk, Kong 을 선택할 경우 플러그인 제작 방식으로 확장.
- Spring Cloud Netflix 을 선택할 경우 오픈소스들간의 Mash-up 컨셉으로 만들어나갈 때 소요되는 시간.
- 외부에 소개 할 때 Netflix 기반 vs Tyk 기반 일때의 반응.
- 유엔진의 자산화 관점.
==> Spring Cloud Netflix 가 적합해 보인다.