刚刚从公司离职,趁着这段休息的时间总结一下在公司这两年多的工作。
刚来公司的时候被拉去打杂的事略去不说。
1.去公司做的第一件事是去做操作系统的定制,包括内核的配置选项的定制,软件的定制,编译优化,说白了就是LFS那一套。
2.设计并实现了一个tcp拥塞控制算法,现在的linux内核已经在tcp拥塞控制算法通过模块独立出来,我只需要自己重写一个模块来实现我的算法, 整个思路是基于我不断强调的不公平性展开的,如我以前的blog所说,tcp协议现在一个很大的问题是rtt的不公平性,如何让时延大的用户分享到更公平的带宽,是这个拥塞控制算法设计的主要目的。从最后的结论来看,这个算法确实是能够提升大时延连接的发送速率,多的能有个3-4倍的样子。
但是实际在线上跑的情况,并不是特别的令人满意,从我后面的分析来看,应该说主要的问题在于我当时对于cdn服务质量不够好的那部分没有准确的认识,从我们后面观察的情况来看cdn所面临的网络环境是小时延大丢包。那我所希望缓解的大时延问题就不是太重要了。从现在来看,当时还有一个问题就是对内核内部的实现机制比较天真,认为实际的算法会和我想的一样,实际上模块的接口的权限还是有限。
3.带宽管理,关于带宽管理,说到带宽管理,就不得不提到CDN一个非常非常重要的核心技术也就是全局负载均衡。全局负载均衡的目的是为CDN各个节点合理分配流量,从而使带宽利用率最高。我有一个观点,就是全局负载均衡应该是由宏观部分和微观部分两部分组成的,宏观部分,做大的流量分配,他是以DNS区域为单位的。不可能做的那么精确,需要不断的调整,ok,这个时候就会有节点跑高了,这个时候就需要在节点内部做带宽管理。
说完了前面的铺垫,步入正题,我对于带宽管理的思路,是要合理分配流量,或者说是基于tcp协议的max-min原则的,为每个连接公平分配带宽;如果没有合理的带宽分配,节点带宽跑满的时候,那么这个时候丢包率会变高,时延会变大。我的策略是通过主动的为每个连接分配带宽,保证节点流量不超过峰值,本着公平性的原则,压大放小,从而使得整体的服务质量不下降,速率降下来的只是那些速度太快的连接。
基于这样一个模型,也有了我的第一个,也是公司第一个专利申请:
4.基于主动探测包技术的tcp协议优化,出于为原公司保密的原因不能说的太细,整个思路是tcp协议现有的算法在一些状态下只能靠超时来启动重传,我发明了一个主动探测技术来提前发现网络状况,从而更快的重传。这个技术对于交互型应用有很大的价值,根据NB测试,1个10K左右大小的文件,采用这个技术能够减少20%-30%的传输时间,这还是在我们的测试效果已经是业内最好的情况下获得的。
5.http流媒体应用的tcp协议优化,这套算法是为流媒体应用量身定制的,充分体现了我所谓的基于四层的QoS的思路,效果很不错,无数次的线上数据证明我们能减少接近一半的访问不成功率,。
6.轻量级的网络防火墙,防攻击能力的提升,是我们去年年底开始一直在纠结的问题,经过了长期的试错后我们总结了这样一个规律,防攻击能力的瓶颈是CPU 网卡 总线,于是我们把提高CPU处理包的消耗减少做为突破口,减少不必要的协议栈处理消耗,还不错,在我离职以前,我们已经验证了我们的方法能够提升防攻击性能2.5倍。
7.半连接代理,这是一个我们很得意的创意,可惜我离开的时候还没有完成,这也是我离开最遗憾的事情。这个idea和已经没有人维护的TCPHA那个开源项目有点像,相比之下我们的实现难度更小,但是消耗会大一些。是一个七层负载均衡技术,但是不同于常用的七层负载均衡采用的代理模式,我们用的是类lvs的半连接代理,后端服务器发送的数据包是不需要经过代理的。我也期待着我的伙伴们后续能带来好消息。
阅读(1983) | 评论(0) | 转发(0) |