20120412

瓶颈,及傍晚的一缕阳光

瓶颈,及傍晚的一缕阳光

1. 流水线

上午,某同学的项目,今天是装系统,我们去了好几个人。外面风沙非常大,风
大到我要倾斜着才能行走,沙子大到迷了好几次眼睛。我把冲锋衣上面的那个帽
子 (应该是hood,但是我怕李记者说我小资,所以这样写) 也套上,免得压在里
面的棒球帽被风吹跑了。

到了里面,终于没有风,但是沙尘更大了。马上要运营了,仍在装修中。电锯
声,窄而陡的楼梯,昏暗的灯光,偶尔,有人的声音传来。像不像电锯杀人狂之
类恐怖片现场?

其实,打CS也挺好,很多射击死角。他们把半座大厦里面架上了铁楼板,分成很
多层,楼层间是错综复杂的铁楼梯,踩上去当当响。在铁楼梯上七拐入拐,终于
到了某个房间,木头门玻璃墙,怡与一般的常理相反。此处楼板表面铺以非实木
地板,踩上去也当当响,说明下面很薄而且是空的。

开始装系统。需要1.设置IP,2.分配IP和用途,3.安装系统并设置。很快发现需
要很长时间,有窝工的地方。

最开始是装系统非常慢。刘同学尝试了不用U盘,而是通过网络从服务器复制安装
文件,速度还是慢;分配两个人装系统和设置,很快另一个有别的安排跑了。

这时,流水线开始调整和形成。我们安排了一个人兼职向要安装的机器里复制安
装文件,并按刘同学的要求优化(并测试通过)了安装包的大小。

我们安装了两个人专门分配IP和写标签,把标签贴在机器脑门 (还是后脑勺)上。
很快,IP和标签最先完成。这一任务既完,重新安排这两位的工作:一个人去参
与分配IP,调另一个人专职负责向机器里复制安装包。

流水线于是大致形成,后来又有小的修改,于是形成下述格局。

一位供应商女士负责开机,然后把机器开着盖交给黄同学,黄同学和另一位同学
设置IP,设备完成以后,供应商男士把机器传递到另一间屋子给杨同学,杨同学
复制安装包,然后把机器盖上堆在刘同学面前,刘同学和 (有时)网络管理员女士
安装并设置,设置的时候连接到服务器上测试网络及数据库连接,然后盖上盖,
供应商男士 (与前面提及的是同一位)把机器重新装箱。

流水线一旦建立,不到一个小时,全部完成。

这个故事告诉我们,流水线中至关重要的,是找到瓶颈所在。方法是看谁的面前
堆的机器最多,减少他的任务,把他的任务拆开分配给别人,优化他的任务速
度,增加他可能的并行。

程序设计时,把查找瓶颈的工具称为 profile。应该优化的是,不是速度最慢的
部分,而是对系统整体速度影响最大的部分。

2. 傍晚一缕阳光

下午,讨论某项目,我迟到了半小时。非常抱歉。

讨论完以后,去找向龙同学,他昨天提到java访问mysql数据库乱码问题。某同
学在清华大学呢,说网络巨慢,希望我参与。这个问题很快就解决了,我昨天晚
上猜测了一下大约可能的问题,在网上搜索了两个贴子,发到了自己的信箱里。
现场选了较简单的那个,改 mysql.ini 的 defualt charset 为 utf-8,好使了。

除了在windows下,包括在java下,utf-8才是统一的标准。是不是有点像电子学
的图示,国标只有在上交报告时不得已才采用?

以上问题没多大意思,有意思的是下一个。向龙说,同步某几个数据库的时候速
度慢,每天的数据需要七八分钟。他非常非常非常熟练地告诉我:从这个mysql数
据库里的这个表里查找这个字段,然后把这个字段按某哔哔哔[此处保密]的算法
进行转换,在这个sql server数据库里查找这个表里的这个字段,然后再把它它
它写到……我实在记不住的另一个数据库里。

以上,是一个标准的流程,查查查,然后写。如果速度慢,问题可能在哪里呢?
每一步都有可能。

我们要做的第一步是--绝不是查找哪一步慢,而是验证向龙说的是真的。我请他
同步某天的数据,我们用手机上的秒表掐时间。

同时附加了一个小的验证实验。不带插入数据,2分40秒,带插入数据,2分20秒。
差不多。考虑到网页延迟,CPU分配不均啥的,应该就是一样了。那么,最后一
步插入并不是瓶颈。

此时,我想到图书馆当年导出数据时的著名案例,200多个工作日的工作量变成
半个小时导完。详情请参见以前博客,不赘述。

然后,我们开始新的验证实验。我请他,没错,我请向龙同学,而不是我自己,
因为我不会这些操作的步骤,我请向龙同学进行下述操作:把所有(两处)select
语句中的where子句中的所有字段设置为index。

第一处,mysql那个,向龙自己已经加了index。我看了半天新新新版的
phpmyadmin,在向龙的指导下找到了索引,我上次用它是十年前?

第二处,sql server那个,加索引的时候提醒我们,改库结构可能会花很长时间。
然后,瞬间就加完了。不知道是机器太快了还是怎么的,按说库应该不小啊。当
年图书馆那四十多万种图书的记录加索引花了2个小时还是多长时间来着。

加完索引以后,我们重复导出的实验。20秒。换一天,还是20秒。再换一天,很
长很长时间没反应,但是向龙查库结构已经导完了。再换一天,还是20秒。后来
我们估且认为,那次时间特别长的,是程序出了毛病。

我坐在向龙的旁边,等二猫放学。午后,接近傍晚的阳光斜着从南面的窗子里射
在他的桌子上,很温暖。桌子是暗黄色的木纹,上面放着一个透明的水瓶,里面
几枝植物绿色黄色的根茎。阳光穿透这些根茎投射在桌面的木纹上,光影交错。

有一缕阳光,正好射在我的眼睛里,那是瓶底附近的一小块光斑。周围的一切都
隐在暗淡里,向龙哗哗敲着键盘导这个那个数据,他对面的女士一边查着新的机
动车限行规定一边出声地思考。所有这些都模糊了,只有那一缕阳光分外清晰。

我拿相机拍下来,说这个太漂亮了,就从我刚刚坐着的那个角度看。向龙说,啊
呀,是挺漂亮,我一直坐在这里都没注意到,就在我显示器后面。

我说:就是因为你一直坐在那吧。

向龙说:你还有精神头整这个呐。

我说:兄弟,如果没有这个,我不知道还能不能活下去了。

如果身处流水线中,一个又一个的瓶颈,看不到未来。你会不会绝望?那一缕阳
光,就是唯一的安慰了,存在,真实,温暖。

最近在看《哥德尔 艾舍尔 巴赫》。作者说,人都生存于一个系统之中,很多人
花费大量的时间就是为了认识到或说服别人,这样一个系统的存在,然后从系统
中摆脱出来。超越自己存在于其中的,又谈何容易?虽然,跳开去看,像赵元良
老师教导我的,那些小事,又都算得了什么。诚然如此,可是问题又回来了,如
何跳开去呢,向哪个方向?

前路漫漫,估且欣赏这一缕阳光吧。

No comments: