중화사전망 - 자전 검색 - Redis 는 어떻게 구현됩니까?

Redis 는 어떻게 구현됩니까?

첫째, Redis 란 무엇입니까?

Redis 는 메모리, 영구 로그 유형, 키 데이터베이스를 기반으로 하는 고성능 스토리지 시스템이며 여러 언어로 된 API 를 제공합니다.

둘째: 배경.

데이터 구조에 대한 수요가 증가하고 있지만 memcache 에서는 개발 효율성에 영향을 미치지 않습니다.

읽기 작업 용량이 증가함에 따라 성능 요구 사항을 해결해야 하며, 다음과 같은 프로세스를 거칩니다.

데이터베이스 읽기 및 쓰기 분리 (M/S)- "데이터베이스는 다중 슬레이브 서버 사용-"캐시 추가 (memcache)- "Redis 로 이동

작문 문제 해결:

수평으로 분할, 테이블 분할, 일부 사용자를 이 테이블에 배치, 일부 사용자를 다른 테이블에 배치

안정성 요구 사항?

캐시 된 "눈사태" 문제가 혼란 스럽습니까?

캐시는 빠른 복구의 과제에 직면해 있습니다.

개발 비용 요구 사항?

캐시 및 DB 일관성을 유지하는 데 드는 비용이 갈수록 높아지고 있습니다 (DB 를 먼저 지운 다음 캐시를 정리하면 안 됩니다. 안 됩니다. 너무 느립니다! )?

성장하는 제품 수요를 따라잡아야 합니까?

하드웨어 비용이 가장 비싼 것은 데이터베이스 수준의 기계로, 기본적으로 프런트 엔드 기계보다 몇 배나 비싸다. 주로 입출력 집약적이며 하드웨어를 소비합니다.

유지 관리의 복잡성?

일관된 유지 보수 비용이 점점 더 높아지고 있습니다. -응?

BerkeleyDB 는 B-tree 를 사용하며, 항상 새로운 것을 쓰고, 내부에는 파일 재구성이 없습니다. 이로 인해 파일이 점점 더 커질 것입니다. 크게 하려면 파일을 작성해야 하고, 파일 작성 작업은 정기적으로 해야 한다. -응?

이런 식으로 특정 가동 중지 시간이 필요합니다. 을 눌러 섹션을 인쇄할 수도 있습니다

위의 고려 사항에 따라 Redis 가 선택되었습니다.

셋째, Sina Weibo 응용 프로그램에서 Redis.

Redis 소개

1. 5 가지 데이터 구조를 지원합니다.

문자열, 해시, 목록, 집합, 정렬 세트 지원?

문자열은 스토리지를 계산하는 좋은 저장 방법입니다. Sets 는 인덱스 라이브러리 구축에 매우 적합합니다.

2.K-V 스토리지 및 K-V 캐시

현재 시나웨이보에서 사용하는 앱의 98% 는 영구적인 앱, 2% 는 캐시, 600+ 서버를 사용하고 있습니까?

Redis 의 지속성 응용 프로그램과 비지속 방식 사이에는 큰 차이가 없습니다.?

영구적이지 않은 것은 8 만 ~ 9 만 TPS 이고, 지속성은 약 7 만 ~ 8 만 TPS 입니다. -응?

지속성을 사용할 때는 지속성과 쓰기 성능의 비율, 즉 redis 가 사용하는 메모리 크기와 하드 디스크 쓰기 속도의 비율을 고려해야 합니다.

3. 지역 사회 활성화

현재 Redis 에는 3 만여 줄의 코드가 있고, 코드는 간결하며, 많은 교묘한 구현이 있다. 작가는 기술 결벽증이 있습니까?

Redis 의 지역사회 활동도는 오픈 소스 소프트웨어의 품질을 측정하는 중요한 지표이다. 오픈 소스 소프트웨어의 초기 단계에서는 일반적으로 상업화된 기술 서비스 지원이 없습니다. 활발한 지역사회 지원이 없다면, 문제가 생겼을 때 도움을 청할 곳이 없다.

Redis 기본 원칙

Redis 지속성 (aof) 온라인 파일 첨부:?

Aof (쓰기 로그), 메모리와 어느 정도 통합, 추가 및 추가, 디스크에 순차적으로 쓰기, 성능에 거의 영향을 미치지 않습니다.

1. 단일 인스턴스 단일 프로세스

Redis 는 단일 프로세스를 사용하므로 구성 시 하나의 인스턴스에서 하나의 CPU; 만 사용합니다. -응?

