더 많은 것을 원하게 만드는 멤캐시드
멤캐시드는 매우 단순한 의미의 매우 단순한 시스템입니다. 많은 사용자들이 기본 제공 기능보다 조금 더 많은 기능을 원했고, 이로 인해 여러 포크와 관련 프로젝트가 탄생했습니다.
아주 작은 차이점을 수용하기 위해 많은 프로젝트가 멤캐시드의 포크 또는 완전히 새로운 프로젝트로 분리되었습니다:
- dbcached
- depcached
- memagent
- 멤캐시드-프로
- memcachedb
- 뜸
- redis
- repcached
- spcached
- 도쿄 타이런트
- 투겔라 캐시
... 그 목록은 이보다 훨씬 더 많으며, 많은 조직에 존재하는 것으로 알려진 사내 포크는 포함하지도 않았습니다.
이들 대부분은 클라이언트 관점에서는 동일한 작업을 수행하지만(기본 세트 및 키 데이터 가져오기), 들어오는 데이터에 대해 조금 다른 작업을 수행하고자 합니다. 일부는 지속성, 일부는 복제, 일부는 프록시, 일부는 데이터에 대한 새롭고 새로운 작업을 제공합니다.
멤캐시드 스토리지 엔진
동일한 패턴이 반복되는 것을 보고 멤캐시에 스토리지 엔진 프레임워크를 도입하여 클라이언트와의 호환성을 깨거나 프론트엔드 프로토콜 핸들러의 중요한 새 기능이나 버그 수정을 무시하지 않고도 데이터 처리 방식을 변경할 수 있게 되었습니다.
아파치 웹 서버 모듈이 제공하는 기능의 제한된 버전이라고 생각하면 됩니다. 다른 것을 얻기 위해 전체 서버를 변경할 필요는 없습니다.
멤캐시드 스토리지 엔진 프레임워크로 어떤 일을 할 수 있을까요? 위의 목록을 보세요. 우리가 해결하고자 했던 문제들이 바로 여기에 있습니다.
새로운 인메모리 스토리지 포맷
대체 메모리 할당자를 사용하도록 엔진을 작성하거나 더 나은 방법이 있다고 생각되면 항목의 인메모리 구조를 변경할 수 있습니다. 예를 들어, Facebook의 멤캐시드 구현은 규모에 비해 상당한 양의 공간을 절약하기 위해 LRU의 정확도를 낮췄습니다. 저희는 이를 엔진으로 쉽게 구현할 수 있도록 했습니다.
C++에 익숙하다면 STL 맵에 아이템 객체를 저장하는 엔진을 아주 빠르게 만들 수 있습니다. 트론드 노비는 작년 블로그 게시물에서 이를 예로 사용했습니다.
영구 스토리지
최초의 적절한 엔진 테스트 중 하나는 하이브리드 RAM/플래시 스토리지 메커니즘이었습니다. 트론드는 소규모 데모 SQLite 스토리지 엔진도 만들었습니다.
Zynga는 현재 비공개 베타 버전으로 운영 중인 노스스케일 멤베이스 서버를 사용하여 팜빌과 카페 월드 애플리케이션의 퍼시스턴트 스토리지 엔진을 운영 중입니다.
멀티 테넌시
SASL과 결합하여 매우 간단한 멀티테넌트 엔진을 만들 수 있었고, 단일 멤캐시드 인스턴스 내에서 완전히 격리된 논리적 캐시를 생성할 수 있었습니다.
이 엔진은 서버 인스턴스에서 논리적 컨테이너를 독립적으로 안전하게 관리하기 위한 프로토콜 확장도 처리하기 때문에 특히 흥미롭습니다.
성능 보증이 없는 엔진
위에서 언급한 멤캐시드 프로젝트 중 일부는 다른 멤캐시드 인스턴스와 통신하는 프록시 역할을 하며 클라이언트와 서버 사이에 인텔리전스를 주입합니다.
엔진으로 프록시를 작성하는 작성자는 쉽게 작업할 수 있습니다. 엔진은 서버에 요청을 즉시 처리할 수 없음을 알리고 준비가 될 때까지 자체 스레드에서 작업을 수행할 수 있습니다. 클라이언트는 다른 클라이언트에 영향을 주지 않고 일시 중단됩니다. 요청이 준비되면 IO가 완료되었음을 알리고 응답을 준비할 수 있습니다.
물론 이것은 프록시 이외의 많은 용도로도 유용합니다. 모든 영구 저장소 엔진이 동일한 기능을 구현할 것으로 예상합니다.
새로운 스토리지 개념
익숙한 키/값과는 상당히 다른 방식으로 데이터를 저장하는 엔진을 만드는 것은 매우 쉬울 것입니다.
추상 데이터 유형 서버를 구축하려는 경우 프레임워크가 이미 제공되어 있고 핵심 테스트가 완료되었으므로, 사용자는 자신의 부분을 구축하기만 하면 됩니다.
이제 어디로 갈 수 있을까요?
여기서 엔진 프레임워크에서 다루지 않은 한 가지 주제는 엔진이 복제를 지원하는 방법(즉, 리캐시된 경우 처리)입니다. 엔진 작성자가 불필요한 오버헤드를 추가하지 않고도 필요한 모든 작업을 수행할 수 있는 아이디어와 프로토타입이 있습니다.
필요한 기능에 대해서만 비용을 지불하는 것이 엔진 브랜치의 핵심입니다.