mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2024-12-14 11:58:02 +00:00
docs: add snapshot_cron
flag in README (English and zh-CN) (#1729)
docs: snapshot_cron
This commit is contained in:
parent
901d3fff58
commit
343b3ef800
4 changed files with 51 additions and 28 deletions
|
@ -126,7 +126,7 @@ Dragonfly 特有の議論もある:
|
|||
|
||||
## <a name="ロードマップとステータス"><a/>ロードマップとステータス
|
||||
|
||||
Dragonfly は現在、~185 個の Redis コマンドと、`cas` 以外のすべての Memcache コマンドをサポートしている。ほぼ Redis 5 API と同等ですが、Dragonfly の次のマイルストーンは基本的な機能を安定させ、レプリケーション API を実装することです。まだ実装されていないコマンドで必要なものがあれば、issue を開いてください。
|
||||
Dragonfly は現在、~185 個の Redis コマンドと、`cas` 以外のすべての Memcached コマンドをサポートしている。ほぼ Redis 5 API と同等ですが、Dragonfly の次のマイルストーンは基本的な機能を安定させ、レプリケーション API を実装することです。まだ実装されていないコマンドで必要なものがあれば、issue を開いてください。
|
||||
|
||||
Dragonfly ネイティブのレプリケーションについては、桁違いに高速な分散ログフォーマットを設計中です。
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
## 세상에서 가장 빠른 인-메모리 스토어
|
||||
|
||||
Dragonfly는 현대 애플리케이션 작업을 위한 인-메모리 데이터스토어입니다.
|
||||
Dragonfly는 현대 애플리케이션 작업을 위한 인-메모리 데이터스토어입니다.
|
||||
|
||||
Dragonfly는 Redis와 Memcached API와 완벽하게 호환되며, 이를 적용하기 위한 코드 변경을 필요로 하지 않습니다. Dragonfly는 기존 레거시 인-메모리 데이터스토어와 비교하여 25배 이상의 높은 처리량과 캐시 히트율, 낮은 꼬리 지연시간을 갖고있으며 간편한 수직 확장성을 지니고 있습니다.
|
||||
|
||||
|
@ -75,13 +75,13 @@ Memcached는 읽기 벤치마크의 지연 시간은 적었지만, 처리량도
|
|||
|
||||
메모리 효율을 테스트하기 위해서, 저희는 `debug populate 5000000 key 1024` 명령어를 활용하여 Dragonfly와 Redis에 ~5GB 정도의 데이터를 채운 후, `memtier` 를 통하여 업데이트 트래픽을 전송한 후, `bgsave` 명령을 통하여 스냅샷을 시작했습니다.
|
||||
|
||||
이 그림은 메모리 효율 측면에서 각 서버가 어떻게 동작했는지 보여줍니다.
|
||||
이 그림은 메모리 효율 측면에서 각 서버가 어떻게 동작했는지 보여줍니다.
|
||||
|
||||
<img src="http://static.dragonflydb.io/repo-assets/bgsave-memusage.svg" width="70%" border="0"/>
|
||||
|
||||
Dragonfly는 유휴 상태에서 Redis보다 메모리 효율이 30% 더 좋았으며, 스냅샷 단계에서 메모리 사용량이 눈에 띄게 증가하지 않았습니다. Redis는 고점에서 Dragonfly에 비해 메모리 사용량이 약 3배 증가하였습니다.
|
||||
|
||||
Dragonfly는 스냅샷 단계를 몇 초안에 더 빨리 마쳤습니다.
|
||||
Dragonfly는 스냅샷 단계를 몇 초안에 더 빨리 마쳤습니다.
|
||||
|
||||
Dragonfly의 메모리 효율에 대한 정보가 더 필요하시다면, 저희의 [Dastable 문서](/docs/dashtable.md)를 참고하시기 바랍니다.
|
||||
|
||||
|
@ -90,7 +90,7 @@ Dragonfly의 메모리 효율에 대한 정보가 더 필요하시다면, 저희
|
|||
|
||||
Dragonfly는 적용 가능한 Redis 인수를 지원합니다. 예를 들면, `dragonfly --requirepass=foo --bind localhost`와 같은 명령어를 사용할 수 있습니다.
|
||||
|
||||
Dragonfly는 현재 아래와 같은 Redis 인수들을 지원합니다 :
|
||||
Dragonfly는 현재 아래와 같은 Redis 인수들을 지원합니다 :
|
||||
* `port`: Redis 연결 포트 (`기본값: 6379`).
|
||||
* `bind`: `localhost`를 사용하여 로컬호스트 연결만 허용하거나 공용 IP 주소를 사용하여 해당 IP 주소에 연결을 허용합니다.(즉, 외부에서도 가능)
|
||||
* `requirepass`: AUTH 인증을 위한 패스워드 (`기본값: ""`).
|
||||
|
@ -98,12 +98,12 @@ Dragonfly는 현재 아래와 같은 Redis 인수들을 지원합니다 :
|
|||
* `dir`: Dragonfly Docker는 스냅샷을 위해 기본적으로 `/data` 폴더를 사용하고, CLI은 `""`을 사용합니다. Docker 옵션인 `-v` 을 통해서 호스트 폴더에 매핑할 수 있습니다.
|
||||
* `dbfilename`: 저장하고 불러올 데이터베이스 파일 이름 (`기본값: dump`).
|
||||
|
||||
아래는 Dragonfly 전용 인수 입니다 :
|
||||
아래는 Dragonfly 전용 인수 입니다 :
|
||||
* `memcached_port`: Memcached 호환 API를 위한 포트 (`기본값: disabled`).
|
||||
* `keys_output_limit`: `keys` 명령을 통해 반환 되는 최대 키의 수 (`기본값: 8192`). `keys` 명령은 위험하기 때문에, 너무 많은 키를 가져올 때 메모리 사용량이 급증하지 않도록 결과를 해당 인수만큼 잘라냅니다.
|
||||
* `dbnum`: `select` 명령에 대해 지원되는 최대 데이터베이스 수.
|
||||
* `cache_mode`: 아래의 섹션 [새로운 캐시 설계](#novel-cache-design)을 참고해주시기 바랍니다.
|
||||
* `hz`: 키가 만료되었는지를 판단하는 빈도(`기본값: 100`). 낮은 빈도는 키 방출이 느려지는 대신, 유휴 상태일 때 CPU 사용량을 줄입니다.
|
||||
* `hz`: 키가 만료되었는지를 판단하는 빈도(`기본값: 100`). 낮은 빈도는 키 방출이 느려지는 대신, 유휴 상태일 때 CPU 사용량을 줄입니다.
|
||||
* `save_schedule`: UTC 기준으로 스냅샷을 HH:MM(24시간제) 형식으로 저장하기 위한 Glob 패턴 (`기본값: ""`).
|
||||
* `primary_port_http_enabled`: `true` 인 경우 HTTP 콘솔로 메인 TCP 포트 접근을 허용합니다. (`기본값: true`).
|
||||
* `admin_port`: 할당된 포트에서 관리자 콘솔 접근을 활성화합니다. (`기본값: disabled`). HTTP와 RESP 프로토콜 모두를 지원합니다.
|
||||
|
@ -125,7 +125,7 @@ Dragonfly는 현재 아래와 같은 Redis 인수들을 지원합니다 :
|
|||
|
||||
## <a name="roadmap-status"><a/>로드맵과 상태
|
||||
|
||||
Dragonfly는 현재 ~185개의 Redis 명령어들과 `cas` 뿐만 아니라 모든 Memcache 명령어를 지원합니다. 이는 거의 Redis 5 API와 동등하며, Dragonfly의 다음 마일스톤은 기본 기능 을 안정화하고 복제 API를 구현하는 것입니다. 아직 구현되지 않은 필요한 명령가 있다면, 이슈를 오픈해주세요.
|
||||
Dragonfly는 현재 ~185개의 Redis 명령어들과 `cas` 뿐만 아니라 모든 Memcached 명령어를 지원합니다. 이는 거의 Redis 5 API와 동등하며, Dragonfly의 다음 마일스톤은 기본 기능 을 안정화하고 복제 API를 구현하는 것입니다. 아직 구현되지 않은 필요한 명령가 있다면, 이슈를 오픈해주세요.
|
||||
|
||||
Draginfly 고유 복제기능을 위해, 저희는 몇 배 높은 속도를 지원할 수 있는 분산 로그 형식을 설계하고 있습니다.
|
||||
|
||||
|
@ -139,7 +139,7 @@ Dragonfly에 의해 현재 지원되는 명령어를 확인하기 위해서 [명
|
|||
|
||||
Dragonfly는 단순하고 메모리 효율적인 단일, 통합, 적응형 캐싱 알고리즘을 제공합니다.
|
||||
|
||||
`--cache_mode=true` 플래그를 전달하여 캐싱 모드를 활성화할 수 있습니다. 이 모드가 활성화되면, Dragonfly는 `maxmemory` 한도에 가까워질 때만, 미래에 재사용 될 가능성이 가장 낮은 항목을 방출합니다.
|
||||
`--cache_mode=true` 플래그를 전달하여 캐싱 모드를 활성화할 수 있습니다. 이 모드가 활성화되면, Dragonfly는 `maxmemory` 한도에 가까워질 때만, 미래에 재사용 될 가능성이 가장 낮은 항목을 방출합니다.
|
||||
|
||||
### 상대적인 정확성을 가진 만료 기한
|
||||
|
||||
|
@ -167,7 +167,7 @@ Dragonfly는 2022년에 인-메모리 데이터스토어를 설계한다면 어
|
|||
첫 번째 문제는 오늘날 퍼블릭 클라우드 환경에서 사용 가능한 서버를 사용하여 CPU, 메모리 및 I/O 자원을 어떻게 최대한 활용할 수 있을지였습니다. 이 문제를 해결하기 위해 저희는 [비공유 아키텍처(Shared Nothing Architecture)](https://en.wikipedia.org/wiki/Shared-nothing_architecture)를 사용했습니다. 이는 저희가 메모리 스토어의 각 스레드 사이의 키 공간을 분할할 수 있게하였습니다. 이를 통해 각 스레드들은 그들의 딕셔너리 데이터들의 조각을 관리할 수 있게 되었습니다. 저희는 이 조각들을 "샤드(shards)"라 불렀습니다. 비공유 아키텍처에 대한 스레드 및 I/O 관리를 위한 라이브러리는 [여기](https://github.com/romange/helio)에서 오픈소스로 제공됩니다.
|
||||
|
||||
멀티-키 작업에 대한 원자성 보장을 위해, Dragonfly의 트랜잭션 프레임워크를 개발하기 위해 저희는 최근 학계의 연구 발전을 활용했고 ["VLL: a lock manager redesign for main memory database systems”](https://www.cs.umd.edu/~abadi/papers/vldbj-vll.pdf) 논문을 채택했습니다. 비공유 아키텍처와 VLL의 선택은 우리가 뮤텍스나 스핀락을 사용하지 않고도 원자적 멀티-키 작업을 구성할 수 있게 했습니다.
|
||||
이것은 저희의 PoC에 있어서 주요한 마일스톤이었고, 그 성능은 다른 상용 및 오픈소스 솔루션보다 성능이 뛰어났습니다.
|
||||
이것은 저희의 PoC에 있어서 주요한 마일스톤이었고, 그 성능은 다른 상용 및 오픈소스 솔루션보다 성능이 뛰어났습니다.
|
||||
|
||||
두 번째 문제는 새로운 저장소를 위하여 더 효율적인 데이터 구조를 설계하는 것이었습니다. 이 목표를 달성하기 위해서 저희는 핵심 해시테이블 구조를 ["Dash: Scalable Hashing on Persistent Memory"](https://arxiv.org/pdf/2003.07302.pdf) 논문을 기반으로 작업했습니다. 이 논문은 영속적인 메모리 도메인을 중심으로 다루며, 이는 메인-메모리 저장소와 직접적인 연관관계는 없었습니다. 하지만 여전히 저희 문제를 해결하기 위해서 가장 적합했습니다. 해당 논문의 제안된 해시테이블 설계는 저희가 레디스 딕셔너리에 표현된 두 가지 특별한 특성을 유지 가능하게 해줬습니다: 데이터스토어 확장 중 증분 해싱 기능과 상태 없는 스캔 작업을 사용하여 변화하는 딕셔너리를 순회하는 능력이었습니다. 이 두 가지 속성 외에도 Dash는 CPU와 메모리 사용에서 더 효율적입니다. 저희는 다음과 같은 기능들로 더욱 혁신할 수 있었습니다:
|
||||
* TTL 레코드에 대한 효율적인 만료 처리
|
||||
|
|
15
README.md
15
README.md
|
@ -106,7 +106,18 @@ There are also some Dragonfly-specific arguments:
|
|||
* `dbnum`: Maximum number of supported databases for `select`.
|
||||
* `cache_mode`: See the [novel cache design](#novel-cache-design) section below.
|
||||
* `hz`: Key expiry evaluation frequency (`default: 100`). Lower frequency uses less CPU when idle at the expense of a slower eviction rate.
|
||||
* `save_schedule`: Glob spec for the UTC to save a snapshot in HH:MM (24h time) format (`default: ""`).
|
||||
* `snapshot_cron`: Cron schedule expression for automatic backup snapshots using standard cron syntax with the granularity of minutes (`default: ""`).
|
||||
Here are some cron schedule expression examples below, and feel free to read more about this argument in our [documentation](https://www.dragonflydb.io/docs/managing-dragonfly/backups#the-snapshot_cron-flag).
|
||||
|
||||
| Cron Schedule Expression | Description |
|
||||
|--------------------------|--------------------------------------------|
|
||||
| `* * * * *` | At every minute |
|
||||
| `*/5 * * * *` | At every 5th minute |
|
||||
| `5 */2 * * *` | At minute 5 past every 2nd hour |
|
||||
| `0 0 * * *` | At 00:00 (midnight) every day |
|
||||
| `0 6 * * 1-5` | At 06:00 (dawn) from Monday through Friday |
|
||||
|
||||
* `save_schedule`: Glob spec for the UTC to save a snapshot in HH:MM (24h time) format (`default: ""`). This argument is deprecated, and `snapshot_cron` should be preferred when available.
|
||||
* `primary_port_http_enabled`: Allows accessing HTTP console on main TCP port if `true` (`default: true`).
|
||||
* `admin_port`: To enable admin access to the console on the assigned port (`default: disabled`). Supports both HTTP and RESP protocols.
|
||||
* `admin_bind`: To bind the admin console TCP connection to a given address (`default: any`). Supports both HTTP and RESP protocols.
|
||||
|
@ -126,7 +137,7 @@ For more options like logs management or TLS support, run `dragonfly --help`.
|
|||
|
||||
## <a name="roadmap-status"><a/>Roadmap and status
|
||||
|
||||
Dragonfly currently supports ~185 Redis commands and all Memcache commands besides `cas`. Almost on par with the Redis 5 API, Dragonfly's next milestone will be to stabilize basic functionality and implement the replication API. If there is a command you need that is not implemented yet, please open an issue.
|
||||
Dragonfly currently supports ~185 Redis commands and all Memcached commands besides `cas`. Almost on par with the Redis 5 API, Dragonfly's next milestone will be to stabilize basic functionality and implement the replication API. If there is a command you need that is not implemented yet, please open an issue.
|
||||
|
||||
For Dragonfly-native replication, we are designing a distributed log format that will support order-of-magnitude higher speeds.
|
||||
|
||||
|
|
|
@ -90,38 +90,50 @@ Dragonfly 支持 Redis 的常见参数。
|
|||
|
||||
目前,Dragonfly 支持以下 Redis 特定参数:
|
||||
|
||||
* `port`:Redis 连接端口,默认为 6379。
|
||||
* `port`:Redis 连接端口,默认为 `6379`。
|
||||
* `bind`:使用本地主机名仅允许本地连接,使用公共 IP 地址允许外部连接到**该 IP 地址**。
|
||||
* `requirepass`:AUTH 认证密码,默认为空`""`。
|
||||
* `maxmemory`:限制数据库使用的最大内存(以字节为单位)。0 表示程序将自动确定其最大内存使用量。默认为 0。
|
||||
* `dir`:默认情况下,dragonfly docker 使用 `/data` 文件夹进行快照。CLI 使用的是 ""。你可以使用 `-v` docker 选项将其映射到主机文件夹。
|
||||
* `dbfilename`:保存/加载数据库的文件名。默认为 "dump";
|
||||
* `requirepass`:AUTH 认证密码,默认为空 `""`。
|
||||
* `maxmemory`:限制数据库使用的最大内存(以字节为单位)。`0` 表示程序将自动确定其最大内存使用量。默认为 `0`。
|
||||
* `dir`:默认情况下,dragonfly docker 使用 `/data` 文件夹进行快照。CLI 使用的是 `""`。你可以使用 `-v` docker 选项将其映射到主机文件夹。
|
||||
* `dbfilename`:保存/加载数据库的文件名。默认为 `dump`;
|
||||
|
||||
此外,还有 Dragonfly 特定的参数选项:
|
||||
|
||||
* `memcached_port`:在此端口上启用 memcached 兼容的 API。默认禁用。
|
||||
|
||||
* `keys_output_limit`:在`keys` 命令中返回的最大键数。默认为 8192。
|
||||
* `keys_output_limit`:在`keys` 命令中返回的最大键数。默认为 `8192`。
|
||||
|
||||
`keys` 命令是危险命令。我们会截断结果以避免在获取太多key时内存溢出。
|
||||
`keys` 命令是危险命令。我们会截断结果以避免在获取太多键时内存溢出。
|
||||
|
||||
* `dbnum`:`select` 支持的最大数据库数。
|
||||
|
||||
* `cache_mode`:请参见下面的 [缓存](#全新的缓存设计) 部分。
|
||||
|
||||
* `hz`:键到期评估频率。默认为 100。空闲时,使用较低的频率可以占用较少的 CPU资源,但这会导致清理过期键的速度下降。
|
||||
* `hz`:键到期评估频率。默认为 `100`。空闲时,使用较低的频率可以占用较少的 CPU资源,但这会导致清理过期键的速度下降。
|
||||
|
||||
* `save_schedule`:以UTC 时间规范保存快照,格式: HH:MM(24 小时制时间)。默认为空`""`。
|
||||
* `snapshot_cron`:定时自动备份快照的 cron 表达式,使用标准的、精确到分钟的 cron 语法。默认为空 `""`。
|
||||
|
||||
* `primary_port_http_enabled`:如果为 true,则允许在主 TCP 端口上访问 http 控制台。默认为 true。
|
||||
下面是一些 cron 表达式的示例,更多关于此参数的细节请参见[文档](https://www.dragonflydb.io/docs/managing-dragonfly/backups#the-snapshot_cron-flag)。
|
||||
|
||||
| Cron 表达式 | 描述 |
|
||||
|---------------|----------------------------------|
|
||||
| `* * * * *` | 每分钟 |
|
||||
| `*/5 * * * *` | 每隔 5 分钟 (00:00, 00:05, 00:10...) |
|
||||
| `5 */2 * * *` | 每隔 2 小时的第 5 分钟 |
|
||||
| `0 0 * * *` | 每天的 00:00 午夜 |
|
||||
| `0 6 * * 1-5` | 从星期一到星期五的每天 06:00 黎明 |
|
||||
|
||||
* `save_schedule`:以 UTC 时间规范保存快照,格式: HH:MM(24 小时制时间)。默认为空 `""`。该参数被标记为弃用,新版本中推荐使用 `snapshot_cron` 参数替代。
|
||||
|
||||
* `primary_port_http_enabled`:如果为 true,则允许在主 TCP 端口上访问 HTTP 控制台。默认为 `true`。
|
||||
|
||||
* `admin_port`:如果设置,将在指定的端口上启用对控制台的管理访问。支持 HTTP 和 RESP 协议。默认禁用。
|
||||
|
||||
* `admin_bind`:如果设置,将管理控制台 TCP 连接绑定到给定地址。支持 HTTP 和 RESP 协议。默认为any。
|
||||
* `admin_bind`:如果设置,将管理控制台 TCP 连接绑定到给定地址。支持 HTTP 和 RESP 协议。默认为 `any`。
|
||||
|
||||
* `admin_nopass`: 如果设置,允许在不提供任何认证令牌的情况下,通过指定的端口访问管理控制台。同时支持 HTTP 和 RESP 协议。 默认为 false。
|
||||
* `admin_nopass`: 如果设置,允许在不提供任何认证令牌的情况下,通过指定的端口访问管理控制台。同时支持 HTTP 和 RESP 协议。 默认为 `false`。
|
||||
|
||||
* `cluster_mode`:支持集群模式。目前仅支持 `emulated`。默认为空`""`。
|
||||
* `cluster_mode`:支持集群模式。目前仅支持 `emulated`。默认为空 `""`。
|
||||
|
||||
* `cluster_announce_ip`:集群模式下向客户端公开的 IP。
|
||||
|
||||
|
@ -131,11 +143,11 @@ Dragonfly 支持 Redis 的常见参数。
|
|||
./dragonfly-x86_64 --logtostderr --requirepass=youshallnotpass --cache_mode=true -dbnum 1 --bind localhost --port 6379 --save_schedule "*:30" --maxmemory=12gb --keys_output_limit=12288 --dbfilename dump.rdb
|
||||
```
|
||||
|
||||
要获取更多选项,如日志管理或TLS支持,请运行`dragonfly --help`。
|
||||
要获取更多选项,如日志管理或TLS支持,请运行 `dragonfly --help`。
|
||||
|
||||
## <a name="开发路线和开发现状"><a/>开发路线和开发现状
|
||||
|
||||
目前,Dragonfly支持约185个Redis命令以及除`cas`之外的所有memcache命令。
|
||||
目前,Dragonfly支持约185个Redis命令以及除 `cas` 之外的所有 Memcached 命令。
|
||||
我们几乎达到了Redis 5 API的水平。我们的下一个里程碑更新将会稳定基本功能并实现复刻API。
|
||||
如果您发现您需要的命令尚未实现,请提出一个Issue。
|
||||
|
||||
|
@ -150,7 +162,7 @@ Dragonfly 支持 Redis 的常见参数。
|
|||
### 全新的缓存设计
|
||||
|
||||
Dragonfly采用单一的自适应缓存算法,该算法非常简单且具备高内存效率。
|
||||
你可以通过使用`--cache_mode=true`参数来启用缓存模式。一旦启用了此模式,Dragonfly将会删除最低概率可能被使用的内容,但这只会在接近最大内存限制时发生。
|
||||
你可以通过使用 `--cache_mode=true` 参数来启用缓存模式。一旦启用了此模式,Dragonfly将会删除最低概率可能被使用的内容,但这只会在接近最大内存限制时发生。
|
||||
|
||||
### 相对准确的过期期限
|
||||
|
||||
|
|
Loading…
Reference in a new issue