Nginx

Advanced load balancing

미할·2014년 3월 18일·조회 8,443

NGINX가 세가지 버젼이 있군요

- NGINX

- NGINX Plus Standard

- NGINX Plus Premium

알고 계셨나요? 저만 모르고 있었던건가. 물론 Plus버젼부터는 돈이 들어갑니다.

OSS라고는 하지만 저런 서비스를 통해 돈을 벌고 있었던겁니다. 

그럼 Plus버젼에는 있고 걍NGINX에는 없는것들 중 하나인

Advanced load balancing 에 대해서 살표보도록 하겠습니다. 

기본적인 load balancing 에는 다음과 같은 것들이 있죠

"round-robin, least connections, ip_hash"

그 뜻은 대충 아실테니 각각에 대한 설명은 자제하고,

Advanced load balancing 에는 다음의 기능들이 추가 되었다고 하네요.

session persistence, health checks, live status and dynamically-configurable load-balancing pools.

이거에 대해서 하나하나 살표보도록 하겠습니다.

* session persistence : HTTP protocol은 stateless기반이기때문에, 우리는 쿠키와 같이 사용자 정보를 로컬에 저장해놓고 쓰고 있고, 해당 사용자의 모든 요청은 동일한 서버로만 들어가게 되어 있습니다.

 그래서 Load Balanced 환경에서는 Balance가 무너질 가능성이 있습니다. (특정 사용자가 매우 빈번한 요청을 하게되면, 그 사용자의 요청을 처리하는 서버에 Request가 몰릴 수 있기 때문이죠 )

 NGINX Plus에서는 Request에 jvmRoute와 같은 특정 데이타를 통해 User Session을 구분하고 그 사용자가 접속( 사용해야만하는 )했었던 upstream서버(WAS 서버) 정확히 꽂아 넣을수 있다는 것입니다. 

...To Be Continue

댓글 7

로그인 후 댓글을 남길 수 있습니다.

  • 몽상가몽상가· 2014년 3월 18일
    죄송합니다만, 미할님의 글에 이의를 제기해봅니다. "그래서 밸런스가 무너질 강성이 있습니다. "와 업스트림 서버에 정확히 꽂아 넣을수 있다는 것이라고 하면 결국 요청이 많은 사용자 때문에 밸런스가 다시 무너질수 있는것 아닌지요? 실시간 설정파일 반영이라던지 다른 기능은 모르겠지만 세션 퍼시스턴스는 걍nginx와 별다른건 없어보이네요. ^^
  • 미할· 2014년 3월 19일
    몽상가님~! 킹왕짱이십니다. 어저께 어떤글로 인해 저렇게 적었는지 다시 찾아보려했으나 찾을수가 없네요 아무래도 꿈속에서 적었나봅니다. 지적하신데로 결국 요청이 많은 사용자때문에 밸런스의 불균형은 계속 발생할 수 있습니다. 걍nginx와 Advaned의 기능상의 차이는 Session Persistence를 제공하느냐 안하느냐의 문제가 아니라(제 글을 보니 이렇게 적어놨네요~^^) Session Persistence를 활용함에 있어서 Sticky Routes 기능을 통해 좀 더 세부적으로 설정을 할 수 있다는거네요. 세부적인 기능 설정에 대해서 추가 설명하도록 하겠습니다~
  • 미할· 2014년 3월 19일
    활발한 이의 제기는 활발한 커뮤니티의 밑거름이 될것입니다~
  • 강철지그강철지그· 2014년 3월 19일
    몽상가/ 그냥 nginx 에서의 session persistence 는 scenic 님이 말씀하셨던 third-party ajp 모듈을 사용해야만 하는거 아닐까요? (/index.php/nginx/70-scenic) proxy_pass 방식으로는 session persistence 는 보장되지 않을 것 같은데요. 이 아티클에서 소개된 nginx plus 의 jvmRoute 를 통한 session persistence 는 별도 ajp 모듈을 얹지 않고도 되는게 아닌가 싶습니다. http://nginx.com/products/advanced-load-balancing/ 에 따르면, NGINX Plus tracks user sessions and pins them to the correct upstream server. It identifies user sessions by tracking specific data in a request (such as the jvmRoute), or by inserting its own tracking cookie into the traffic. 그리고 관련 설정들도 있으니 참고해 보시기 바랍니다.
  • 미할· 2014년 3월 19일
    활발한 토론 좋네요. jeeg님의 말씀으로 좀 더 서치를 해보니 걍nginx에서 session persistence를 기능을 사용하기 위해서는 ip-hash방식을 써야하고(http://nginx.org/en/docs/http/load_balancing.html), ip-hash방식이 아닌 다른 방식으로 session persistence를 사용하기 위해서는 돈을 내고 Ngnix Plus를 사용하게 되면, sticky cookie나 sticky route 를 사용하여 세션유지를 해주는것 같습니다. ( http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky). jeeg님께서 말씀하신 ajp의 nginx_upstream_jvm_route에서도 비슷한 기능을 제공해주는 것 같습니다. 그렇다면 저런 third-party ajp 를 사용할 수 있는 환경이라면 굳이 돈내고 NginxPlus를 구매하지 않아도 된는건지 궁금해지네요...?..?
  • 몽상가몽상가· 2014년 3월 19일
    지그님 추가설명 감사합니다. 근데 저도 미할님이 말씀하신 것처럼 TPA에서 plus 버전과 비슷한 깅을 제공한다면 굳이 plus를 구매해야할지... 엔터프라이즈 환경을 위해서 나온거겠죠? MySQL이나 PostgreSQL 처럼...
  • 빅토르최빅토르최· 2014년 3월 19일
    좀 더 확인이 필요하긴 하지만 Plus 버전에 Advanced Load Balancing 기능만 더해진 것은 아닐테니 Plus 를 구매할 필요가 없다라고 단정지을 수는 없을 것 같습니다. 그리고 TPA 는 그야 말로 Third Party 이고 따라서 mod_jk 만큼이나 stable 한지도 확인? 검증?이 필요하지 않을까요. 쓰고 보니 죄다 확인이 필요하다는 말 밖에는 하지 못하는 나에게 보낸 편지... 아..