SlideShare a Scribd company logo
1 of 74
Download to read offline
날로 먹는
Scalable 이야기!

       charsyam@naver.com
발표자 소개!
               나! 이런 사람이야~
•   이름 : 강대명
•   성별: 남!
•   직업: 아키텍트를 꿈꾸는 프로그래머
•   직장: NHN( 6개월된 잉여 서버 개발자 )
•   특기: 스터디 발표 날로 먹기!
Topic: 이야기 거리
Scalable
Scale UP
   Vs
Scale OUT
Scale UP
초당 1000 TPS
초당 3000 TPS




3배 처리 가능한 서버를 투입
Scale OUT
초당 1000 TPS
초당 2000 TPS
초당 3000 TPS
What is Better?
Depends on
구입 가격


    Depends on
구입 가격


    Depends on
             관리/유지비
rchitecture
Distribution
Transparency
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다.

                 Location: 사용자는 자원이 로컬인지,
            원격인지 물리적 위치에 대해서 알 필요가 없다.
         Migration: 사용자는 자원의 물리적 위치가 이동하더라도,
                   기존 이름으로 서비스 가능해야 한다.
       Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도,
                     이에 대해 알 필요가 없다.
      Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지
                         알 필요가 없다
Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다.
                그냥 혼자 쓰는 자원처럼 인식되어야 한다.
          Failure: 사용자는 사용 중인 자원이 장애가 발생하고,
        이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
ifficult!!!
Use
Framework
3 Things
   +1
3 Things
    Gearman
   Memcached
 MySQL Scale Out
GEARMAN
Queue         Job
Service   +   Server
Multi platform
Multi Language
Gearman Flow
Gearman Cluster
GEARMAN
MANAGER
Gearman Cluster

   한대가 오류가 나더라도 다른 서버로 접근
    단, addserver 로 추가해줘야 한다.
Gearman Dynamic
Gearman A,B          Worker A 등록
   서비스



              작업처리
  결과 전송              Client A 요청
Gearman Dynamic 2
Gearman A,B
                     Client A 요청
   서비스

                             A 대기
              작업처리
  결과 전송              Worker A 등록
Gearman Map/Reduce
             Client

       Gearman Job Server

        Map/Reduce Worker
   Client     Client     Client

        Gearman Job Server

  Worker     Worker      Worker
Who Use Gearman!

Digg: 45+ Server, 400K Jobs/day
Yahoo: 120+ Server, 12M jobs/day
Apply Cache Server

Perfomance   UP
Client        Client       Client



              Server

                 Write

Cache Layer              DBMS
              Update
MEMCACHED
NoSQL
Key-Value Store
Atomic
Operation
Who use Memcached?
• Facebook and Google and Many Companies
• Facebook
  – 현재 가입자 수 6억명
  – 활성 사용자 7,000만
  – 사용자 증가 비율 4일에 100만명
  – Web 서버 10,000 대, Web Request 초당 2000만번
  – Memcached 서버 805대 -> 15TB, HitRate: 95%
  – Mysq server 1,800 대 Master/Slave(각각, 900대)
     • Mem: 25TB, SQL Query 초당 50만번
CACHE 이용의 2가지 모델: 1
         Client




 CACHE            SERVER
CACHE 이용의 2가지 모델: 2
        Client




       SERVER

       CACHE
No, Free Lunch
No, Silver Bullet
1G MEM vs 4G MEM
Appling Scale Out
       On
Memcached Server
Distributed
Memcached Server
Client



     Proxy : Key Management


Memcached   Memcached   Memcached
 Server      Server      Server
NorthScale
 Project
MySQL Scale Out
Default
Architecture
Client



Master

    REPLICATION/FailOver

Slave
One Write
    Master
       +
Multi Read Slave
Client
     ONLY
     WRITE             Only READ
    Master

REPLICATION
     Slave     Slave         Slave
Partitioning
Why?
Partitioning
Scalable Partitioning
              Client


   PART 1               PART 2
 Web Server            Web Server
   DBMS                  DBMS
추가로 고민하면
  좋은거?
Elastic!!!
Thank You!
권장 도서

More Related Content

Viewers also liked (8)

Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
Ssd 성능시험 cubrid mysql
Ssd 성능시험 cubrid mysqlSsd 성능시험 cubrid mysql
Ssd 성능시험 cubrid mysql
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
09. Memory, Storage (RAM, Cache, HDD, ODD, SSD, Flashdrives)
09. Memory, Storage (RAM, Cache, HDD, ODD, SSD, Flashdrives)09. Memory, Storage (RAM, Cache, HDD, ODD, SSD, Flashdrives)
09. Memory, Storage (RAM, Cache, HDD, ODD, SSD, Flashdrives)
 
