阅读更多
李道兵,七牛云存储首席架构师。他曾是北大化学专业博士研究生,中途毅然转行至自己喜欢的互联网行业。2007年加入金山实验室,2010年加入盛大创新院, 曾先后参与了盛大网盘项目和盛大云项目。2013年,李道兵加入七牛云存储,任职至今。他热爱开源,曾先后担任维基百科中文管理员,Debian Developer,协助维护 iso-codes 等开源软件。他喜欢架构,参与了不少高压力项目的结构设计,推崇高可用,可伸缩,低耦合的架构设计。



问:你是从什么时候开始编程的?为什么没有坚持自己原来的化学专业?

我高中才开始接触到电脑,大学的时候兴趣大增,还找了一份帮人做网站的兼职。研究生阶段专业是计算化学,所以不仅有大量编程的工作(我的课题算法需要自己写,没有现成的软件),还要帮课题组维护一个由几十台Linux服务器组成的集群,所以也积攒了一些 Linux 运维的经验。离开学校后没有继续做化学的一个原因是我没能正常毕业(文章发表不太顺利),最后拿了肄业证书走人;另外一个原因是兴趣转移了,自己的职业规划就是要往软件行业走,所以是否有一份化学的学位证书对我影响不大,所以就没有坚持下去。

问:你认为现在的开源社区环境跟你当初成为Debian Developer时的环境有哪些差别?是否仍然鼓励今天的程序员为开源软件做贡献?

差别挺大的,当时开源软件的最大威胁还是来自大公司的一些不实攻击(特别是微软的一些FUD策略),而现在的最大挑战可能是来自开源软件的主导权问题。主导权是留在社区还是会慢慢变成由公司来主导?GNU组织的影响力也在逐渐下降,大家对开源主导权继续保留在社区的信心也在逐步下降。

我觉得程序员参与开源是好事。一方面开源世界有很多问题需要解决,解决这些问题能倒逼自己快速成长。对于我来讲,如果没有参与开源的话,我的水平会比现在差很多。另一方面是理念方面的原因,我觉得能够贡献一点时间给全人类谋点福利是值得的,特别是在那些可以沉淀下来的事务上。所以我也在维基百科、翻译等项目上贡献过自己的时间。

问:有人认为大量的开源软件其实都是闭源软件公司的广告而已,请问社区主导开发的开源项目和公司主导开发的开源项目有什么本质的区别?这两种方式各有哪些优势?

作为一个开源软件的用户,开源软件给我们提供了一种可能,让我们很方便地使用、研究、改善我们日常的软件,大部分我们的必备软件都算是社区主导的,比如操作系统(Linux), 命令行环境(bash等),编辑器(Vim, Emacs),编译器(GCC),图形界面(GNOME, KDE), 浏览器(Firefox),音视频播放(MPlayer) 等都应该算是社区主导的。只是现在很多新兴的技术逐渐掌握在大公司的手上,比如 Xen, OpenStack, Docker等。

作为一个软件的主导者,我觉得开源提供了一种全新的合作模式,这个合作模式能让软件的发展更顺利,包括 Python, Emacs, Debian 这类的软件都从这个模式获益匪浅。

公司的优势在于可以集中人力,所以在推进方面比较给力(比如 Chromium/Chrome)。开源能够让很多想法充分竞争,最后最有生命力的想法会自然冒出来。比如在命令行环境这个领域,开源方就出现过 sh, bash, ksh, tcsh, zsh 等软件,互相竞争,互相借鉴想法,发展得很好。另外一个优势就是参与感带来的巨大激励,比如开源社区的人更愿意去报告bug,修复bug。相比之下,微软的命令行工具出于保护目的,同时也有投资、改进动力不足等原因,所以一直很难用。

问:你曾先后在金山、盛大创新院、七牛工作,你的足迹和老许基本相同,同时你们也是工作上的好搭档,请问他是否对你造成了某些影响?

