Apache Pegasus

小米分布式 Key-Value 存储系统
授权协议 Apache
开发语言 Java C/C++
所属分类 服务器软件、 分布式应用/网格
软件类型 开源软件
地区 国产
投 递 者 林哲茂
操作系统 跨平台
开源组织 Apache
适用人群 未知
 软件概览

Pegasus 是小米云存储团队开发的一个分布式 Key-Value 存储系统,最初的动机是弥补 HBase 在可用性和性能上的不足。Pegasus 系统的 Server 端完全采用 C++ 语言开发,使用 PacificA 协议支持强一致性,使用 RocksDB 作为单机存储引擎。

与 HBase 比较

Pegasus 系统的最初目的就是弥补 HBase 的不足,从用户使用角度比较一下两者的区别:

  • 数据模型:HBase 是表格模型,采用 Range 分片;Pegasus 是 Key-Value 模型,采用 Hash 分片。

  • 接口:HBase 的 API 接口功能虽然很丰富,但是使用也更复杂;Pegasus 的接口简单,对用户更友好。

  • 可用度:由于架构和实现的原因,HBase 的可用度通常达到99.95%就不错了;Pegasus 的可用度可以到达99.99%。

  • 性能:由于分层架构,HBase 的读写性能不是太好,P99通常在几十甚至几百毫秒级别,而且GC问题会带来毛刺问题;Pegasus 的P99可以在几毫秒,满足低延迟的在线业务需求。

与 Redis 比较

其实Pegasus是不适合与Redis比较的,Redis是基于内存的缓存系统,与之比较性能肯定被吊打。但是我们发现,业务往往需要的不仅仅是性能,可能还有可用性、伸缩性等,所以比拼综合素质,Pegasus也是有其自身的优势的。

我们在与业务的沟通中发现,他们很多时候对数据的性能和可用性要求都很高。在系统选型时遇到这些问题:

  • HBase虽然可用性高也易伸缩,但是性能不够好。

  • Redis虽然性能好,但是需要大量内存,如果数据量太大,一台机器搞不定;如果采用分布式方案,譬如Redis Cluster或者Codis,在机器宕机故障情况下的可用性又不够,并且使用内存的成本也比较高。

  • 一些用户想出了HBase+Redis的方案,即使用HBase做底层存储,使用Redis做上层缓存,写数据的时候同时更新HBase和Redis,读数据的时候先从Redis中读,如果读不到再从HBase中读;但是这样的缺点是:因为涉及两个系统,用户的读写逻辑会比较复杂,且同时写两个系统时容易出现一致性问题;一份数据要存储在HBase和Redis中,成本比较高;Redis机器宕机后造成部分缓存丢失,还是要从HBase读取,性能明显降低,服务质量下降甚至降级。

