背景:最近在新产品的开发任务完成后一直在为寻找好的IDC和优质的托管服务忙碌。需求源自于我们重点要解决之前老版产品面临的国内外用户访问速度慢甚至连接不上的问题。除去架构技术上使用高性能、可扩展的方案,针对目前的并发量和数据量而言只要能保证网络质量的优质就可以达到较好的用户体验。
首先我们的产品平台数据需要较强的一致性、高可用性,而且很多是动态数据。根据CAP理论,我们首先否决了分布式部署的方案,一是自己和团队对分布式技术的拿捏还欠缺,二是从开发周期上来说不允许我们有太复杂的研究和设计。所以就将目标转向对有强一致性要求的数据和服务采用集中式部署的方案,于是面对国内网络的互联互通问题,甚至面对国际网络的互通问题我们就得依赖第三方服务——好的IDC和托管服务。在经历了传统解决方案中的多线机房,BGP机房(一直怀疑不是真正的BGP机房)的测试验证,也经历了某国内著名厂商的CDN加速技术的测试验证后,发现不怎么靠谱,连接速度慢和连接不上的问题就连我们自己小规模测试都会遇见。
惆怅中仔细研究了下各种托管服务的指标,听取了一些专业人士的回答建议,自己又动手计算估计了下网络质量,想了想公司对托管服务这块开支的容忍度(要知道BGP机房好贵的,CDN加速服务的价格更吓人,更可怕的是保障还没底)。先说下BGP机房,从接触到的BGP机房来看都是对国内线路的优化支持,即使我们能把服务部署到国与国的骨干节点上,我们国家的出口带宽还有可怕的大墙说不准也会影响到网络质量,再加上3万多公里的海底光缆传播(比如到美国),各个节点的转发,理想情况下怎么着延迟也得到几百毫秒吧,况且还不敢保证国外终端用户的网络质量和服务,难免又会出现国外用户连接速度慢或者连接不上的让用户恨、让领导气的糟糕情况。至于CDN加速服务,据他们的技术人员说对TCP这一层的加速得定制,所以前期也不敢十分保障。
在进一步惆怅之中我在想一个问题:难道我们不能把产品做成国内版和国际版,把这两部分数据和服务分开,就近部署服务器不就可以先解决这个问题嘛。我想大家见过不少类似的产品设计,比如evernote和印象笔记、网游的不同区服......。接着我赶紧向曾经的产品人员了解了一下之前产品的使用背景,原来他们之前担心做成这样后会遇到这样的情况:比如一个美国人在在美国用国际版能够有很好的体验,比如登录快,获取各种信息快(当然,服务器就在他们美国的优质机房里);结果这美国人有一天来了中国,因为产品的登陆慢或者连接不上就会对我们的产品造成恶劣影响(其实我想来中国的美国人都知道有VPN这个东西吧)。对这个产品理念我是不大能认同的,不能把产品设计成为一种能满足各种极端情况的完美产品,大家想想咱自己访问国外服务器上的东西慢不慢就知道了,你可以理解这种情况吗?后期如果这种情况很多很多了,说明我们的用户量也上来了,也有钱了咱再想别的办法。另外,对于产品的设计来说我觉得也值得分为国内版和国际版,我们现在的设计是全球人民都用同样的功能同样的客户端(当然不同语言),有句话是这样说的“产品没有国界,但用户却有国界”,现在我们的产品设计并没有对用户有一个详细的定位,往往是想到增加一个功能所有用户都得升级,国内用户还好说,还是和我们不同生活背景,文化背景的国外用户呢?
后话:现在我们还在进行着“万能”托管服务的测试,我也已经把我的想法转达给了相关人员,得到了部分的肯定但是也有部分不认同,总之我认为在开发中如果能靠产品设计和业务调整避免一些复杂的技术情况是值得的。
摆脱技术思维,转向产品思维——寻找“万能”IDC的苦恼,布布扣,bubuko.com