那是当然。老许是我认识的人里技术钻研最深的一位,包括 C++, Erlang, Golang 等语言,以及各种高并发模型,还有我们的各个业务的底层模型。我跟老许的选择有一定的互补性,比如我更关注于项目本身,比如项目管理、质量控制、持续集成、持续交付、网络安全这些方面的东西。

问:七牛在2011年成立,而你在2013年才加入七牛,请问你当时是如何加入七牛的?

我2012年离开盛大,加入了一家小公司。大约过了一年,老许请我吃饭,问我是否有兴趣加入七牛,我就直接答应了。毕竟跟老许合作过多次,也知道老许在做一些很酷的事情,所以能加入七牛也是求之不得的事。

问:你曾在一个“七牛为什么要做云存储”的slide中提出过一条理由是“很酷”,请问这种“酷”体现在哪些方面?

对我来讲,存储很酷的原因在于存储之外的其他模块已经逐步平凡化了。Nginx+业务逻辑层+数据库+缓存层+消息队列这种模型几乎能解决所有的业务,再加上最近又从语言层面逐步把高并发的问题解决了,所以只要不涉及到大规模文件上传,大家的架构都会比较类似。

但一旦开始涉及到大规模文件上传,存储就马上转变成架构中最重要的一部分。毕竟对于结构化数据的持久化,我们已经能很熟练地使用数据库、分库、分表、表外索引等技术来支撑数十数百亿的记录,但对于非结构化数据的持久化(即文件存储问题),手边能用的组件都有这样那样的缺点,要么容量不足,要么运维成本太高,要么不支持高可用,要么性能太差。存储作为架构设计中最难啃的一块,能够用云的方式来解决是一个非常漂亮的主意。

常规的 IaaS 平台倾向于把所有东西都放在一朵云上,我觉得应该充分结合不同云的优势。比如把数据库和业务逻辑的部分放在网络覆盖好的8线BGP机房,静态文件和用户上传的文件则要放在流量成本低的普通机房,这样做才更合理。

问:七牛开源了不少项目在Github上,也有很多人在为这些项目做贡献。广泛地参与开源项目为七牛的技术气氛和团队建设带来了哪些好处?

主要是思路的活跃。对于每一个场景,大家都对现有已有的开源解决方案比较熟悉,知道这些项目的优缺点,于是就可以合理利用这些软件。如果是只能用自己写的软件,要么不停地重复造轮子,要么适配上很别扭,降低了组件效率,同时也增加了bug。

问:七牛内部是否有人在鼓励和推进对开源项目的参与(比如你或许式伟)?你们又是如何推进的?

招人是很重要的一环,我们招的人很多都是在 GitHub 有过不少贡献的,这些人已经了解到参与开源项目的好处了,很多人也会持续参与。

另外,我们也鼓励大家把发现的 bug 和引入的补丁回馈到开源社区,特别是我们用的多的 Go 语言、MemCache、MongoDB、FFmpeg这类组件。

当然,控制工作节奏也是很重要的,合理安排工作时间,不仅让大家工作效率高、bug少,也能给大家更多的机会去钻研技术,而参与开源就是钻研技术很重要的一个手段。

问:七牛在持续交付方面有哪些经验可以分享?从持续集成到持续交付,有哪些重要的问题需要解决?

我们的方案算是比较常见的。首先我们用 GitHub 来放我们的代码,用 Travis 来做 merge 前的单元测试。之后又用 Jenkins 来做完整的集成测试,最后是一套我们自己写的部署系统(如果规模小的话,这套部署系统用 Puppet+Capistrano 替代没有任何问题)。

首先,测试方面问题都不大,部署稍微有点麻烦,我们的做法是用一套独立的测试集群实现软件的预发布。其次就是灰度部署的问题,灰度部署完成后如何让开发人员能清晰地判定新版本是否存在bug,这个方面需要很多辅助工具。最后就是多机房、大量机器的程序分发问题。

问:能否详细解释一下你曾提出过的机房云?机房云是否就是七牛现在的一站式数据平台?

