최근 Proxy를 쓰던 곳을 Direct Server Return (DSR)로 바꾸기로 했다. Proxy의 경우 요청과 응답을 모두 translate하는데, DSR은 요청만 translate하고 응답은 그냥 직접 던진다. 그래서 그만큼 빠르다.
DSR을 전체 서비스에 다 적용하는 대신, 응답이 빈 값이거나 굳이 중요하지 않은 부분에 적용하기로 했다. 예를 들어 우리는 사용자가 광고를 보면 봤다고 기록하는데, 그걸 굳이 사용자에게 “우리가 당신이 광고를 봤다는 걸 기록했습니다”라고 알려줄 필요가 없다. 설령 중간에 에러가 나더라도 마찬가지로 사용자에게 굳이 알려줄 필요가 없다. 서비스 내부적으로 notify해서 개발자들이 처리하면 그만이다. 그러니까 이런건 DSR을 써도 된다.
그리고 사용자들이 광고를 많이 보니까 요청이 많이 들어온다. 이게 요청이 많아도 서비스가 안 죽고 다 받아주고 싶고, 기록하는 값도 단순하기 때문에 Kafka 3대와 Zookeeper 3대로 구성했다. 마찬가지로 조금이라도 더 자원을 절약하고 싶어서 DSR을 적용하기로 했다. 우리가 광고가 노출되는만큼 광고료를 받기로 했기 때문에, 이걸 놓치는 만큼 돈을 덜 버는 거니까 받을 수 있는 최대한 놓치지 않도록 효율적으로 만들어야 한다.
다만 우리가 쓰는 DSR이 Proxy에 비해서 기능이 적어서, 부족한 부분을 어플리케이션 레벨에서 해줘야 하는 경우가 있다. 예를 들어 port 번호를 바꿔주는 port translation 기능이 Proxy는 되는데 DSR은 안된다. 그래서 port 번호를 어플리케이션에서 바꿔서 던지기로 했다. 요즘 DSR은 되는 것도 있다고 하는데 사실 DSR은 뺄거 다 빼서 가볍게 쓰는거라 그렇게 무거워지는게 맞지 않을수도 있다.