Coder Social home page Coder Social logo

databutee's Introduction

Databuter

Databuter는 제 7회 D2 CAMPUS FEST mini의 최우수상 수상작입니다.

Databuter는 분산 인 메모리 키 - 값 스토어 Databute의 서버 구현체입니다.

Databuter의 목표는 메모리에 키 - 값 엔트리를 저장하여, 기존의 데이터베이스 시스템 보다 더 빨리 엔트리를 조회할 수 있도록 하는 것입니다. 또한, 하나 이상의 Databuter 노드가 클러스터를 형성한 뒤 엔트리를 분산시켜 저장하여 용량 및 처리량을 확장하거나, 축소할 수 있도록 하는 것입니다.

사용자는 엔트리를 조회 (GET), 저장 (SET, UPDATE) 및 삭제 (DELETE) 하거나 유효 기간을 설정 (EXPIRE) 할 수 있습니다. 엔트리는 숫자 (Integer, Long), 문자열 (String), 리스트 (List), 셋 (Set) 및 딕셔너리 (Map) 타입을 지원합니다.

엔트리들은 버킷이라 하는 논리적 엔트리 블록에 저장됩니다. Databuter에는 다수의 논리적 버킷이 존재하며, 키를 총 버킷 수에 대해 일관적 해싱을 취한 값과 같은 인자를 가지는 버킷에 엔트리를 저장합니다.

버킷들은 Databuter 클러스터의 노드들이 유지합니다. 한 버킷은 서로 다른 두 노드가 똑같이 유지하고 있어 한 노드에 장애가 발생하더라도 즉시 극복할 수 있습니다.

사용법

gradlew jar
java -jar build/libs/databuter-{version}.jar

라이센스

MIT License

Copyright (c) 2019 - 2021 databute

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

databutee's People

Contributors

ghkim3221 avatar hyeonwoo-park avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

databutee's Issues

맨 처음 서버에 접속하면 등록 요청 전송

이슈 #7#10 에서 클러스터 정보와 버킷 정보 모니터링 요청을 전송하지 않고, 해당 서버에 등록 요청만 전송한다.

서버는 등록된 클라이언트들에게 자동으로 클러스터 정보와 버킷 정보를 전송할 것이다.

Factor의 이름을 keyFactor로 변경.

Factor의 이름을 keyFactor로 변경.
Factor라는 이름은 역할을 정확하게 나타내지 못함.
key의 값을 modular연산 할 때에 사용되는 factor이므로
keyFactor라는 이름이 적절하다.

설정된 서버 주소들 중 한 주소만 임의로 선택

설정된 서버 주소 모두에 연결하는 것이 아니라, 한 주소만 임의로 선택하여 연결한다.

처음에 바로 모든 서버에 연결하지 않고 한 서버에만 연결한 뒤 클러스터 정보를 받아 다시 연결하는 지연된 연결을 하는 이유는 클러스터가 언제든지 스케일 아웃, 스케일 인 되어 변화할 수 있어 이런 상황을 설정에 반영하기 어렵기 때문이다.

만약 임의로 선택한 서버에 연결되지 않는 경우, 다른 주소를 다시 임의로 선택하여 연결할 수 있어야 한다.

쿼리를 추상화한 객체 구현

빌터 패턴을 적용하여 쿼리를 추상화하여 Databuter 시스템에 쉽게 요청을 날릴 수 있어야 한다.

예를 들어 멀티 키에 대한 연산을 다음과 같이 작성할 수 있다.

Query q = Query.query()
    .get("hello1")
    .set("hello2", "world")
    .build();
Future<QueryResult> queryFuture = databutee.query(q);

서버와 기본적인 기본적인 프로토콜 구현

서버에 데이터 조작을 요청하기 위한 기본적인 프로토콜을 구현해야 한다.

기본 프로토콜은 다음과 같다.

get: 키에 해당하는 값을 리턴한다. 키가 없는 경우 NOT_FOUND 코드를 리턴한다.
set: 키에 해당하는 값을 설정한다.
update: 키에 해당하는 값을 변경한다. 키가 없는 경우 NOT_FOUND 코드를 리턴한다.
delete: 키에 해당하는 값을 제거한다. 키가 없는 경우 NOT_FOUND 코드를 리턴한다.

서버와 재연결 정책 구현

서버와 연결이 끊어질 경우 다시 연결해야 한다.

이 재연결 과정을 어떻게 할 것인가에 관한 재연결 정책을 구현해야 한다.
이는 Curator FrameworkRetryPolicy와 비슷하다.

서버와 연결이 끊어지면, 해당 서버가 복구될 것으로 예상되는 시간 (sleepTime)동안 기다린 후 다시 연결을 시도한다. 만약 계속 연결이 실패한다면, 다시 sleepTime 동안 기다린 후 연결을 시도하는 과정을 연결될 때 까지 반복한다.

최대 재연결 시도 횟수 (maxRetryCount) 값을 설정하여, 연결되지 않는 서버에 계속 연결을 시도하는 일이 없도록 할 수 있다.

네트워크 모듈 정리

databuter 프로젝트의 네트워크 모듈을 복사하는 과정에서 발생한 코드 오류를 정리한다.

서버에 접속하면 버킷 정보 모니터링 요청

이슈 #8 에서 임의로 선택되어 연결된 서버에 버킷 정보 모니터링을 요청한다.

해당 서버는 버킷 정보가 변경되면 변경 정보를 전송할 것이다. 어느 서버가 어느 클라이언트에게 변경 정보를 전송할 지 설정하기 위해 버킷 정보 모니터링 요청을 보내 등록할 수 있도록 한다.

엔티티 모델 구현

엔티티 모델은 키 밸류 쌍으로 이루어진 데이터를 관리하는 모델이다. 데이터에 대한 접근은 엔티티 모델로 이루어진다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.