自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陶辉:聚焦分布式系统的程序员

智链达CTO,《深入理解Nginx》作者

  • 博客(88)
  • 资源 (2)
  • 收藏
  • 关注

原创 在这里,NGINX 创始人 Igor Sysoev 将亲述 NGINX 的诞生史

2020 年 5 月 20 日,一场 NGINX 在国内的盛会、一个所有 NGINX 用户 & 爱好者朝圣的最佳场所,F5 线上技术峰会 – NGINX 专场将以线上直播的形式面向所有开发者召开。届时各位 NGINX 开发者心目中的偶像 NGINX 创始人 Igor Sysoev 以及国内 NGINX 技术专家陶辉老师将空降大会现场,从 NGXIN 创始人的成长经历出发,帮助每一位开发者...

2020-04-30 08:46:31 1855

原创 这16年来我是如何做系统性能优化的

2019年下半年,极客时间总编辑郭蕾从北京飞来杭州,问我有什么特别想分享给大家的技术。我回顾了下自己这16年来的工作经历,发现无论在华为、腾讯、思科、阿里,我都在与海量数据打交道,这个过程中对性能优化有许多思考,但一直没有系统的写下来。于是我就跟郭蕾说,那就针对分布式系统,讲讲我心中的性能优化方法论吧。这就是这门课的诞生过程啦。这是一门与具体编程语言无关的课,前端、运维也可以学。我希望可以把我...

2020-04-27 18:54:31 3798

原创 HTTP性能极限优化

无论你在做前端、后端还是运维,HTTP都是不得不打交道的网络协议。它是最常用的应用层协议,对它的优化,既能通过降低时延带来更好的体验性,也能通过降低资源消耗带来更高的并发性。可是,学习HTTP不久的同学,很难全面说出HTTP的所有优化点。这既有可能是你没好好准备过大厂的面试:-),也有可能你没有加入一个快速发展的项目,当产品的用户量不断翻番时,需求会倒逼着你优化HTTP协议。这篇文章是根据...

2020-01-13 09:38:24 7820 1

原创 巧用 Nginx 实现大规模分布式集群的高可用性

本文是我对2019年GOPS深圳站演讲的文字整理。这里我希望带给各位读者的是,如何站在整个互联网背景下系统化地理解Nginx,因为这样才能解决好大流量分布式网络所面临的高可用问题。标题里有“巧用”二字,何谓巧用?同一个问题会有很多种解决方案,但是,各自的约束性条件却大不相同。巧用就是找出最简单、最适合的方案,而做到这一点的前提就是必须系统化的理解Nginx!本文分四个部分讲清楚如何达到这一...

2019-08-09 08:28:17 3158

原创 一文解释清楚Google BBR拥塞控制算法原理

BBR对TCP性能的提升是巨大的,它能更有效的使用当下网络环境,Youtube应用后在吞吐量上有平均4%提升(对于日本这样的网络环境有14%以上的提升):报文的往返时延RTT降低了33%,这样如视频这样的大文件传输更快,用户体验更好:不像CUBIC这种基于丢包做拥塞控制,常导致瓶颈路由器大量报文丢失,所以重新缓存的平均间隔时间也有了11%提升:在Linux4.19内核中已经...

2019-08-07 09:07:14 8924 3

原创 如何快速掌握HTTP协议?

HTTP 协议极其庞杂,它影响着浏览器、爬虫、代理服务器、防火墙、CDN、Web 容器、微服务等诸多方面,自身的规范却并不统一,所要面对的各类软件的新旧版本也同时存在于网络上。在这种情况下,如果对 HTTP 没有一个深入的理解,就很容易被各种各样的网络问题难倒。那么,如何才能快速掌握HTTP协议呢?在我看来,需要从以下四个方面入手:工欲善其事,必先利其器,首先我们先要掌握好抓包及相关的...

2019-05-12 14:56:01 1806

原创 为什么要出web协议这门课

我们公司有定期的分享课,好几位开发部的同学–包括android原生、JS前端、python后端–要求我分享网络协议方面的知识,我做过两场培训,一个是讲TLS/SSL协议,一个是讲HTTP协议的设计原则,结果培训完大家反馈有收获,但是太难了,收获又不是很大。我总结大家学习效果不好的原因后得出:1、必须由浅入深,才能让团队中的新人快速成长;2、必须系统化、体系化的讲解;3、必须实时配合抓包...

2019-05-06 08:34:03 893

原创 《数学之美》与算法

