Skip to content

Instantly share code, notes, and snippets.

@xiaoronglv

xiaoronglv/笔记.md

Last active Jan 12, 2018
Embed
What would you like to do?
Teahour: 和 PingCAP CTO 畅谈数据库和编程语言 http://teahour.fm/2017/11/22/new-database-go-and-rust-with-cto-of-pingcap.html

Teahour: 和 PingCAP CTO 畅谈数据库和编程语言

http://teahour.fm/2017/11/22/new-database-go-and-rust-with-cto-of-pingcap.html

前一个小时在地铁上听完,没做笔记。

---- 1 hour ----

What is tiki?

...

对MySQL 的支持:parser 是直接复用MySQL的呢?还是去重写?

我们自己完全重写了sql parser。

  • MySQL 很老,文法文件真的是太难读懂了。
  • 我们想用 go 去重写,而不是C++ 去重写。

如何保证go的版本和C++的解析器的结果是一致的呢?

我们复用了 MySQL的集成测试代码。我们有2000万个MySQL的测试。甚至有个爬虫专门爬 MySQL 的测试代码。

MySQL 未来新开发的feature,你们会去兼容吗?

符合时代潮流的feature,我们会去兼容。

但一些过时的陈旧 feature,我们不打算去兼容,比如存储过程。 storage procedure。(TODO: 什么是存储过程?)

很多社区都劝用户迁移到 PostgreSQL,你怎么看?

PostgreSQL

优点:

  • PostgreSQL是更先进的设计
  • 是学院派设计的数据库
  • 代码的优雅程度更高

缺点:PostgreSQL 对生产环境(工业界的)的实际问题重视程度不够高。

MySQL

MySQL 虽然不是最好的。但是有很大的社区 / DBA团体 / Expert,出了问题更容易解决。

我兼容MySQL 是因为它user数量更多,没有别的原因。

MariaDB,Percona,你怎么看?

Percona 是服务公司,卖服务。

MariaDB 是数据库内核公司。

我们更像MariaDB。

Oracle 是怎么赚钱?

Oracle 现在不太在意OpenSource的软件,他的客户都是银行/政府/世界五百强,他们已经被 lock in,坐着也能赚钱。

但是过一段时间他不得不重视,因为现在的企业做新项目时,不会再盲目的选择闭源的产品。

抛开市场不谈,Oracle 的性能真的是那么厉害吗?

单机版本确实很领先,很厉害 (领先别人10年?)。(注:真的有这么厉害吗?)

现在的趋势,越来越多的人只是把数据库看成一个CRUD的存储中心。并不关心逻辑,逻辑越来越放到上层建筑,而不是存储过程。

question: 什么是存储过程? http://www.cnblogs.com/liushuijinger/archive/2012/06/18/2554057.html

为什么 Oracle 的专家鼓吹大家使用Oracle的存储过程?

专家:你不要把逻辑放到代码里,而是放到Oracle的存储过程里。

  • Oracle定义了存储过程的规范
  • 一旦你使用了这个规范,就被Lock in了,很难再使用其他系统。

当你有一天决定重构时,发现已经离不开了。它提供的每一个贴心功能都是「陷阱」。

黄东旭的 hunch

外行的人可能感觉不到,但是作为一个数据库从业者,我有这种感觉,我们处于时代的交叉点。

单机数据库和分布式数据库,表面上看似乎区别不大,底下的理论/实现,完全不一样。

如果我们不去做,别人也会去做,这是未来。

在新时代,使用数据的mindset应该是什么?

系统越来越复杂,社会分工会越来越细,未来越来越少的人会变为全栈工程师,

但是系统会分层,层与层之间的interface会更加人性化,工作会更加的开心。

Terry: 云发展的趋势, serverless?

agree:

  1. linode时代:卖机器
  2. heroku
  3. amazon lambda

google cloud platform 上也可以使用spanner,会成为你的竞争对手吗?

小客户的话,鼓励你使用。

大客户的话,除了考虑技术问题,还要考虑数据的问题。防止被lock in。(注: 我所有的数据都绑定在某个云上,就不具备议价能力,就很难再迁移到google上。)

测试分布式系统,你们是怎么做的?

有一个转账系统,7x24小时的跑,转账来,转账去。某个节点的网络故意让它延迟10s,或者出错。看最终的账户的 balance是否一致。

如果不一致,是stability的bug,P0级,比 customer issue 还要高!

我们发明了一个分布式的系统去跑。一开始我们跑一个测试要2个小时,现在是7分钟。

工具的选择

  1. jepsen

  2. Namazu, A programmable fuzzy scheduler for testing distributed systems (formerly named Earthquake)

  3. 分布式系统测试最难的地方是,很难 reproduce 一个bug,只能提高reproduce 一个bug的概率。

在国内做开源,有什么困难吗?

  1. 早期有些中国用户提的issue是中文的,我们要帮他们翻译为英文的。

  2. 内部讨论稿是中文的,release 出去时,必须中英文两份。

  3. 所有的工程师都必须无障碍的使用英语。

  4. 我们有一个 tech writer 的岗位,去写 docmentation。 一开始似乎你觉得没什么,但是在中后期时特别受益,越来越多的国际上的同行变为 commiter。

  5. 我们的投资人一开始不理解:既然你们技术这么好,为什么要开源?不怕被偷走吗?这个问题被问了无数次。

    • 你如果没有积累,你根本看不懂,也走不对。
    • 我们控制着 roadmap,这才是生命力。
    • 我们是国内一家完全依靠open source 独立生存公司,这是一个伟大的尝试。

