自定义博客皮肤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》作者

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

2020 年 5 月 20 日,一场 NGINX 在国内的盛会、一个所有 NGINX 用户 & 爱好者朝圣的最佳场所,F5 线上技术峰会 – NGINX 专场将以线上直播的形式面向所有开发者召开。届时各位 NGINX 开发者心目中的偶像 NGINX 创始人 Igor Sysoev 以及国内...

2020-04-30 08:46:31 303 0

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

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

2020-04-27 18:54:31 433 0

原创 HTTP性能极限优化

无论你在做前端、后端还是运维,HTTP都是不得不打交道的网络协议。它是最常用的应用层协议,对它的优化,既能通过降低时延带来更好的体验性,也能通过降低资源消耗带来更高的并发性。 可是,学习HTTP不久的同学,很难全面说出HTTP的所有优化点。这既有可能是你没好好准备过大厂的面试:-),也有可能你没...

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

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

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

2019-08-09 08:28:17 1357 0

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

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

2019-08-07 09:07:14 1230 2

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

HTTP 协议极其庞杂,它影响着浏览器、爬虫、代理服务器、防火墙、CDN、Web 容器、微服务等诸多方面,自身的规范却并不统一,所要面对的各类软件的新旧版本也同时存在于网络上。在这种情况下,如果对 HTTP 没有一个深入的理解,就很容易被各种各样的网络问题难倒。 那么,如何才能快速掌握HTTP协...

2019-05-12 14:56:01 1082 0

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

我们公司有定期的分享课,好几位开发部的同学–包括android原生、JS前端、python后端–要求我分享网络协议方面的知识,我做过两场培训,一个是讲TLS/SSL协议,一个是讲HTTP协议的设计原则,结果培训完大家反馈有收获,但是太难了,收获又不是很大。我总结大家学习效果不好的原因后得出: 1...

2019-05-06 08:34:03 618 0

原创 《数学之美》与算法

原文链接: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 1557 0

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

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

2019-01-16 15:22:57 6009 0

原创 如何高效的主持会议

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

2018-10-21 17:32:03 1088 0

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

我们选购电脑时,CPU处理器的配置会有缓存大小,它是CPU性能的重要指标。 为什么呢?因为CPU计算速度与访问主存速度非常不匹配! 先来看计算速度。单颗CPU计算速度目前在2GHz-4GHz之间,以2.5GHz计即每秒钟计算25亿次,每个时钟周期耗时1/2.5GHz==0.4纳秒。当前所有...

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

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

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

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

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

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

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

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

应百林哲笑含的邀请,于2018.6.9号至7.1号前往广州白云国际会议中心参加《CSDI Summit 中国软件研发管理行业技术峰会》。会上认识了很多互联网一线老师是最大的收获:本次我分享的主题是《兼顾灵活与性能的nginx》:意外的惊喜是CSDI的讲师证书非常精美:最后附上本次演讲的PPT内容:...

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

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

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

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

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

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

2018-05-26 10:34:44 64632 22

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

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

2018-05-22 09:53:41 4157 4

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

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

2018-04-21 09:07:51 4640 16

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

在深度学习出现后,人脸识别技术才真正有了可用性。这是因为之前的机器学习技术中,难以从图片中取出合适的特征值。轮廓?颜色?眼睛?如此多的面孔,且随着年纪、光线、拍摄角度、气色、表情、化妆、佩饰挂件等等的不同,同一个人的面孔照片在照片象素层面上差别很大,凭借专家们的经验与试错难以取出准确率较高的特征值...

2018-04-19 11:07:59 2374 0

原创 Udp的反向代理:nginx

在实时性要求较高的特殊场景下,简单的UDP协议仍然是我们的主要手段。UDP协议没有重传机制,还适用于同时向多台主机广播,因此在诸如多人会议、实时竞技游戏、DNS查询等场景里很适用,视频、音频每一帧可以允许丢失但绝对不能重传,网络不好时用户可以容忍黑一下或者声音嘟一下,如果突然把几秒前的视频帧或者声...

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

