태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Scalability는 원래 웹서비스를 수백만에서 수억에 이르는 사용자들에게 원활하게 서비스하기 위해 사용하는 개념이지만, 꼭 이 분야가 아니더라도 참고할만한 부분이 있어서 조금 일반화를 시켜 보면 어떨까 싶어요. 우리 주변에서도 Scalability를 위해서 고안된 시스템을 어렵지 않게 찾아볼 수 있는데, 예를 들면, 주소 시스템이라던지, 학교 학급 구성이라던지, 주민등록번호 시스템, 군대의 병력 운용, 기업의 조직 설계 등 어려 분야에 Scalability가 고려되어 있음을 알 수 있어요.

daveporter-20060122-21.jpg
Scailability의 대명사는 역시 레고

Scalability의 번역 - 설치 상황이나 운영 상황에 따라 규모가 동적으로 변할 수 있는 능력이 scalability이다. 번역하자면, '규모 가변성'

Scale Up vs. Scale Out - 스케일 업은 하나의 성능을 높이는 것, 스케일 아웃은 병렬로 확장하는 것(ex. 건전지 큰 것 vs 여러개 연결)

Scale Out의 한계 - 스케일 업에는 성능 향상의 한계가 있기 때문에 스케일 아웃을 선호하지만, 스케일 아웃도 설계나 운영상의 한계가 있다는 점.

Language & Scalability - 프로그래밍 언어 관점에서는 적은 수의 용어로 더 많은 의미를 표현 가능한 경우


아래는 일반적으로 웹서비스에서의 Scalability를 이루기 위해 필요한 원칙 또는 방안들인데, 최대한 일반화를 시켜서 기술이나 전문용어를 없애봤어요. 
  • 처리시간 최소화
    • collocation : 잦은 커뮤니케이션이 있는 경우 짝 지어 놓기
    • caching : 위와 같은 결합이 힘든 경우 중간 역할 만들기
    • pooling : 비싼 리소스는 리소스풀로 만들어서 사용 시간 줄임
    • parallelization : 문제를 분해해서 병행 처리
    • partitioning : 관련있는 것들끼리 묶어서 구분
    • remoting : 관리 대상을 여러 곳에 분산시키지 않음
  • 동시성(concurrency)
    • 규모가 커져도 공유 자원이나 유일한 접점이 병목되지 않는 구조
  • 비동기적(asynchronously)으로 기능 분리
    • 서로 완료할 때까지 대기할 필요 없도록 분리
  • 처리는 비동기적으로
    • 지켜보거나 관리하지 않아도 어디선가 처리되도록 
  • 리소스 경합(Contention)을 피함
  • 기능별로 분리 
    • 병목되는 구간에 추가 자원 투입해서 해결할 수 있는 구조
  • 수평 분할
    • 종류 별로 나누는 것이 아니라 분량으로 나눔(예, 1학년 1반 2반 3반...) 
  • 모든 레벨을 가상화 또는 추상화
  • 비싼 리소스를 아낄 수 있는 중간 역할(캐시)
  • 계속 테스트
  • 반대로 작아지는 경우에 대한 고려
  • 거시/미시 설계 고려




티스토리 툴바