最新 | 最热门 | 最高评价

-1  什么是分布式一致性

Tag: 分布式 | 数据库 | Paxos | Raft
ideawu 发于 2021年09月05日 10:49 | 点击: 2330 | 展开摘要
在工程实践上, 分布式一致性和多副本有关系, 如果没有多副本, 就没有分布式一致性的问题.

多副本的定义: 多副本可以放在多台机器上, 也可以放在同一个进程内的不同内存地址内, 或者一个副本在内存, 一个副本在硬盘. 只要同一个对象出现在多处, 或者在多处被引用, 就是多副本.

各个副本的写入操作序列必须先经过共识, 按同样的顺序写入, 因此所有副本的状态将是最终一致的(相同). 但是, 有可能单独地读取某个副本, 这就导致读操作在不同副本上发生的顺序并不相同, 这显然会

查看全文: http://www.udpwork.com/item/18147.html

+0  记一次关于系统性能的有趣讨论

Tag: IT技术和评论 | 计算机架构
ideawu 发于 2021年09月04日 10:29 | 点击: 1698 | 展开摘要
有个同事问我:"你开发的分布式数据库系统, 如何避免 scan 扫描操作返回了 pending 事务状态的数据?"

我说:"把数据扫描出来, 然后逐个判断过滤掉 pending 状态的数据."

我感到奇怪, 对于他的问题, 解决方案非常显然啊. 解决方案非常直观, 兵来将挡水来土掩, 我相信他也能想到, 不想要的数据当然要剔除掉, 否则呢? 那么, 他的问题的点在哪?

没错, 他接着问了:"我 scan 的时候只想返回 key, 但是, 要判断状态, 是不是还得去读取

查看全文: http://www.udpwork.com/item/18148.html

+0  Binlog 和 Redolog 的区别

Tag: 数据库
ideawu 发于 2021年09月02日 21:29 | 点击: 1560 | 展开摘要
在开发分布式数据库的过程中, Binlog 和 Redolog 是非常重要的两个概念, 两者的作用似乎相同, 但实际上各有各的使用场景. 从多副本复制一致性的角度看, Binlog 用于强一致性, Redolog 用于最终一致性.

Binlog 可包含非幂等的指令, 例如 incr 指令. Redolog 只能包含幂等的指令, 例如 set 指令.

全球跨地域同步最终一致, 能不能复制 Binlog 呢? 绝对不行! 使用 incr 和 set 指令的组合, 在不同的地域

查看全文: http://www.udpwork.com/item/18149.html

+1  企业级SSD硬盘fsync速度

Tag: 计算机架构
ideawu 发于 2021年08月27日 20:42 | 点击: 1438 | 展开摘要
小数据测试, 以便对硬盘 fsync 的速度有一个大概的了解. 结果:

rate
latency
备注

4044/s
0.247ms
Intel SATA SSD

19720/s
0.051ms
Intel NVMe SSD

结论: SATA 盘的 QPS 是 4000, NVMe 的 QPS 是 20000.

如果要开发一个分布式 KV 数据库, 那么对于每一个客户端请求, 至少进行 1 次日志 fsync. 为了提高吞吐量(QPS), 日志模块必须进行 batc

查看全文: http://www.udpwork.com/item/18118.html

+0  C++ Latch 实现

Tag: C/C++语言编程
ideawu 发于 2021年08月26日 21:10 | 点击: 2057 | 展开摘要
Latch(Binary Semaphore) 不同于信号量(Counting Semaphore), 也不同于条件变量, 它是一种合并信号成一个标记的通信方式, 可用于实现 Batch 操作. 例如, 两个线程围绕一个标记, 一个设置(生产者), 一个复位(消费者). 如果标记已设置, 则消费者立即复位然后返回. 如果标记未设置, 则消费者等待标记被设置.

在生产者消费者编程模式中, 生产者产生任务, 任务被加入队列中, 同时通过 Latch 告知消费者. 使用 Latc

查看全文: http://www.udpwork.com/item/18110.html

+0  Mac 看图软件 Tovi 免费下载

Tag: MacOSX
ideawu 发于 2021年08月22日 10:53 | 点击: 653 | 展开摘要
我开发的 Mac 看图软件 Tovi, 支持播放 GIF 动画, 以及用箭头按键浏览上一张下一张. 支持缩放, 旋转, 导出成 mp4 视频等等. Tovi 曾经作为收费软件在苹果 App Store 上售卖, 现在, Tovi 已经免费了.

下载地址: http://tovi.ideawu.com/

Tovi 运行截图:

注意: 启动后, 请将根目录 / 添加到权限列表中(点击"+", Shift + Command + G, 然后输入 '/').

Related