原文链接:https://www.taohui.pub/2019/02/23/%e3%80%8a%e6%95%b0%e5%ad%a6%e4%b9%8b%e7%be%8e%e3%80%8b%e4%b8%8e%e7%ae%97%e6%b3%95/《数学之美》是一本非常好的算法进阶书,它与吴军老师从事的工作领域密切相关,所以工程性很强。半年时间断断续续读完此书,这里做个笔记,也希望能帮助还未读过本书...

2019-02-23 18:02:13 2601

原创 《Nginx核心知识100讲》资料

 与《深入理解Nginx:模块开发与架构解析》这本书不同,这门课只是从使用层面来讲Nginx,不会讲模块开发,不会讲源码,但会讲到Nginx架构、模块实战、性能优化(包括Linux系统)、Openresty等。课程知识点架构图如下:所有课件、编译参数、nginx.conf配置文件参见github:https://github.com/russelltao/geektime-nginx最...

2019-01-16 15:22:57 10167

原创 如何高效的主持会议

达利欧《原则》谈到“如果由你主持会议,应把握好对话”,深有感触,主持好会议不容易,这需要各种综合能力:时间管理、冲突管理、同理心、对企业文化的理解、集体心理学、强大的逻辑分析能力等。这里我以达利欧的建议为主线,谈谈我的个人理解。1、明确主持人及会议服务对象会议一定要以实现负责人的某个目标为目的!比如,我有一个方案,但我不确定它是否足够完备、合理,那么我的目的就是找持有不同意见的权威人士坐下...

2018-10-21 17:32:03 1575

原创 利用cpu缓存实现高性能程序

我们选购电脑时,CPU处理器的配置会有缓存大小,它是CPU性能的重要指标。为什么呢?因为CPU计算速度与访问主存速度非常不匹配!先来看计算速度。单颗CPU计算速度目前在2GHz-4GHz之间,以2.5GHz计即每秒钟计算25亿次,每个时钟周期耗时1/2.5GHz==0.4纳秒。当前所有的计算机都遵循冯诺依曼结构,所以执行任何指令(例如加法操作)的流程必然遵循下图:所以,做一次加...

2018-09-05 08:51:45 5043 4

原创 前端程序员如何快速转型全栈工程师(基础版)

前端与后端的思维专注点很不相同,前端聚焦在如何把内容以可视化的方式展现给用户,后端聚焦在如何利用IT基础设施实现业务逻辑。所以前端参与后端开发时(全栈工程师必备!)首先需要理解后端会做哪些事,其次才是如何才能做好这些事。所谓“利用IT基础设施实现业务逻辑”,意味着以下几个概念:IT基础设施有哪些?数据库一定是最重要的,这里特指关系数据库,例如mysql。因为前端所用的数据库往往非常简单,...

2018-09-04 07:50:14 46331 15

原创 产品思维的修炼–技术的必修课

作为写了十多年代码的技术表示:产品思维比程序员们想象中重要得多!掌握了产品思维的程序员能力可以double!我把产品思维的养成要点,从我的认知上提炼了下,供大家参考。理解产品思维前,首先需要了解产品经理是一群什么样的人;其次我们再来看产品思维的本质;再次看看程序员们的技术思维有什么特点;最后谈谈技术人员如何具备产品思维。1、产品经理是一群什么样的人?1)产品经理必须能保护技术人员!...

2018-07-25 08:15:38 3632 3

原创 CSDI2018广州关于《Nginx》的分享(附文字速录与PPT)

应百林哲笑含的邀请,于2018.6.9号至7.1号前往广州白云国际会议中心参加《CSDI Summit 中国软件研发管理行业技术峰会》。会上认识了很多互联网一线老师是最大的收获:本次我分享的主题是《兼顾灵活与性能的nginx》:意外的惊喜是CSDI的讲师证书非常精美:最后附上本次演讲的PPT内容:兼顾灵活与性能的nginx以下为文字速录内容:大家好,我是杭州市智链达数据有限公司的联合创始人和CTO...

2018-07-11 14:29:55 2051 2

原创 分布式环境Raft一致性共识算法解读