Data models
Data modelsData models
Data models
 
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
 
Data Modeling PPT
Data Modeling PPTData Modeling PPT
Data Modeling PPT
 
SSD Deployment Strategies for MySQL
SSD Deployment Strategies for MySQLSSD Deployment Strategies for MySQL
SSD Deployment Strategies for MySQL
 

More from DaeMyung Kang

More from DaeMyung Kang (20)

Count min sketch
Count min sketchCount min sketch
Count min sketch
 
Redis
RedisRedis
Redis
 
Ansible
AnsibleAnsible
Ansible
 
Why GUID is needed
Why GUID is neededWhy GUID is needed
Why GUID is needed
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache key
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
 
Redis acl
Redis aclRedis acl
Redis acl
 
Coffee store
Coffee storeCoffee store
Coffee store
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
Number system
Number systemNumber system
Number system
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 

Scalable

  • 2. 발표자 소개! 나! 이런 사람이야~ • 이름 : 강대명 • 성별: 남! • 직업: 아키텍트를 꿈꾸는 프로그래머 • 직장: NHN( 6개월된 잉여 서버 개발자 ) • 특기: 스터디 발표 날로 먹기!
  • 5. Scale UP Vs Scale OUT
  • 8. 초당 3000 TPS 3배 처리 가능한 서버를 투입
  • 15. 구입 가격 Depends on
  • 16. 구입 가격 Depends on 관리/유지비
  • 19. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 20. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 21. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 22. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 23. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 24. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 25. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 26. Access : 사용자가 자원에 대한 접근 방법을 알 필요가 없다. Location: 사용자는 자원이 로컬인지, 원격인지 물리적 위치에 대해서 알 필요가 없다. Migration: 사용자는 자원의 물리적 위치가 이동하더라도, 기존 이름으로 서비스 가능해야 한다. Relocation: 사용자는 사용 중에 자원의 위치가 이동하더라도, 이에 대해 알 필요가 없다. Replication: 사용자는 사용 중인 자원이 복제된 것인지 원본인지 알 필요가 없다 Concurrency: 사용자는 사용 중인 자원의 동시성에 대해서 싞경 쓸 필요가 없다. 그냥 혼자 쓰는 자원처럼 인식되어야 한다. Failure: 사용자는 사용 중인 자원이 장애가 발생하고, 이에 대한 복원이 이루어지더라도 그에 대해 알 필요가 없다.
  • 29. 3 Things +1
  • 30. 3 Things Gearman Memcached MySQL Scale Out
  • 32. Queue Job Service + Server
  • 36.
  • 38. Gearman Cluster 한대가 오류가 나더라도 다른 서버로 접근 단, addserver 로 추가해줘야 한다.
  • 39. Gearman Dynamic Gearman A,B Worker A 등록 서비스 작업처리 결과 전송 Client A 요청
  • 40. Gearman Dynamic 2 Gearman A,B Client A 요청 서비스 A 대기 작업처리 결과 전송 Worker A 등록
  • 41. Gearman Map/Reduce Client Gearman Job Server Map/Reduce Worker Client Client Client Gearman Job Server Worker Worker Worker
  • 42. Who Use Gearman! Digg: 45+ Server, 400K Jobs/day Yahoo: 120+ Server, 12M jobs/day
  • 43.
  • 45. Client Client Client Server Write Cache Layer DBMS Update
  • 49. Who use Memcached? • Facebook and Google and Many Companies • Facebook – 현재 가입자 수 6억명 – 활성 사용자 7,000만 – 사용자 증가 비율 4일에 100만명 – Web 서버 10,000 대, Web Request 초당 2000만번 – Memcached 서버 805대 -> 15TB, HitRate: 95% – Mysq server 1,800 대 Master/Slave(각각, 900대) • Mem: 25TB, SQL Query 초당 50만번
  • 50. CACHE 이용의 2가지 모델: 1 Client CACHE SERVER
  • 51. CACHE 이용의 2가지 모델: 2 Client SERVER CACHE
  • 52.
  • 53.
  • 54. No, Free Lunch No, Silver Bullet
  • 55. 1G MEM vs 4G MEM
  • 56. Appling Scale Out On Memcached Server
  • 58. Client Proxy : Key Management Memcached Memcached Memcached Server Server Server
  • 62. Client Master REPLICATION/FailOver Slave
  • 63. One Write Master + Multi Read Slave
  • 64. Client ONLY WRITE Only READ Master REPLICATION Slave Slave Slave
  • 65.
  • 68.
  • 69.
  • 70. Scalable Partitioning Client PART 1 PART 2 Web Server Web Server DBMS DBMS