'Technical Note'에 해당되는 글 134건

Technical Note/NoSQL


disk mode는 기대하는 cache hit ratio를 얻기 위해 캐쉬하여야 할 cache item이 매우 많은 경우 사용하도록 합니다

- expire time이 길고 purge가 자주 발생하지 않는 경우 사용하면 더욱 좋습니다

wcache 재시작시 소스 서버에 절대로 부하를 주어서는 안되는 경우 사용하도록 합니다

- 운영적으로 wcache를 1대씩 순차적으로 천천히 투입함으로써 어느 정도 소스 서버의 부하 조절은 가능할 것입니다.

성능면에서 Wcache > Jaguar > Squid 의 순서로 나타남.

Technical Note/NoSQL
웹에서 사용할 수 있는 오픈 소스 Caching proxy (http://play.daumcorp.com/pages/viewpage.action?pageId=10931170)

squid의 주요기능은 proxy와 cache이며 
proxy로써 squid는 웹 트랜잭션의 중재자 역할 (필수)
cache로써 squid는 웹 컨텐츠를 저장용  (옵션)


참고 : web caching은 미래에 재사용을 위해 웹 리소스를 저장하는 행위를 말한다. cache hit은 squid가 cache로 부터 HTTP 요청을 처리했을때를 말함

하드웨어 사양 :  3~7일 정도의 웹 트래픽을 저장할 수 있는 디스크 공간을 가지는 시스템을 만들라고 한다. 
squid에서 cache 디렉토리로 RAID는 절대 사용마라. RAID는 squid를 위한 filesystem 성능을 저하시킨다. squid를 위해 UFS 성능을 향상시키는 여러 방법이 있다..


Technical Note/NoSQL

memcached


memcached를 분산캐시라고 부르긴 하지만 자체는 분산 기능이 없고

memcached 라이브러리인 Consistent Hashing 을 통해서 데이터 분산을 한다.


why : 

1. 사용량이 많은 동적 웹 어플리케이션에서 디비의 부하를 줄이기 위해 캐쉬 용으로 만들어 졌으며

2. web서버의 동적 추가/삭제에 대한 대처 능력이 뛰어남



 

repcached 패치는 replication기능을 추가해준다



** Consistent Hashing 이란

분산캐쉬를 구현하는 기술 

다수의 노드로 이루어진 클러스터안에 데이터를 저장할 때, 데이터의 키를 기반으로 어떤 노드에 저장할 것인가 계산하는 로직



redis 


캐쉬는 이미 요청됐거나 나중에 요청될 결과를 미리 저장해 두었다가 이를 빠르게 서비스 해 주는 것을 의미




여러대의 memcached 서버에 데이터를 분산하기 위해서 

hasing 기능을 제공해주는 라이브러리를 사용하여 각각이 서버에 접근하는 식



expire Time 설정시 주의해야 함


memcached를 리플리케이션 하려면 어떻게 해야 하나요?

 

repcached는 memcached를 Master/Master 리플리케이션

단점 : 한번에 한대만 리플리케이션이 가능하다.



redis

- Memcached와 다르게 서버 기능으로 리플리케이션을 제공함 : 

이브에 있는 Redis Conf에서 마스터 서버만 지정해주면 리플리케이션 가능

- RDB와 AOF를 꼭 사용하자

  - RDB : 현재의 메모리 상태의 Snapshot을 만들어 두는것, 일정 시기와 명령 개수가 쌓였을 때마다 남길 수 있다.

  - save 300 10 : 10개 key가 변경되면 300초 뒤에 dump를 생성하라는 의미

  

  - AOF: 일종의 Jounaling 파일 역할을 함


- RDB/ AOF는 File에 write를 하는 것이므로 성능을 저하 시킨다.

- 그래서 실제로 마스터에서는 서비스만 하고 슬레이브에서 AOF와 RDB를 이용해서 백업하는 형태로 사용한다.

 

메모리 할당 크기

: 일반적으로 전체 메모리의 60~70% 정도를 사용하는 것이 안정적입니다.




추가 사항

Memory manage : jemalloc  / max memory 초과 시 처리 매커니즘 / 메모리 할당 가이드 / 각 type별 elements 최적의 size 

Data Type : 이미지 추가, 주요 연산 command 추가

Replicaion : failover 시 처리 방법 자세히 (master가 죽었을 때)




memcached & redis 메커니즘 차이점 정리




 data type 커맨드에서 set(이었나?) 에 insert 하는 커맨드 추가도 해주세요~ 



* 샤딩 과 여러 master 

* redis 안정성 



활용

1. 가장 최근의 리스트 보여주기: LPUSH, LTRIM

2. 삭제와 필터링 : LREM

3. 순위 관련 문제 (최고점수 상위 100위의 순위표, 현재 유저의 세계 랭킹) : ZADD, ZREVRANGE. ZRANK

4. 아이템에 대한 만료시간 구현 : ZRANGE..WITHSCORES

5. Count : INCR, INCRBY

6. 주어진 시간동안 고유한 N 항목 : SADD page:day1:<page_id> <user_id>, SISMEMBER page:day1:<page_id> <user_id>



Queues


여러분들은 아마도 list push, list pop 같은 Redis 명령들이 Queues에 적합하게 만들어졌는지 알고 있을 것입니다.


하지만 이보다 더 나아가서 Redis는 목록이 비어있다면 list pop의 변형을 막을 것을 할 수 있습니다. Link : http://redis.io/commands/blpop



h2. Redis 장/단점


* 장점

** 빠른 속도

** 다양한 Data Types (memcached 와 크게 다른점)

** Persistence

** Publish/Subscribe 형태의 message 제공

** 다양한 언어의 클라이언트가 제공되고 있음

** Replication을 통한 성능 향상


* 단점

** Clustering 기능이 없어 횡적 확장성이 좋지 않음

** 쿼리 기능이 풍부하지 못함

** Sharding을 일일이 클라이언트 API를 이용해서 해줘야 함. API에서 반드시 지원

** consistent hashing 을 지원하는 client를 이용해야 distribute 가능


h2. Redis가 적합한 Case


* Case1 : 데이터 검색이 많은 경우

* Case2 : 실시간 통계 데이터가 필요한 경우

* Case3 : 랭킹 정보 및 최근 N개 데이터

* Case4 : Counter 정보 

Technical Note/SERVER PERFORMANCE

- Facebook은 메모리 할당자를 jemalloc 을 써서 속도 향상을 얻었다.

- FreeBSD 운영체제 표준으로 도입


malloc의 중요성에 대한 재조명

- 최근 멀티 코어, 멀티 스레드 환경에서 동작하는 서버 프로그램에서 속도, 공간 효율성 측면이 더 중요해 지고 있다.

- 속도 : 리눅스에 기본으로 들어있는 glibc malloc의 경우 스레드 8개 이상을 돌리기 시작하면 최고 성능의 60% 수준으로 떨어져 버린다. 

- 공간 효율성 : 오랜 시간 영역을 할당 받고 해제하더라고 큰 면적을 잘 보존하는  malloc 이 더욱 중요해 졌음


jemalloc 기술적 특성

- arena : 

- thread cache

Technical Note/NoSQL

설치라고 할 것도 없음


http://redis.io/download 에서 설명하는대로 하면 됨.. 위치만 좀 달리..


# cd /usr/local/src

# wget http://redis.googlecode.com/files/redis-2.4.14.tar.gz

# tar zxvf redis-2.4.14.tar.gz

# cp -Rf redis-2.4.14 /usr/local/redis

# cd /usr/local/redis

# make


설치 끝..


서버 구동


# nohup ./src/redis-server &


명령행 클라이언트를 실행하려면


# ./src/redis-cli

redis 127.0.0.1:6379>  slaveof 10.99.99.91 6379


redis 명령어는 아래에 자세히 나온다.


http://redis.io/commands

1 ··· 4 5 6 7 8 9 10 ··· 27
블로그 이미지

zzikjh