关于中国工程师的质量

在硅谷,做 infrastructure 很多都是华人(一半?)。中国的技术能力已经越来越强,我们公司的出现是一个必然。

公司内员工和公司外社区提交代码的 workflow 是一样的吗?

几乎完全一样。

  • 至少有两个 committer 去review
  • maintainer 才是有权限的人去merge。
  • 如果reviewer 没有同意,merge 的button是灰色的,通过强制的流程来约束人,避免犯错误。

内部协作

公司内员工提交代码,和公司外committer 提交代码的唯一的区别,内部有slack讨论。

  • 我们是一个远程协作的团队,硅谷,北京...
  • 完全是github flow,很多人加入 TiDB时,完全就是 committer。
  • 同一个城市,如果超过4个人,我就会给他开一个办公室。

开发团队可以remote,销售团队也可以 remote 办公吗?

大客户都在北京/上海/深圳,我们的 sales 主攻几个大城市就可以了。

你们有多少 committer?

TiDB: 160个人, 80% 代码是我们内部的。

MySQL: 1000+,maybe?

社区里的 contributer ,国内,国外有多少?

一半一半。

但几个比较大的贡献是这几个公司作出的:

  • 三星 labs
  • Mobike
  • 今日头条

他们是客户,用户,贡献者。这就是开源的魅力。

你们怎么招聘到如此多的有开源精神的员工?

  • committer
  • 我们并不找人,而是他们主动找我们。有人发现这个项目很有趣后会主动投简历。通过这个渠道招到的人还挺多的。
  • 我们不需要 on site。 50%在办公室。

code style 如何保证?

  1. go/rust 都有标准的 style。

  2. CI会check 变量命名规则。

  3. code quality 最终由 reviewer 来保证。

你们为什么没用C或C++ 写database,而是用go和rust?

职业经历

我过去都是用C++,维护过大中小项目很多。对与C++ 坑有深刻印象。

刚开始做后端用的是python,也尝试过 erlange,后来是go:

  • 语法和python相似
  • performance很棒
  • 异步编程模型很棒
  • 开发 TiDB时,单机performance 没有集群的performance 重要,稳定性和开发效率是第一位的。

go 的性能问题?

存储层和解析器是分开的。 go 在写存储层时,performance 还是不能把操作系统压榨到极致。

  • 存储的底层数据结构是 The Log-Structured Merge-Tree (LSM Tree),在内存里维护 LRU 缓存池。
  • go 把system write 抹掉了,你无法touch到操作系统的write。
  • go 的CPU开销比C 和 C++ 高 20%

我们要把操作系统的资源全部榨干,所以用rust写存储层。

rust 会是在操作系统层面C++ 的强大对手

  • 开发效率比C++高
  • 不用担心悬挂指针的问题
  • 不会写出内存泄漏的代码
  • 现在是21世纪了,该用点现代语言了。

rust 类型系统是图灵完整的系统。

(注释:什么是图灵完备?)

go 和 rust 血统

go 的发明者深受 linux 编程艺术的影响:简单,更加符合软件工程的哲学。

rust 的团队是学术氛围很浓。

Terry : go 和 rust 社区都在打架一样,哈哈。

rust 的库不完备

  • 标准库要用的都有。
  • 但很多 library 没有实现,比如 grpc。所以我们包了c的代码。rust在这一点做的很好,没有任何性能的损耗。

Howard: go 已经抢了C一大块业务,rust是替代C的语言,那么rust 到底可以干什么呢?

榨干整个操作系统的最后一点能力。比如操作系统内核,驱动,存储,浏览器内核。

Dropbox 关于storage 技术实现

一开始是 Python,它是一家python 公司。

后来用go 重写。

最后又用rust 重写。

https://news.ycombinator.com/item?id=11283758

我们日常开发对程序员的要求

  • 所有的程序员都必须熟练的使用 go
  • 对于需要写rust 模块的程序员,只要不反感,愿意去学,1个月就可以上手。真正的好的开发者优秀的品质,他不害怕,愿意接受任何挑战,而且很兴奋。
  • 大部分人都是写go,只有10个人在写rust。

大教堂与集市

https://book.douban.com/subject/25881855/

关于英文,你怎么看?优秀的程序员是不是一定要英文好?

...

有腾讯的一个朋友说,区块链不就是一个分布式的数据库系统吗?你是如何看待区块链?

表面上看就是一个 raft ,解决分布式的一致性问题。

https://en.wikipedia.org/wiki/Raft_(computer_science)

但是实质上的侧重点不一样的。

....

黄东旭推荐

  1. 大教堂与集市

  2. UNIX编程艺术

Amazon Paper

  1. Dynamo: Amazon’s Highly Available Key-value Store

Google Paper

  1. GFS big table
  2. Map reduce

Facebook

  1. Needle in a haystack: efficient storage of billions of photos

  2. Scaling Memcache at Facebook

Howard 推荐

  1. 乌龙派出所

Teahour 在本期的页面上的推荐

  1. Code Rush

  2. 操作系统革命

  3. 硅谷传奇

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.