구성 시 Cpu 사용률을 극대화해야 하는 경우 CPU 수에 해당하는 Redis 인스턴스 수와 포트 수에 해당하는 Redis 인스턴스 수 (8 코어 CPU, 8 개 인스턴스, 8 개 포트) 를 구성하여 동시성을 높일 수 있습니다.

독립 실행형 테스트의 경우 독립 실행형 데이터는 200 바이트이며 테스트 결과는 80,000 ~ 90,000 TPS 입니다.

2. 분신술

절차: 호스트에 데이터 쓰기–"호스트는 컴퓨터의 RDB 에 저장됩니다–"RDB 를 메모리로 로드합니다. -응?

저장점: 네트워크가 다운되면 연결 후 전송을 계속합니다.

마스터-슬레이브 방식의 첫 번째 동기화는 전체 전송이고, 그 다음은 증분 동기화입니다. ,

3. 데이터 일관성

장기 운영 후 여러 노드 간에 불일치가 발생할 가능성이 있습니다. -응?

두 가지 도구 프로그램 개발:?

1. 데이터 양이 많은 데이터의 경우 정기적으로 전체 검사를 수행합니다. -응?

증분 데이터의 일관성을 실시간으로 확인하십시오.

마스터 라이브러리와 슬레이브 라이브러리가 적시에 동기화되지 않아 발생하는 불일치를 지연 문제라고 합니다. -응?

일관성 요구 사항이 그다지 엄격하지 않은 시나리오의 경우 최종 일관성을 보장하기만 하면 됩니다. -응?

지연 문제의 경우 비즈니스 시나리오의 특성을 분석하고 응용 프로그램 수준에서 정책을 추가하여 이 문제를 해결해야 합니다. -응?

예를 들면?

1. 새로 등록된 사용자는 먼저 주 도서관을 조회해야 합니다. -응?

2. 등록이 성공한 후 3s 를 기다려야 점프할 수 있다. 이때 백그라운드에서 데이터 동기화가 진행 중이다.

넷째, 분산 캐시 아키텍처 설계

1. 건축 설계

Redis 는 단일 지점이기 때문에 프로젝트에서 사용해야 하며 직접 배포해야 합니다. 기본 아키텍처는 다음과 같습니다.

2. 분산 구현

키의 일관성 해시를 통해 키에 해당하는 redis 노드를 분산시킬 수 있습니다.

일관된 해시 구현

L 해시 값 계산: MD5 및 MurmurHash 를 지원하여 기본적으로 MurmurHash 라는 효율적인 해시 계산 방법을 사용합니다.

L 일관성 구현: Java 의 TreeMap 을 통해 링 구조를 시뮬레이션하여 고르게 분포합니다.

3.3. 고객의 선택

Jedis 의 수정 사항은 주로 BufferKey 에 따른 파티셔닝을 지원하고 다른 redis 노드 정보에 따라 다른 ShardInfo 를 초기화할 수 있도록 파티션 모듈의 수정입니다. 또한 JedisPool 의 기본 구현이 수정되어 연결 풀이 키 및 값 구성 방법을 지원하도록 수정되었습니다. 서로 다른 shardinfo 에 따라 서로 다른 jedis 연결 클라이언트를 생성하여 애플리케이션 계층 호출을 위한 파티션 효과를 얻을 수 있습니다.

4. 모듈 설명

L 실패한 캐시 작업을 처리하는 더티 데이터 처리 모듈.

L 마스킹 모니터링 모듈, jedis 작업의 예외 모니터링, 노드 예외 시 redis 노드 제거 등을 제어할 수 있습니다.

전체 분산 모듈은 hornetq 를 통해 예외 redis 노드를 차단합니다. 새 노드 추가의 경우 reload 메소드를 통해 추가할 수도 있습니다. (이 모듈은 노드를 추가하기 위해 쉽게 구현할 수도 있습니다. ) 을 참조하십시오

이러한 분산 아키텍처의 구현은 프로젝트의 요구를 충족시킵니다. 또한 일부 중요한 캐시된 데이터의 경우 일부 redis 노드를 개별적으로 설정하여 특정 우선 순위를 설정할 수 있습니다. 또한 캐시 인터페이스 설계를 위해 필요에 따라 기본 인터페이스와 몇 가지 특수한 논리적 인터페이스를 구현할 수 있습니다. Cas 관련 작업과 일부 작업은 watch 메커니즘을 통해 수행할 수 있습니다.

면책 조항: 모든 블로그는 분산 프레임워크를 제공합니다. 프레임워크로서의 기술 지원과 해석으로서 이 프레임워크는 기업을 위한 대규모 인터넷 분산 엔터프라이즈 아키텍처입니다. 나중에 Linux 에 고가용성 클러스터를 배치하는 프로젝트에 대해 설명하겠습니다.