Google Spanner

2021-07-31

Spanner是谷歌开发的一款可扩展的、全球分布式的数据库,其复制技术可以用来服务于全球可用性和地理局部性。

其提供了几个特性:

  • 在数据的副本配置方面,应用可以在一个很细的粒度上进行动态控制。应用可以详细规定哪些数据中心包含哪些数据,数据距离用户有多远(控制用户读取数据的延迟),不同数据副本之间距离有多远(控制写操作的延迟...

Read More

tcp slow start调研

2021-07-22

背景

有用户反应在系统刚启动时的请求耗时会比较长,所以针对这个问题进行了调研。了解到了tcp的slow start特性,并对此进行了测试。

将测试分为同机房测试和跨机房测试。

跨机房测试

使用get operation, value=1kB大小,使用c3 client to c...

Read More

Google Percolator

2021-07-14

Background

在Google公司内部,对于海量索引数据的创建和实时更新是必须面对的问题。Map Reduce解决了海量索引数据的批量创建问题,但是却不能支持对增量数据的实时更新,每次需要对全量索引数据进行一次重新创建。并且由于文档在Google上能否被检索到取决于全量索引的创建时间,因此导致其被检索到的时间间隔较长。

...
Read More

2pc与业内优化实践

2021-07-11

在分布式事务中,不能简单的向所有节点发送提交请求,然后各个节点去独立的执行事务提交。例如:

  • 某些节点检测到违反约束或者冲突因而决定终止,而其他节点则可能成功提交

  • 发送给某些节点的提交请求可能因为网络原因丢失,而发往其他节点的请求则顺利通过

  • <...
Read More

分布式事务与业内实践

2021-07-01

事务的属性

ACID,事务的4个属性,这个每个人都很熟悉。其中:

A代表原子性,即:事务中的操作要么全部正确执行,要么全部不执行。在分布式系统中,其主要由2pc协议来保证的(另外还有一个3pc协议,但是只停留在理论阶段,没有太多实践意义),这里有一篇文章专门介绍了 Read More

C++返回值优化的小试验

2021-06-29

之前知道C++有返回值优化,但是一直有点不太敢用,生怕用不好就会导致性能问题。最近本着刨根问底的态度,亲自写代码试验了一下。

测试环境:g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 以及 g++ (GCC) 5.4.0

测试代码如下:

Read More

pegasus load balance重构

2021-06-11

背景

现有的实现如下所示:

simple_load_balancer:主要用于cure,cure的目的是维护分片的健康(一主两备份)

Read More

关于数据分区的一些思考

2021-06-06

目前团队所做的kv存储,对于数据分区所采用的方式是hash分区:对key取hash值,获取的hash值再对partition取模。即:hash(key) % partition_count

最近在思考这种方式的实现问题。

显然,由于这种方式...

Read More