on
[대규모 서비스를 지탱하는 기술] 1장 정리
[대규모 서비스를 지탱하는 기술] 1장 정리
'대규모 서비스를 지탱하는 기술' 책을 읽고 정리하였습니다.
무엇을 '대규모'라고 하는가
취업 준비할 때 공고를 보면, 대규모 서비스를 운영해본 경험이 있는 분을 우대한다는 문구가 많았다. '무엇을, 어떤 것을 보고 대규모 서비스라고 하는지' 궁금했다.
대규모 서비스는 1대의 서버로 운영할 수 없는 서비스 , 즉 서버 확장이 필요한 서비스라고 한다. 고객은 웹 사이트, 앱 및 플랫폼에서 항상 똑같은 서비스를 제공받길 기대한다. 책을 주문하고 있는데 갑자기 웹 사이트가 느려지거나 404 페이지가 난다면? 이는 고객 만족도를 떨어트린다. 여러 번 발생한다면? 고객은 다신 서비스를 이용하지 않거나 다른 경쟁 서비스로 이동할 수 있다. 따라서 회사 입장에선 서비스가 더 빠르게 성장하길 원하기 때문에 확장성을 고려해야할 수 밖에 없는 것이다.
그렇다면 서버 확장하는 방법은 무엇이 있을까
What is Scaling
확장성은 시스템이 제대로 기능하기 위해 요구사항에 맞추어 용량 및 성능을 조정하는 것이다.
Scale up
CPU 변경/ RAM 추가 또는 고성능 서버로 교환하여 기존 서버의 성능이나 용량 증강시켜, 더욱 처리 능력을 향상시키는 것이다.
하나의 서버의 능력을 증강하기 때문에 수직 스케일링(vertical scaling)이라고 한다.
확장성 하드웨어 허용 범위 내에서만 확장 가능하다. 그 이상으로 업그레이드를 하고자 한다, 새로운 장비로 교체해야 한다.
새 장비로 교체할 때, 데이터 전체의 마이그레이션 작업이 필요해 HA 구성이 아닌 이상 다운타임이 불가피하다. 저장된 데이터양에 따라 작업이 수개월 걸릴 수 있다. 비용 추가적인 네트워크 연결 없이 용량을 증강할 수 있다.
추가되는 용량이나 업그레이드 비용만 부가된다.
인프라의 노후화로 인한 업그레이드 주기는 이전보다 좁혀지는 추세이다. 최근에는 짧게 3년에서 최대 7년까지로 잦은 교체 주기로 인한 비용을 고려했을 때 scale out 대비 상대적으로 불리하다 장애 Server 한 대에 모든 부하가 집중되므로 장애 시 영향을 크게 받을 수 있는 위험성이 있음 활용 온라인 금융거래와 같이 워크플로우 기반에 빠르고 정확하면서 단순한 처리가 필요한 OLTP(Online Transaction Processing) 환경에서는 고성능의 스케일업 방식이 적합
백업용 스토리지를 구축하는 데 있어서 향후 수년간 데이터 증가 폭이 미미하거나 규모가 작은 경우
Scale out
기존 서버와 동일하거나 비슷한 사양의 서버 대수를 늘려 기존 서버의 성능이나 용량 증강시켜, 더욱 처리 능력을 향상시키는 것이다.
기존 서버의 성능이나 용량 증강시켜, 더욱 처리 능력을 향상시키는 것이다. 사용자는 분산 파일 시스템이나 글로벌 네임스페이스(global namespace)를 통해 스토리지 서버 클러스터를 하나의 시스템으로써 인식하며, 서버를 추가로 확장하기 때문에 수평 스케일링(horizontal scaling)이라고 한다.
확장성 확장이 유연하다. 장기적인 용량 증가 추이를 예측할 필요 없이 그 시점에 필요한 만큼 서버를 추가해 용량과 성능을 확장할 수 있다.(pay-as-you-grow)
여러 개의 서버에 부하를 균등하게 분산시키기 위해 로드 밸런싱이 필요하다
복수의 서버를 연결하기 때문에 케이블링이 복잡하다
개별 노드는 scale up 된 하이엔드 하드웨어보다 상대적으로 성능이나 안정성이 떨어질 수 있다. 비용 기존 서버에 새 서버를 연결해서 사용하거나 다운타임 없이 오래된 서버를 인프라에서 제거하면 된다.
소프트웨어 가격이 스케일업에 비해 비싸다. 장애 Server 한 대가 장애로 다운되더라도 다른 server로 service 제공이 가능하다
노드를 확장할수록 문제 발생의 잠재 원인 또한 추가한 만큼 늘어나게 된다 여러 노드 간 데이터 직렬화 및 동기화 문제 발생 가능 core가 늘어남에 따라 마냥 성능이 증가하지는 않고, core 증가에 따라 대역폭 은 증가해 지연이 발생할 가능성
활용 여러 노드를 연결해 병렬 컴퓨팅 환경을 구성하고 유지하려면 아키텍처에 대한 높은 이해도가 요구
대량의 데이터 처리와 복잡한 쿼리가 이루어지는 OLAP(Online Analytical Processing) 애플리케이션 환경 데이터 마이닝 검색엔진 데이터 분석 처리
고민할 부분 Wrap up
요청을 어떻게 여러 서버에 분산할 것인가?
DB를 분산했을 때 데이터 동기화 문제처리는 어떻게 할 것인가?
분산 환경에서 주는 네트워크 지연시간(latency)은 어떻게 처리할까?
서비스간 트랜잭션 처리, 장애 복구는 어떻게 할까?
여러 대 운용은 어떻게 자동화할 것인가?
Reference
from http://yeondube.tistory.com/86 by ccl(A) rewrite - 2021-07-29 23:00:30