编程随记 ---- 拼包程序(四)
正当自我感觉很好的时候,老大让我测试一下主干网捕获下来的数
据。一测之后,才发觉自己写的程序根本无法使用。捕获的数据少的可
怜,甚至几乎为零。测试使我彻底冷静下来。原来拼包程序并不是如我
想象中的那么简单。其复杂度来源于拼包程序的应用环境----主干网。
主干网的流量达到了G级别的量级。也就是说每秒钟至少有几G的流
量。而其中30%的数据是有效数据,也就是说同时存在的连接数有上百万
个。而每个连接平均正常保存15秒的话,很显然,自己写的程序就无法
有效执行。因为大多数的连接都被我丢弃了。因为我写的程序根本无法
同时维持这么多的连接,根本无法保存这么多的数据。很显然,这个程
序根本无法应用到主干网上。后来我测试过,只能在校园网这种量级上
运行。而在主干网上基本无法保存一个有效的连接数据,因为连接数太
多,前面连接还没有实现三次握手协议,后面的连接九把它给替换掉了。
这样,后面到来的前面连接数据就无法正常保存,同样被丢弃了。于是
几乎所有的数据都被丢弃了。
想到这,我才发觉自己一开始忽略的问题----主干网。确实自己把
这个问题想的太简单了。在主干网上,原本不是问题的问题就显露出来
了。才发觉自己还是没有考虑周到。也怪自己以前没有经验。这时我才
发觉以前做的这个拼包程序都是无用功。而面临的问题,自己感到很难
解决。感到十分困难。可是更让我沮丧的是:老大告诉我这个问题他们
已经解决,程序目前在主干网上运行的好好的。才感到自己没有想象中
的那么聪明,自己以前太傲了。太不知天高地厚了。如果当初在写这个
程序的时候,能够及时积极的和老大讨论一下的话,也许结果就不是这
么悲惨了。
后来,老大告诉我解决这个问题的方法。其实网络上的数据很多是
重复的,所以保存数据所需的空间可以得到节省,通过保留一份,其他
用指针指向即可。还可以采用一些操作系统资源管理的一些算法来管理
内存资源。每个连接只有当来了真实数据后再分配空间,在三次握手的
时候不需要分配空间。分配的空间尽可能少,不够时再申请。这样同一
时间能够同时维护的连接数才能达到上百万个,甚至更多。
听了老大的讲解后,自己豁然开朗。以前感觉学操作系统没什么用
处。现在才发现,很多经典的东西都来自于操作系统。只是当初没有这
个意识。看来以后确实需要好好补补这方面的知识。
等到了解这个问题,到知道怎么去解决这个问题的时候,才发觉已
经晚了。已经没时间去重新把这个拼包程序改进了。因为又有新的工程
要做,又有新的程序要编。而这次暴露出的问题却有关于程序的框架以
及类的接口与实现剥离的问题。
只有当真正面临某个实际问题时,才会发觉自己的基础是这么的不
扎实。只有当真正开始编写代码时,才发觉自己没有掌握的东西和一知
半解的东西。只有真正开始投入某个工程时,才发觉试验和应用之间的
差距。只有真正跟问题真枪实干时,才会发现问题,发现自己的弱点。
只有不断地总结,人才会长大。