查看全文: http://www.udpwork.com/item/18111.html

+3  生产者消费者模式的系统性能分析方法

Tag: 计算机架构
ideawu 发于 2021年08月21日 12:04 | 点击: 1685 | 展开摘要
前一篇文章介绍了生产者消费者编程模式, 一种非常流行且强大的编程模式. 本文将分析采用这种模式的系统的性能分析方法, 以做性能优化.

系统性能分析主要关注这几个指标:

qps/rps(queries per second, requests per second) - 每秒处理请求数, 也即吞吐量(throughput), 一般也称为处理速度的大小, 通俗也称为性能

latency - 单次请求处理的耗时. 一般关注平均值(avg), 最大值(max), 最小值(min

查看全文: http://www.udpwork.com/item/18112.html

+0  生产者消费者编程模式

Tag: 计算机架构
ideawu 发于 2021年08月15日 09:42 | 点击: 537 | 展开摘要
相信很多人都知道"生产者消费者"编程模式, 也使用过这种模式, 但是, 可能只是本能不自觉地使用过, 未必对这种模式有清晰和深刻的理解. 特别是级联生产者消费者模式, 更是强大无比. 很多人可能没有意识到, Golang 语言的核心思想正是生产者消费者模式, 也即 go routine + channel.

假设有一个功能, 处理某个任务需要进行3个步骤, 那么代码可以这样写:

func worker(t *Task) {
step1(t)
step2(t

查看全文: http://www.udpwork.com/item/18113.html

+0  Paxos 算法难以理解吗?

Tag: 分布式 | Paxos
ideawu 发于 2021年08月11日 21:29 | 点击: 644 | 展开摘要
Paxos 被冠以"晦涩难懂"的恶名, 一方面来源于它自身的定位不清, 边界模糊, 另一方面来源于它并不直接解决工程上广泛的强烈需求. 工程师们需要一个算法(规则, 协议), 用来开发一个分布式多副本系统, 并让多副本对外表现得像一个单一副本的效果(强一致性, 线性一致性, 外部一致性). 坦率地说, Paxos 距离这个需求有十万八千里. 所以, 广大的工程师便认为 Paxos 算法难以理解.

首先, 我们需要理解 Paxos 的算法的定位. 不幸地是, 在这第一步, 我

查看全文: http://www.udpwork.com/item/18114.html

+0  程序设计核心原则: 直观

Tag: IT技术和评论 | 算法
ideawu 发于 2021年08月07日 09:41 | 点击: 549 | 展开摘要
好的代码应该是直观的, 简单的. 直观就是"所思就所写", 想的是什么样就要把代码写成什么样子, 不要七拐八绕.

例如, 在做结构设计和流程设计时, 我们分析出某个功能流程应该这样做:

先做步骤1, 然后做步骤2.

什么是程序设计? 程序设计就是流程, 是串行化, 是先后顺序. 所以, 文档设计完毕之后, 必须写下这样的代码:

step1();
step2();

没错, 就是非常直观的两个函数调用语句, 一眼就能看出有先后顺序, 先 1 后 2. 但是, 初学者往往

查看全文: http://www.udpwork.com/item/18115.html

+0  Paxos 和 Raft 的结构差异

Tag: 分布式 | Paxos | Raft
ideawu 发于 2021年08月07日 09:09 | 点击: 815 | 展开摘要
如果用面向对象的方法来分析 Paxos 和 Raft 的对象层次结构关系, 我们会发现, 两者其实没那么多差异, 或者说, 这种差异我们平时在做面向对象建模和编写代码时经常使用.

Basic Paxos

type Entry struct {
promised_num int64
proposal_num int64
proposal_value []byte
}

Multi Paxos

type Node struct {
entries []struct

查看全文: http://www.udpwork.com/item/18116.html

+0  什么是日志复制状态机?

Tag: 分布式 | 数据库 | Paxos | Raft | 日志复制状态机
ideawu 发于 2021年08月05日 21:37 | 点击: 703 | 展开摘要
日志复制状态机, 也叫复制状态机, 是分布式数据库领域最重要的基石之一. 当前市面上所有实用的分布式数据库, 几乎都是用日志复制状态机技术来实现多副本. 像 MySQL 的主从同步, Redis 的主从同步, SSDB 的主从同步等, 是大家非常熟知的日志复制状态机的例子. 而更复杂的共识算法 Paxos, 以及最流行的分布式一致性协议 Raft, 前者的实现基本离不开日志复制状态机, 后者则是直接以日志复制状态机作为其核心组成.

那么, 什么是日志复制状态机呢? 首先,

查看全文: http://www.udpwork.com/item/18117.html
|<<<1234567>>>| 一共36页, 429条记录