728x90
개요
로드 밸런서란 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도 저하 등을 고려하여 적절히 분산처리하여 해결해 주는 서비스입니다.
로컬에서만 작업하다 보면 Load Balancer에 대해 고려를 할 필요가 없지만 이에 대해 기본적인 개념은 가지고 개발을 진행을 할 필요가 있습니다. 특히나 요즘에는 특히 무중단 배포로 개발/운영이 진행되다 보니 어떻게 무중단 배포가 가능한지에 대해서 같이 생각을 해보고 넘어가 보면 도움이 많이 될 것입니다.
Scale-up : Server가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법.
하드웨어 성능을 높이는 게 왜 load balancer랑 연관이 있느냐 의문이 들 수 있는데요. 처리되는 방식이 하나의 서버에서 모든 요청을 처리할 경우에 사용할 수 있는 방법입니다.
즉, 현재 서버가 요청 300건에 대해 처리할 수 있는 사양인데 사용자가 늘어서 500건에 대해 처리를 할 수 있도록 서버 사양을 높이는 방법입니다.
Scale-out : 하나의 Server보다는 여러 대의 Server가 나눠서 일을 하는 방법.
하드웨어 성능을 높던 낮던 여러 대의 서버로 요청을 분산하여 처리하는 경우에 사용할 수 있는 방법입니다.
L2, L3, L4, L7 각 레벨에서 로드 밸런싱 할 수 있는 종류가 있습니다.
레이어 7계층 자세한 블로그 : https://jhnyang.tistory.com/1941. Physical Layer
2. Data Link Layer
3. Network Layer
4. Transport Layer
5. Session Layer
6. Presentation Layer
7. Application Layer
Load Balancer 기준
[로그 밸런싱에 대한 자세한 참조]
https://jins-dev.tistory.com/entry/L4-L7-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1Load-Balancing-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
L4 로드 밸런싱
Round Robin | 세션을 순차적으로 맺어주는 방식이다. 일반적으로 5:5의 분산이 가능하나 경로별로 같은 처리량이 보장이 안된다. |
Least Connections | 가장 적은 Open Session을 가진 서버로 연결을 붙여준다. 가장 많이 사용되는 방식이다. |
Response Time | 각 Real Server들이 다루는 Resource의 양과 Connection 시간, 데이터양이 다른 경우 사용하기 적합하다. 로드밸런서가 서버와 직접 통신을 하면서 응답시간이 빠른 쪽으로 많은 세션을 할당해 준다. |
Hash | 특정 클라이언트는 특정 서버로만 할당시키는 방식. 경로가 보장되며 접속자 수가 많을수록 분산 및 효율이 뛰어나다. 다만 접속자 수가 적을 수록 공평하게 분산이 안 될 수도 있다. |
Min miss | 해시 기법과 유사하지만 특정 서버 다운시 해시값의 재할당이 이루어진다. Source IP 기반으로 해싱을 하기 때문에 프록시를 사용하는 경우 Hashing이나 Min miss를 사용하면 안 된다. |
Bandwidth Based | 서버들과의 대여폭을 고려하여 분산한다. |
L7 로드밸런싱
Persistence with Cookies |
주로 쿠키를 활용한 Connection Persistence를 유지하며, 쿠키 정보를 분석한다. WAS로 이루어지는 연결에 대해 해당 연결을 동일한 서버로 연결되게끔 해준다. |
Context Switching | 클라이언트가 요청한 리소스에 대해 Context를 전환할 수 있다. 가령 Static 이미지 리소스 등에 대해 Load Balancer가 확장명에 따른 분류로 Image Server로 연결해 줄 수 있다. |
Content Rewriting | 전달받은 Request를 변환해서 재전송이 가능하다. |
apache modjk 이용
아래 링크를 통해 직접 설치해보고 apache+tomcat 연동 및 로드 밸런싱을 어떻게 설정할지 확인해보면 좋을 것 같습니다.
https://blog.naver.com/pigohno/221124911147
https://waspro.tistory.com/266
https://goddaehee.tistory.com/77
쿠버네티스에서의 로드밸런싱
알기 쉽게 설명을 하고 싶으나 알기 쉬우라고 적은 간단한 내용이 다소 어설퍼 보이거나 성의 없어 보일 수 있으니 쿠버네티스의 복잡한 부분에 대해서 잘 설명해 놓은 블로그를 참조하여 전반적인 이해를 하는 게 좋을 것 같습니다.
[쿠버네티스 개념 잡기]
https://blog.naver.com/alice_k106/221502890249
[쿠버네티스 무중단 배포 개념 잡기]
로드밸런싱에 대해 좀 더 간단하면서 이거다! 싶을 만한 직관적인 설명을 하고 싶었는데 아무래도 명확하게 생각 정리가 되어 있지 않아 다른 사람들의 블로그를 참조할 수 밖에 없는 상황입니다.
요지는 apache modjk를 통해서 로드 밸런싱을 구축할 수 있고 쿠버네티스의 Deployment, Service에 대한 이해와 Deployment에서 replicaset을 통한 배포 방법(rolling-update 등)에 대해서 이해를 하고 넘어가면 좋을 것 같습니다. 해당 서비스들이 배포 툴(jenkins, gitlab)을 사용하여 배포 파이프라인 스크립트 작성을 통해 무중단 CI/CD가 가능하다는 점입니다.
각 서비스는 MSA의 각각의 서비스로... (이하 설명은 다음 기회에..)
참조
https://nesoy.github.io/articles/2018-06/Load-Balancer
https://jhnyang.tistory.com/194
https://jins-dev.tistory.com/entry/L4-L7-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1Load-Balancing-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
https://blog.naver.com/pigohno/221124911147
https://waspro.tistory.com/266
https://goddaehee.tistory.com/77
https://blog.naver.com/alice_k106/221502890249
https://bcho.tistory.com/1256
728x90
'웹개발자 v2.0' 카테고리의 다른 글
캐싱 서비스(Caching service) 란 (0) | 2020.07.29 |
---|---|
데이터베이스(Database)란 (0) | 2020.07.29 |
WAS(Web Application Server) 란 (0) | 2020.07.29 |
DNS(Domain Name Service/System/Server) 란 (0) | 2020.07.29 |
웹 개발이란 (0) | 2020.07.29 |
댓글