2010 ECUG大会,第二天记录。

 


第二天

早上爬了几次才起来。一路小跑,买完包子后在车站等车。今天北京突然降温,全身冰冷,也就口里的包子有点热气。车来得还算快,几分钟后,一辆公交夹着滚滚灰尘而来。冰冷的天气,一大早上就滚滚的灰尘,赶紧封好包子口,合上嘴巴,闭着眼睛往上跳吧。。。



第一场 nginx的应用

是来自淘宝的一位技术专家。所表现出来的技术非常浓厚。

nginx我不是太熟悉,一些东西记录得可能有误。

1年就消化掉nginx10万源码的作者;

通过自己实现一套脚本的简单标记,来实现从 nginx 直接存取 mysql/PostgreSQL/sqlite/drizzle 数据库,memcached。其中还可以直接使用长连接池,集群水平切割,读写分离,负载均衡等高级设施。

一些逻辑工作嵌入lua代码,并且lua代码可以单独提出作为测试

模板工作:

小语言1   小语言2  小语言3

          高级语言lua

          直接执行,或输出


这个模板是这样的,小语言是作者根据业务开发的一套脚本,非常的简单,非常适合业务上的优化。通过一个解释器转成高级,比如lua等。最后执行或者其他处理。并且代码的膨胀量非常小,非STL类的技术。比如在一些查询上,可以在小语言中直接优化。给我的感觉就是实现了一套配置类型的脚本。会后许大非常感兴趣,说盛大也在做一样的事,只不过用PHP解析。当然用什么语言这里不重要。



第二场 新语言

作者是莫华枫,好像在C++版上看过这个ID。讲的是他的一个梦想,一个GP语言。不过扒拉扒拉没啥兴趣,而且坐得太后面,看不到前面的代码段。刚好第一场的作者跑到后面来了,按捺不住,向他请教了nginx中对套接字的线程控制负载工作。关于这方面的网络东西,我会单独整理一遍,并且有我前段时间开发的一些代码实例。



第三场  C1000K

大牛余锋,是一场从硬件到计算机体系的优化盛宴

很多开发人员没有意识到硬件的变化,从而不知道如何对软加层的算法改进

比如南北桥的退化,而专用IOCH

cache! cache!! 这两天这个词给我的印象很深,命中cache成为一个靶子的红心点。根据除了昨天一些假共享的问题,作者还提出了再numa中的问题:比如在一些cache不平衡的情况下,节点1使用内存满,节点2却是命中到了节点1的内存,无法继续取到内存,但是总的内存却仍然还有,以此提出的一个numa内存觉醒的方案。

对于cache,作者给了张表,l1,l2,l3,内存,硬盘,之间访问的时间都是几个数量级的差别,损失的性能能达到30%


1.大内存,导致维护的表项变多,传统的分页不适合,4kb->4mb,TLB

关于这个,有人提出了疑问,这种分页机制应该和CPU架构有关,比如X86只适合4KB,加再多也没用。我当时也想提出这个疑问。在以前测试内存分配器的时候,我把单元颗粒调到了8KB(应用层),但是速度并没有快。但是作者说经过MYSQL的测试,性能确实提升了很多。中间可能还有些商榷的地方吧。我觉得还是得看CACHE的策略。比如有时候你虽然指定一个4KB,策略上也会把你相邻的地址读入。


2.网卡,中断平衡

如果利用多网卡。在交换机上做文章。比如4个网卡,通过交换机绑定一个MAC地址暴露给公网,当公网有数据进入时,按负载拆成4个。当然这里面类似多线程的负载均衡,首先让一个网卡处于负荷状态,然后才唤醒另外一块网卡。不过一个牛B的网卡价格可会达到5-10万哦!


3.rps,rfs,多核CPU的CACHE抖动,效率可以相差2-3倍。搜了个链接http://page.renren.com/600235506/note/486210267


4.TCP,协议内存配置等

这里主要讲各个参数的配置,比如接收大小,发送大小,等等。


5.初始化窗口调优

TCP慢启动,不知道的同学GOOGLE一下,但是慢启动会影响一些短连接的效率


6.硬盘,文件,page cache的算法选择

这里就是各个终端的I/O算法调度,FIO测试工具


7.压缩数据集,让CPU忙碌

这个也是提升cache的块命中。让你的数据能够通过一定的压缩比投放到cache中



第四场 分布式实战
这个。。。。讲得实在太广,真没记录到什么,只知道是做数据挖掘的。倒是作者说了很多失败的经验。最后好像也没什么人提问


第五场
老外的压轴戏,唉,听不懂。过吧。不过老外最后好像还带了一些纪念衣服来,没去领了,就这样结束了ECUG2010场。




我的总结:
cache.我还是想提这个词,在并行多核的时候,避免cache的抖动已经是统一的解决方案。包括底层的硬件架构,也逐渐的由南北桥专向固定的内存匹配,操作系统里也纷纷支持了多核的cache。至于分布式的东西,我认为简单的一个演讲还是比较笼统的。更多人关心一些通用的解决方案详细,来减少开发的投入和摸索。脚本语言的嵌入,静态的小语种编译,在对应用要求越来越高的今天,成为一个比较主流的东西。C/C++, 轻量脚本(LUA),并行虚拟机(erlang)我想是以后每个开发者必备的东西.最后,如果大家有时间还是强烈建议研究下linux内核中的slab,一个非常好的内存分配,包括对cache的抖动,cpu的亲缘等等。硬件底层的变化,操作系统的新功能(rps,rfs)可能不能一下子提升你的并行能力,而slab中的代码也是在代码中非常实用的东西,windows的版本有机会我也会放出。

你可能感兴趣的:(nginx,算法,cache,脚本,lua)