Raft是分布式环境下的一致性算法,它通过少数服从多数的选举来维持集群内数据的一致性。它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBFT则能容忍BFT节点的存在。Raft非常类似于paxos协议(参见我的这篇文章《paxos算法如何容错的–讲述五虎将的实践》),然而它比paxos协议好理解许多(因为paxos协议难以具体实现,所以zookeeper参考paxos实现了它自...

2018-06-03 16:16:32 19108 1

原创 区块链开源实现hyperledger fabric架构详解

hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM、Intel、各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量。本文中我们依次讨论:区块链的共通特性、fabric核心概念、fabric的交易执行流程。本文来源于笔者欲对公司部分业务上链而进行培训的PPT,故图多文字少,不要怕太长。1、区块链解决方案的特性1.1 分布式帐本区块...

2018-05-26 10:34:44 100527 27

原创 区块链开源实现fabric快速部署及CLI体验

本文描述fabric快速部署的步骤,及演示基于官方example02的智能合约进行CLI命令行体验。区块链涉及服务很多,且大量使用docker容器技术,所以请严格遵守以下步骤去部署,以减少各种问题的出现,方便我们先对联盟链有个大概的感觉。本文描述环境是centos7操作系统,请其他版本更正相关的安装工具(如ubuntu操作系统请把yum命令换成apt-get)。1、搭建e2e_cli环境快速部署f...

2018-05-22 09:53:41 5887 5

原创 从码农到工程师:只要做到这6点

许多程序员自称码农,因为每天事情总也做不完,而这些工作也没有给自己带来职业上的提升,总在原地打转,自己的工作似乎随时可被新人替换,可有可无。于是,年轻些的考虑着转管理或者转行,年纪大些的则被所谓的40岁危机困扰焦虑着。另一方面,有些程序员工作高效,能力出众,每当机会来临时总能获得职位上升,收入迅速的提高,个人价值的提升又从精神上给自己带来满足感,常常斗志昂扬,而这样能解决复杂问题的程序员才叫工程师...

2018-04-21 09:07:51 5564 20

原创 深入浅出人脸识别技术

在深度学习出现后,人脸识别技术才真正有了可用性。这是因为之前的机器学习技术中,难以从图片中取出合适的特征值。轮廓?颜色?眼睛?如此多的面孔,且随着年纪、光线、拍摄角度、气色、表情、化妆、佩饰挂件等等的不同,同一个人的面孔照片在照片象素层面上差别很大,凭借专家们的经验与试错难以取出准确率较高的特征值,自然也没法对这些特征值进一步分类。深度学习的最大优势在于由训练算法自行调整参数权重,构造出一个准确率...

2018-04-19 11:07:59 3428

原创 Udp的反向代理:nginx

在实时性要求较高的特殊场景下,简单的UDP协议仍然是我们的主要手段。UDP协议没有重传机制,还适用于同时向多台主机广播,因此在诸如多人会议、实时竞技游戏、DNS查询等场景里很适用,视频、音频每一帧可以允许丢失但绝对不能重传,网络不好时用户可以容忍黑一下或者声音嘟一下,如果突然把几秒前的视频帧或者声音重播一次就乱套了。使用UDP协议作为信息承载的传输层协议时,就要面临反向代理如何选择的挑战。通常我们...

2018-04-19 11:05:44 5166 1

原创 GIT仓库代码统计

虽然以代码行数来衡量项目或者程序员并不是一件靠谱的事,但是从统计角度看趋势对于技术管理人员还是很有帮助的!推荐一个比较好用的git仓库代码统计工具:git_stats,它用于按git提交人、提交次数、修改文件数、代码行数、注释量在时间维度上进行统计,亦可按各文件类型进行简单的统计,非常方便。实际上,这么多功能通常都是用WEB在多个页面上显示的,git_stats也是如此,它需要你先安装好ruby以...

2018-04-17 21:15:59 6872

原创 《见识》读书笔记:大家智慧

周末抽空在读吴军老师的《见识》,今天在读“大家智慧”章节时对商业的一些看法有所感,在此记录一二。吴军提到拉里佩奇的商业智慧是从本质中寻找商业模式。这个本质就是将有用的信息带给用户,想做到这一点其实挺难的。比如百度,你想搜索对你有用的信息,比起google来需要更多的技巧,添加更多的关键字。为什么呢?产品的商业价值在影响着这一点,百度的竞价排名里认为你需要综合考虑百度的利益,所以结果展示不会以对你有...

2018-04-07 18:08:44 2332

原创 详解python django面向关系数据库的ORM对象映射系统(1)

django是一套开发成本低、迭代周期快的python web框架,而如mysql等关系数据库则是网站的必备组件,django通过设计一套python对象与数据库表的映射系统ORM,使得开发者不用写一行SQL语句就能实现极其复杂的关系数据库操作,特别是关联多张表的SQL操作。这让开发者的精力可以放在业务的迭代实现中,忽略SQL细节,同时提供了还不错的SQL语句性能。本文主要分析该ORM系统的实现原理及其设计思路,顺带描述python元类这个“黑魔法”。接下来,我们首先描述django model的一般用法,

2017-12-18 14:09:57 5472

原创 BDTC2017北京大数据技术大会参会心得

《基于GPU的性能建模与分布式深度学习框架评价》是在GPU训练性能上讨论了benchmark分析方法。从CPU到GPU后,训练时间降低了一些,但能降得更多些吗?换成多块GPU显卡,可以再下降吗?应当采购什么样的显卡,性价比最好?这场分享回答了以上问题。我们如何设计网络模型,以使得GPU可以满载呢?这里要引入一个指标OI(operational insensity),它表示计算量除以带宽FLOPS/BYTES。例如:求两个向量的点积,每个向量含n个float变量,那么计算量是2n,读写字节数是2*n*4

2017-12-13 16:35:55 3024

原创 区块链技术学习笔记

上周末参加了一个区块链技术培训班,大致搞明白了以下问题:1、比特币为什么会衍生出挖矿、矿机这套产业链?为什么那么多人炒币?2、公有链、联盟莲、私有链的区别在此做个简单分享。1、比特币这种公有区块链的技术支撑实际上大量做服务器端开发的程序员,都对zookeeper有些熟悉,当我们为一个分布式集群寻找一致性解决方案时都会想到它。zookeeper实际使用了paxos的简化版算法(如果试图说清楚这个算法

2017-07-04 09:49:01 4026

原创 API的接口变迁

最近前端团队对于目前API接口的不满开始增多,所以我也借此重新理一下我们的API接口。API没有什么完美的设计理念和原则,只有最适合当下的设计。这个最适合包括:当前使用的技术架构、团队规模、团队成员技术特点、开发时间、人力成本、未来业务与技术的预期等。我先来回顾下我们产品的API变迁过程。作为从0到1的创业公司,客户、CEO提出的需求是全新没有产品先例可以参考的,故首先要验证产品原型,而最初只有我

2017-05-29 12:06:32 1996

原创 阿里云搭建wordpress生产级CMS网站实践

搭建cms内容站点时,wordpress是一个很好的选择,不用做任何开发就可以通过配置、插件获得丰富的功能。用docker容器技术部署运维都非常简单,特别是对于wordpress这种我们无需做任何开发的组件。而出于低成本考虑,公有云都是一个最佳选择,这里我选择的是阿里云。为了提速,wordpress前会有一个nginx作为负载均衡和web加速服务器,将静态内容都由nginx处理。出于高可靠性,我选

2017-01-09 19:26:41 5009 1

原创 django中ModelForm多表单组合的解决方案

django是python语言快速实现web服务的大杀器,其开发效率可以非常的高!但因为秉承了语言的灵活性,django框架又太灵活,以至于想实现任何功能都有种“条条大路通罗马”的感觉。这么多种选择放在一起,如何分出高下?我想此时的场景下就两个标准:1、相同的功能用最少的代码实现(代码少BUG也会少);2、相对最易于理解,从而易于维护和扩展。书归正传,web服务允许用户输入,基本上要靠表单。而dj

2016-10-10 18:18:45 17022 2

原创 专访阿里陶辉:大规模分布式系统、高性能服务器设计经验分享

http://www.csdn.net/article/2014-06-27/2820432

2014-06-30 16:38:14 9718 2

原创 信号处理方法的问题

这周有位新同事请我帮忙看一个关于信号处理的问题,程序希望在收到一个信号后退出,而他在信号处理方法里却做了许多事,包括释放一些全局内存等。这样问题就产生了,程序不定时的就挂死了,用gdb一看,所有的线程都挂在了pthread_once方法里,而似乎每个线程都在处理信号,其中产生问题的线程堆栈如下:Thread 1 (Thread 0x7f41252f3720 (LWP 31542)):#0 0x00

2014-05-15 11:29:33 10713 4

原创 taohui.org.cn建站历程

用云服务器+linux+nginx+python+django+mysql+memcached搭了个人网站,用万网域名加阿里云备案完成,使用多说作为评论系统,以RST作为博客录入格式。欢迎大家光临。

2014-02-27 19:12:35 9055 7

原创 高性能网络编程7--tcp连接的内存使用

当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。操作系统里可配置的、貌似跟TCP内存相关的设置项却很让人疑惑,例如,tcp_rmem[2]和rmem_max似乎都跟接收缓存最大值有关,但它们却可以不一致,究竟有什么区别?或者tcp_wmem[1]和wmem_default似乎都表示发送缓存的默认值,冲突了怎么办?在用抓包软件抓到的syn握手包里,为什么TCP接收窗口大小似乎与这些配置完全没关系?这篇文章将为应用程序开发者系统描述TCP的内存。

2014-01-23 17:47:28 45832 24

原创 高性能网络编程6--reactor反应堆与定时器管理

在大数据和云计算时代,我们对服务器的处理能力要求越来越高,需要它处理几十万并发连接下,还能维持非常高的TPS。此时就必须用到epoll这样的IO复用,但直接基于它编程在软件工程层面效率是非常差的,我们需要一个网络模型、设计模式,来简化应用编码,反应堆就是这么一个东东。

2013-12-20 19:37:23 26259 10

原创 《深入理解Nginx》第2版修订前读者意见征求帖

最近编辑lisa和我讨论《深入理解Nginx》这本书第2版的出版事宜,我想还是以读者的需求为主,请读者朋友们在这里回复你们觉得:有哪些第1版书中内容有些啰嗦,可以精简的?有哪些内容说得不够详尽,需要增加篇幅的?有哪些Nginx的新变化,在第1版中没有相关内容的出现,需要在第2版中涉及的?有哪些章节的顺序不太合理,有些应该放在前面更容易理解?或者其他意见,尽请提出。谢谢大家

2013-12-16 11:56:15 6373 20

原创 高性能网络编程5--IO复用与并发编程

开发基于TCP协议的高性能服务器时,能够处理的并发连接数是一个重要指标。为了实现高并发,前辈们在开发效率与执行效率上的不同权衡下,提供了多种实现方式。IO多路复用,这是最纯正、本质的方法,它也是追求执行效率最大化时的最佳选择。本篇简要描述了IO复用与并发编程间的关系,希望对做应用程序开发的同学们有所帮助。

2013-12-04 15:57:24 32498 9

原创 高性能网络编程4--TCP连接的关闭

TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理?4、so_linger这个功能的用处在哪?5、对于监

2013-10-26 12:24:23 21823 4

原创 高性能网络编程3----TCP消息的接收

1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的?2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(SO_RCVTIMEO)或者接收到len长度的消息,recv方法才会返回吗?而且,socket上可以设置一个属性叫做SO_RCVLOWAT,它会与len产生什么样的交集,又是决定recv等接收方法什么时候返回?3、应用程序开始收取TCP消息,与程序所在的机器网卡上接收到网络里发来的TCP消息,这是两个独立的

2013-08-26 18:55:02 42880 39

原创 高性能网络编程2----TCP消息的发送

在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP另一端的主机接收到吗?能保证数据已经发送到网络上了吗?套接字为阻塞或者非阻塞时,发送方法做的事情有何不

2013-07-18 16:37:55 35989 39

原创 一个低级Illegal instruction错误的定位--忽略编译期警告就得加倍偿还

这个问题是我在开发心跳服务器时的一个笔误,其实错误非常的低级浅显,特别写篇文章是想告诉大家,编译期的警告是非常重要的!由于项目代码量大,编译期信息很多,我在忙于联调时就悲催的忽视了一条编译期警告信息,实际上这个警告解决问题实在是方便,我忽略了它直接从core上啃哧啃哧定位问题花的时间比之多了去了。这篇文章的目的就是以这个很天真又很容易犯的笔误错误,来提醒大家:请不要忽略任何编译期的警告,磨刀不误砍

2013-06-25 17:19:02 41733 11

原创 高性能网络编程(一)----accept建立连接

最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达到目

2013-06-24 19:02:27 65209 45

编程珠玑2英文版(不是第二版,是下篇)

本书是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容结合成一个有机的整体,如一串串珠玑展示给程序员。本书适合各级程序员阅读参考。...   【媒体评论】   “《编程珠玑》第1版是对我职业生涯早期影响最大的书之一,其中的许多真知灼见多年之后仍然使我受益匪浅。Jon在第2版中对素材进行了大量更新,许多新内容让我耳目一新。”.   ——Steve McConnell,软件工程大师,IEEE Software前主编,《代码大全》作者   “对每一位遇到的程序员,我都会毫不迟疑地建议他阅读并不断重读这部经典之作。”...   ——Slashdot

2012-01-09

GCC4.1 RPM安装包

GCC4.1 RPM安装包 gcc4-4.1.2-42.EL4.i386.rpm

2009-09-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除