原创 GIT仓库代码统计

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

2018-04-17 21:15:59 4812 0

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

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

2018-04-07 18:08:44 1810 0

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

django是一套开发成本低、迭代周期快的python web框架,而如mysql等关系数据库则是网站的必备组件,django通过设计一套python对象与数据库表的映射系统ORM,使得开发者不用写一行SQL语句就能实现极其复杂的关系数据库操作,特别是关联多张表的SQL操作。这让开发者的精力可以放...

2017-12-18 14:09:57 4347 0

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

《基于GPU的性能建模与分布式深度学习框架评价》是在GPU训练性能上讨论了benchmark分析方法。从CPU到GPU后,训练时间降低了一些,但能降得更多些吗?换成多块GPU显卡,可以再下降吗?应当采购什么样的显卡,性价比最好?这场分享回答了以上问题。 我们如何设计网络模型,以使得GPU可以满载呢...

2017-12-13 16:35:55 2558 0

原创 区块链技术学习笔记

上周末参加了一个区块链技术培训班,大致搞明白了以下问题:1、比特币为什么会衍生出挖矿、矿机这套产业链?为什么那么多人炒币?2、公有链、联盟莲、私有链的区别在此做个简单分享。1、比特币这种公有区块链的技术支撑实际上大量做服务器端开发的程序员,都对zookeeper有些熟悉,当我们为一个分布式集群寻找...

2017-07-04 09:49:01 3523 0

原创 API的接口变迁

最近前端团队对于目前API接口的不满开始增多,所以我也借此重新理一下我们的API接口。API没有什么完美的设计理念和原则,只有最适合当下的设计。这个最适合包括:当前使用的技术架构、团队规模、团队成员技术特点、开发时间、人力成本、未来业务与技术的预期等。我先来回顾下我们产品的API变迁过程。作为从0...

2017-05-29 12:06:32 1740 0

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

搭建cms内容站点时,wordpress是一个很好的选择,不用做任何开发就可以通过配置、插件获得丰富的功能。用docker容器技术部署运维都非常简单,特别是对于wordpress这种我们无需做任何开发的组件。而出于低成本考虑,公有云都是一个最佳选择,这里我选择的是阿里云。为了提速,wordpres...

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

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

django是python语言快速实现web服务的大杀器,其开发效率可以非常的高!但因为秉承了语言的灵活性,django框架又太灵活,以至于想实现任何功能都有种“条条大路通罗马”的感觉。这么多种选择放在一起,如何分出高下?我想此时的场景下就两个标准:1、相同的功能用最少的代码实现(代码少BUG也会...

2016-10-10 18:18:45 13842 1

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

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

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

原创 信号处理方法的问题

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

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

原创 taohui.org.cn建站历程

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

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

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

当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。操作系统里可配置的、貌似跟TCP内存相关的设置项却很让人疑惑,例如,tcp_rmem[2]和rmem_max似乎都跟接收缓存最大值有关,但它们却可以不一致,究竟有什么区别?或者tcp_wmem[1]...

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

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

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

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

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

最近编辑lisa和我讨论《深入理解Nginx》这本书第2版的出版事宜,我想还是以读者的需求为主,请读者朋友们在这里回复你们觉得:有哪些第1版书中内容有些啰嗦,可以精简的?有哪些内容说得不够详尽,需要增加篇幅的?有哪些Nginx的新变化,在第1版中没有相关内容的出现,需要在第2版中涉及的?有哪些章节...

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

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

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

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

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

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

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

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

1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的? 2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(SO_RCVTIMEO)或者接收到len长度的消息,recv方法才会返回吗?而且,socket上...

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

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

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

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

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

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

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

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

最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。 编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关...

2013-06-24 19:02:27 57266 44

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