在很多大型网站的终极架构中都会有用c或c++写的模块,例如memcached,FastDFS,toyota TT等等。而更令微软程序员们郁闷的是这些类库往往都是在linux或者unix机器上经受过大量的性能和稳定性测试,而在windows的服务器上是否稳定,是否可以施展其高性能,就是一个未知数;例如据说将memcached server装在windows server上虽然可以装的上,但是却不是那么高效,还有可能会不稳定,所以我们公司用的memcached server只好部署在linux上。还有一点这些高性能,分布式系统或模块提供客户端的时候也往往是先提供php,java的,最后才出.net的,有的甚至没有.net 的。
其实大规模的网站规模越大和网页语言本身性能关系越小,不管是php,java还是asp.net,都很少会造成大规模网站的性能瓶颈,性能瓶颈往往出在大规模的数据存储的读写上。而在解决存储问题时出现的解决方案大多是用c或c++写的,这和c,c++优秀的性能是分不开的。
作为微软的程序员,我们应该如何对待这个问题呢?我们有几种可选方案:
1. 自己开发应对高性能的模块,并将这些高性能模块在windows下做充分的压力考验;
2. 期待微软开发出我们需要的高性能的模块,然后我们来调用
3. 让这些高性能的模块在linux或者unix下运行,我们自行开发这些模块的存储客户端
…. 如果你有其他的方案,请补充
上面提到的三个方案,方案1如果用c#开发,恐怕性能上很难与c,c++开发的模块相媲美;方案二,恐怕我们等的黄花菜都凉啦,还看不多希望,例如memcached出来后,我很希望微软也有类似的分布式缓存系统,但是等到现在代号从Velocity到Windows AppFabric也没看到谁真的在大点的网站系统中实际用过它。相比方案1,2方案3或许更可行,让memcached,或no-sql db运行在linux或者unix上,然后用.net 的客户端去访问他们。
我提上面的问题并非只想发发牢骚,希望看看大家怎么看待这个问题,希望能够集思广益,看我们.net程序员如何更好应对大规模网站开发。