机房云是我的一个不太成熟的想法,跟一站式数据平台有点联系,但不是一个东西。机房云的想法主要是针对PaaS平台的一些缺点提出的。PaaS平台试图接管客户的所有业务,但对于大客户来讲,一个没法线上 debug,线上检测性能瓶颈的平台是很难接受的。我很希望一些独立的功能模块能够外包出去,比如数据库、队列、缓存、图片处理、音视频处理、语音识别等。对于这些模块,我希望实现高速访问,那么就不能用简单的 SaaS 平台来满足,而一个贴着机房部署的服务就比较合适了。

对于七牛一站式数据平台,最主要的作用是帮助客户解决如何方便地使用数据的问题。比如围绕图片,就有缩放、裁剪、水印这类常规需求,也有监黄、广告识别等很个性化也很有技术门槛的需求。七牛不会自己来完成每个需求,因为我们首先没有这么多开发力量,也缺少对应领域的技术积累,而且如果每个需求都由七牛来做的话,更妨碍这方面最优秀的服务商的成长。我觉得七牛的最佳做法就是撮合拥有数据的人和能处理好数据的人,我们的目标是降低数据服务的使用门槛,减少接入数据服务的沟通成本,让数据拥有方和数据服务方都能更快地发展。

问:七牛的一站式数据平台的开发现在处于什么阶段?一站式数据平台的技术难点在哪里?

我们已经在针对种子服务商逐个接入了,这个阶段主要还是在摸清接入中可能会遇到的阻碍,以及需要我们调整平台来解决的问题。这个平台的技术难点在于对各个语言的支持、程序的隔离、快速伸缩,以及如何确保客户数据的安全性。

问:为了实现一站式数据平台的愿景,未来还有哪些需要做的?

除了继续改善和稳定平台,还要接入更多的供应商来满足不同客户的需求,设置更灵活的计费方式,建立更多的 demo来降低大家的接入成本,等等。

问:七牛最近推出的鉴黄服务是和图谱科技合作完成的,两个团队各自的分工是什么?在未来七牛还会和什么样的团队继续合作?

图谱科技主要是提供监黄技术,我们的接入平台提供了计算能力支持、伸缩性支持、计费支持。当然,整合的工作量不低,这也是未来我们的重要努力方向,努力让整个接入过程更加自动化,从而加快接入的速度。未来我们会接入更多的处理团队,比如语音识别、面部识别、图片深度压缩、视频指纹、视频深度压缩等等。

问:你很喜欢算法,并且曾经在Topcoder上很活跃,请问你是否推荐其他程序员参与Topcoder或类似社区组织的活动?

我在Topcoder上算不上活跃,成绩也只能算是勉强,不过 Topcoder 对我的帮助很大。在Topcoder上玩,最重要的一个层面在于思路的严密性,你少考虑一个环节,就一点分数都拿不到。当然,在那里我的建模能力,还有视野都得到了很大的提高。我也很喜欢玩过 Topcoder 或者其他算法竞赛的同事,他们的代码出 bug 的概率很小,而且很多地方写得很巧妙,我经常能发现一些对我很有启发的代码。

本文转自:图灵社区
  • 大小: 82.4 KB