Pegasus 可以看做是 HBase 和 Redis 的结合体,它即保证高的可用度,又具有好的伸缩性,还具有相对不错的性能。如果业务对性能的要求不是太变态(譬如P99要求在1毫秒以内),那么可以考虑直接使用 Pegasus 。与 Redis 进行比较区别如下:

  • 数据模型:两者都是 Key-Value 模型,但是 Pegasus 支持 (HashKey + SortKey) 的二级键。

  • 接口:Redis 的接口更丰富,支持 List、Set、Map 等容器特性;Pegasus 的接口相对简单,功能更单一。

  • 性能:Redis 性能比 Pegasus 好不少,Redis 是在几十或者几百微妙级别,Pegasus 是在毫秒级别。

  • 伸缩性:Pegasus 伸缩性更好,可以很方便地增减机器节点,并支持自动的负载均衡;Redis 的分布式方案在增减机器的时候比较麻烦,需要较多的运维介入。

  • 可用性:Pegasus 数据总是持久化的,系统架构保证其较高的可用性;Redis 在机器宕机后需要较长时间恢复,可用性不够好,还可能丢掉最后一段时间的数据。

  • 成本:Pegasus 使用 SSD ,Redis 主要使用内存,从成本上考虑,Pegasus 显然更划算。

  • 开源离我很近 apache开源基金会,哈哈,从来没想到自己会离开源项目这么近,目前我司的shardingsphere已经进入apache开源基金会 京东贡献给apache开源基金会的项目ApacheShardingSphere 分片球体 中国进入apache开源基金会:apache rocketMQ(世界公认的kafka) 目前apacheshardingsphere已经被很多公司使用,京东内部也

  • http://www.kuqin.com/baike/20081006/21042.html 阿帕奇族  Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。相传阿帕奇是一个武士,他英勇善战,且战无不胜,被印第安人奉为勇敢和胜利的代表,因此后人便用他的名字为印第安部落命名,而阿帕奇族在印第安史上也以强悍著称。 Apache基金会   Apache软件基金会(也就是Apa

  • Apache Commons是一个Apache项目,专注于可重用Java组件的各个方面。号称Java第二API。   相关具体jar包: Commons Codec -----主要包括核心的算法(Md5等) 是编码和解码组件,提供常用的编码和解码方法,如DES、SHA1、MD5、Base64、URL和Soundx等。 Commons Compress 是一个压缩、解压缩文件的组件,可以操作rar、

  • 之前老是说Apache与Apache Tomcat一直不是很理解,今天特地记录一下区别 Apache Tomcat 与 Apache 区别 Apache Tomcat:侧重于servlet引擎,如果以standalone方式运行,功能上与 Apache 等效 , 支持JSP,但对静态网页不太理想; Apache :侧重于http server,是web服务器, tomcat 是应用(java)服务

  • 首先(apache Tomcat == Tomcat)= true; Apache是web服务器,Tomcat是应用(java)服务器,它只是加了一个servlet容器,是Apache的扩展。 Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,servlet)。 两者都是一种容器,只不过发布的东西不同:Apache是html容器,功能像II

  • Apache HTTP server 如何启动? 如果Listen directive 在conf文件中指定为默认的80端口(或者小于1024的其他端口),则需要root权限来启动HTTPD进程。当HTTP Server启动之后,并且完成了一些初始化的动作,如打开Apache的日志文件, Apache HTTPD进程会启动一定数量的child processes, 这些child process用

  • 什么是Apache? Apache全称叫Apache HTTP Server,是Web服务器软件。 Apache与PHP的关系 Apache是PHP的解释器,PHP本身是一个脚本语言,需要依托一个载体来支撑它的运行,如果缺少载体,PHP无法自己运行对外传递信息。 Apache下载地址:http://www.apachelounge.com/download/

  • 进程文件: Apache 或者 Apache.exe 进程名称: Apache Webserver   描述: Apache.exe是Web网络服务器相关程序,用于建立本地Internet/Intranet网页服务。 出品者: Apache 属于: Apache Webserver 系统进程: 否 后台程序: 是 使用网络: 否 硬件相关: 否 常见错误: 未知N/A 内存使用: 未知N/A  

 相关资料
  • 一、介绍 HDFS (Hadoop Distributed File System)是 Hadoop 下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。 二、HDFS 设计原理 2.1 HDFS 架构 HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DataNode(DN) 组成: NameNode : 负责执行有关 文件系统命名空间 的操作,例如打开,

  • 在很多情况下,日志内容本身都是一个类似于 key-value 的格式,但是格式具体的样式却是多种多样的。logstash 提供 filters/kv 插件,帮助处理不同样式的 key-value 日志,变成实际的 LogStash::Event 数据。 配置示例 filter { ruby { init => "@kname = ['method','uri','verb'

  • 本文向大家介绍Hadoop 分布式存储系统 HDFS的实例详解,包括了Hadoop 分布式存储系统 HDFS的实例详解的使用技巧和注意事项,需要的朋友参考一下 HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统。 一、HDFS的优缺点 1.HDFS优点:   a.高容错性     .数据保存多个副本     .数据丢的失后自动恢复

  • 一面 11.1 分布式存储 阿里天池比赛,问了一些模块的优化 问存储项目 问TinyKV 项目 操作系统:cpu cache,false sharing,gdb C++:移动语义,std::map,rbtree和b+tree区别。 perf 观察程序性能 算法题:二叉树的路径和 二面 11.2 leader 面 开局先选方向:DB,分布式,操作系统,体系结构,计算机网络。选了分布式,狂问raft

  • 之前的秋招面经:深信服 Go 开发面经(已 offer) bg:专升本+ACM银牌+三个项目(一个毕设的KV分离LSM-Tree,一个6824的分布式KV,一个OJ) 某小厂,存储方向技术积累还不错,避免定位就不写具体名字了。自己也一直比较憧憬做 infra 吧,不想写 CRUD 业务,所以就投了。面试内容都是事后回忆,可能有遗漏或记错的 一面 50min 自我介绍 项目实现细节、设计考量、优化(

  • Adds or retrieves given value associated with given key. (Don’t confuse with data- attributes) See also Element.removeData Parameters keystringkey to store data valueanyvalue to store Returns: objectE

  • 设置元素属性。需要注意的是,应该始终调用该方法来修改属性,而不是直接 element.xxx = ... 这样的形式,因为后者不会重绘物体。 参数 名称 类型 默认值 描述 key string|Object 设置的属性。可以是 string 类型的属性名称,或者 Object 类型的属性及其值。 value * 属性值。 例子 element.attr('position', [100, 200

  • 问题内容: 我正在寻找Java分布式缓存解决方案。我们希望功能喜欢: 我们已经分析了Terracotta这样的框架,它似乎是缓存框架中我们想要的一切……但是,似乎需要一个中央缓存节点,这成为我们的单点故障。 除了推出我们自己的解决方案之外,还有其他想法吗? 问题答案: 我建议使用JBossCache或EhCache(使用分布式缓存侦听器)。我都用过,我都喜欢,它们都适合您的要求。