来自: 图灵社区
6
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 全面深入Mysql数据库优化

    课程简介 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(关系数据库管理系统)应用软件之一, 广泛的应用在各个领域。本课程作为MySQL高级课程, 主要讲解了MySQL中的视图/存储过程/触发器/索引等对象的使用、常见的SQL语句优化的技巧 、应用优化、数据库优化、数据库日志等方面的知识,并通过综合案例,对课程中的知识进行一个整合应用。本课程旨在通过MySQL高级部分内容,可以在满足现有业务需求基础上,对MySQL底层的体系结构, 及底层的优化有一个深入的理解 , 对系统的整体性能进行提升。简短简介 :  MySQL 是最流行的关系型数据库之一,广泛的应用在各个领域。本课程主要讲解了MySQL中的常见对象,并详细讲解了优化策略,并通过案例使我们深入理解SQL优化策略,学习完本课程使我们能够独立自主的完成各种SQL优化,提升系统的性能。适应人群 具有一定MySQL基础, 对数据库的高级知识、优化方面感兴趣的学员。课程亮点 本课程系统的讲解了SQL优化的思路和实用技巧,并讲解了数据库方面的优化内容, 全方面的对MySQL数据库进行优化。

  • MySQL的优化

    MySQL的优化2001-02-06 5:55 发布者:netbull(本文是Monty在OReilly Open Source Convention 2000大会上的演讲) [晏子 编译整理] 一、我们可以且应该优化什么? 硬件 操作系统/软件库 SQL服务器(设置和查询) 应用编程接口(API) 应用程序 ------------------------

  • 服务器的mysql优化_MySQL优化服务器设置(MySQL优化配置文件)

    解决问题:(主要是InnoDB引擎)理解MySQL部分运行原理?结合MySQL运行原理修改配置文件,优化MySQL服务器?优化原则:MySQL有大量可以修改的参数——但不应该随便去修改。保证基本的配置正确,例如InnoDB的Buffer Pool和日志文件缓存代销,如果防止出问题,就设置一下比较安全和稳健的值,剩下的配置就不用管了。(来自 《高性能MySQL》第八章)一次只改变一个设置!这是测试改...

  • Linux系统MySQL数据库性能优化详细教程。

    请注意,MySQL性能优化是一个复杂的过程,需要根据具体的环境和应用进行调整。建议在进行任何更改之前,备份数据库并测试性能影响。希望这个教程对您有所帮助。如有任何疑问,请随时提问。

  • MySQL查询性能优化——SQL优化(四)

    sql语句优化

  • 解锁MySQL性能瓶颈!超实用的10种优化方法大揭秘

    本文涵盖了索引设计、SQL查询优化、缓存配置、并发控制等多个方面。读者可以通过阅读该文章,了解如何有效地解决MySQL性能问题,并提升系统的响应速度和稳定性。 以上仅为MySQL性能监控和调优的一些常用方法,实际应用中还需要结合具体场景和实际需求来选择和优化相应的策略。建议在进行性能优化前,先对数据库系统进行全面的评估和分析,并考虑合适的监控工具和方法。

  • rocky(Centos) yum 安装mysql,切换路径、优化配置,不关SELINUX 并设置开机自启

    1、安装方式介绍 mysql安装共3中方式 1)yum安装,最简单的方式 2)rpm包安装,切记下载相应系统的 稳定版 源码包,相对较简单 3)压缩包安装:自由度高,但配置相应复杂,且需要自己注册自启服务 注:1,2,3无法在一台机器上共存, 1,2可以通过mulit-mysql启动多个服务看,但无法实现:单机上的myql主从 只有3方式支持1台安装多个mysql服务,实现mysql主从 一、安装步骤 1.获取最新的yum rmp包地址 下载地址:MySQL :: MySQL Commu

  • linux修改mysql占用内存_linux 下怎么优化mysql占用内存

    linux 下怎么优化mysql占用内存修改mysql配置文件,优化缓存大小和连接数连接方式,优化sql语句 ,记得mysql好像是有工具可以查看最占用资源的sql语句,找,优化他。安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf...

  • linux一些基础命令以及如何在服务器上安装python2的一些常用模块

    linux 基础命令 linux 目录命令 注:text为目录;/ 为根目录 ;. ./ 为上级目录 cd :切换目录;cd text 进入text目录下 cd . . / 返回上级目录 cd /进入根目录 ls -ld :显示目录的详细信息;ls -ld text查看text目录的详细信息,包括目录权限 mkdir :创建目录;mkdir text/opt 在text目录下创建opt目录 pwp:显示当前目录的路径 rm -rf :删除;rm -rf opt 删除opt目录不提示,rm -r o

  • 8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务

    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务在MySQL 5.6.4,InnoDB 能避免设置事务ID相关的开销(TRX_ID field),被称为只读事务。一个事务ID 是需要的 对于一个事务需要执行写操作或者SELECT … FOR UPDATE操作。减少不必要的事务IDs 会降低内部数据库结构的大小。目前, Inno

  • mysql优化系列(七)- 性能问题+虚拟机配置与linux安装mysql

    文章目录前言一、centos安装二、性能问题因素三、mysql性能因素四、 配置虚拟机五、Linux安装mysql8.0六、Linux查询性能的常用命令七、Linux管道八、mysql性能查询的命令总结 前言 什么是性能问题? 对于用户来说:“又卡了”,“怎么死机了”,“反应太慢了”。 对于程序员来说:“程序执行的时长”,“每秒查询的次数”,“内存,CPU的利用率”。 性能优化的目的:(合理利用可利用的资源)俗称:抠门。 吞吐量,越大越好 延迟,越低越好 同样的资源下(前提),吞吐量越高越好,响应..

  • Linux时间前调对mysql的影响_MySQL 优化之 Linux系统层面调优

    MySQL 一般运行于Linux系统中。对于MySQL的调优一般分为Linux操作系统层面的调优和MySQL层面的调优(当然还有架构层面、业务层面、应用程序层面的调优)。操作系统主要是管理和分配硬件资源,所以其实系统层面的调优包括了硬件的调优,也就是调整硬件参数。Linux系统层面的调优一般分为 CPU的调优、内存的调优、磁盘的调优、网络的调优、Linux后台service调优等等。1. CPU ...

  • linux运维笔记:LNMP之深度优化MySQL

    9)读取数据时,只选取所需要的列,不要每次都SELECT * 避免产生严重的随机读问题,尤其是读到一些TEXT/BLOB类型,确实需要的话,建议拆分到子表中,不要和主表放在一起,避免SELECT *的时候读性能太差。2.将vm,dirty_background_ratio设置为5-10,将vm,dirty_ratio设置为它的两倍左右,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待。innodb_additional_mem_pool_size #小于2G内存的机器,推荐值是20M。

  • LINUX上MYSQL优化三板斧

    现在MySQL运行的大部分环境都是在Linux上的,如何在Linux操作系统上根据MySQL进行优化,我们这里给出一些通用简单的策略。这些方法都有助于改进MySQL的性能。  闲话少说,进入正题。   一、CPU 首先从CPU说起。  你仔细检查的话,有些服务器上会有的一个有趣的现象:你cat /proc/cpuinfo时,会发现CPU的频率竟然跟它标称的频率不一样:

  • MySQL优化

    一、Linux中如何安装MySQL -YUM 1、检查Linux中是否已经安装了MySQL rpm -qa | grep mysql 2、卸载原来的mysql相关的服务 rpm -e --nodepsxxxxxxx 3、确定mysql的yum源的版本 yumlist |grepmysql...

  • Linux高负载下优化MYSQL

    <br />内容比较多。放在这里备查。<br /> <br />同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。<br /><br />安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large

  • MySQL中级优化教程(九)——Linux服务器软硬配置优化

    系统配置优化: 数据库是基于操作系统的,目前大多数MySQL都是安装在了Linux系统之上,所以对操作系统的一些参数配置也会影响到MySQL的性能,下面是一些常用参数: 网络方面配置:要修改/etc/sysctl.conf文件 在开发过程中,或许我们经常会遇到这种连接:time out... time wait等,这时我们就需要对下列配置参数进行优化: #增加tcp支持的队列数 ne...

  • Mysql高级 [Linux版] 性能优化 数据库系统配置优化 和 MySQL的执行顺序 以及 Mysql执行引擎介绍

    不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表支持3种不同的存储格式,分别是:静态表;动态表;压缩表静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。

  • linux的mysql优化_Linux环境MySQL服务器级优化讲解

    服务器参数的选择服务器有几个能够改变从而影响其操作的参数(或称变量)。系统变量的当前值可以通过执行mysqladmin varibles命令来检查,其中几个参数主要与查询有关,有必要在此提一下:delayed_queue_size此参数在执行其他 INSERT DELAYED 语句的客户机阻塞以前,确定来自 INSERT DELAYED 语句的放入队列的行的数目。增加这个参数的值使服务器能从这种请...

Global site tag (gtag.js) - Google Analytics