点评架构

####初见王宏

早上三楼休息室,喝着新打的Mocha,和Weijie谈论着FiddlerCore,便看到上海互联网的“重量级”人物:点评王宏,还挺奇怪,不过上前打了招呼,原来是QianShen所请,作为公司间交流分享而来,于是也申请加入这场架构交流会。

####点评架构

可以看出整个DP的架构中规中矩,对比各大型互联网架构并没有太多亮点。值得一提的是DP从早期到现在架构中的变迁,互联网项目业务变化非常快,用户人数也是飞速增长,在这种变化下,如何让架构应对,是个很大的问题,同时又要对旧的项目进行兼容,还要保证后期的可扩展性。这也是今天王宏所谈到的重点。

####数据库访问控制

DP中使用MySQL和NoSQL(应该是MongoDB)两种数据库,MySQL又做了MS,Master为RW,其余为R,NoSQL则用于存放大型文本,其上有DataAccess Router来配置数据访问导向,让请求到达指定源存取数据。

数据库切分,玩过数据库的人都懂的这种切分的概念,水平、垂直,但DP却说他们现在才开始做切分,也就是说小型网站在业务不成熟时一味的做优化意义不大,反而是种浪费。

在数据库之上有数据访问层,ORM和DP自己的类似于LINQ一样的ORM框架,(感觉应该部分有用Hibernate),在这一层中有加入Cache策略,减少对数据库的直接访问,降低IO的读次数,提高性能和时间。

####服务层

该层主要提供业务相关的服务接口,像Profile、店铺…等业务相关的接口。

有时一个流程的操作需要多个接口的顺序完成,于是在服务层的上部再封装一些适合业务的接口,算作Service的Extension。

在Service Layer做缓存时的粒度问题上,王宏表示尽可能小,DP以Class为单位。如果粒度太大,则更新会比较频繁,起不到cache的效果,太小则维护成本更高。

####消息队列

在谈到消息队列时,王宏表示试过几款开源的产品,但在应对高并发的情况下,都不靠谱,而且过重。现DP使用的是自己开发的Queue,其实队列很简单,如果不作数据推送的话,只需考虑高并发(目前DP的消息都是Pull,而非Push),不知他们有没有尝试过Redis,也没来得及问。

####配置管理

王宏有提到他们系统中有统一的配置管理系统,用以解决各个小模块的配置文件所带来的管理混乱的问题,在不同服务器部署的问题,当有一个配置发生发变时,你要到多个地方进行修改。(据我推测,DP在用Zookeeper这样的神器!)

####Track

因为最近在做track的东西,所以这点是我自己加的,关于要track些什么东西,用户未产生服务器响应的东西要不要track,Track用到的技术等等。

####Configuration Management

最后谈到了配置上的一些管理,像数据库访问,Routers的配置,DP有一个?数据库,Framework,Tool来作统一管理。

####FCity 问题

关于FCity的问题,我能说上一天一夜(抱怨不是件坏事,沉默才更可怕!),但今天是QS的主讲,所以只列出他的观点。

数据库跨太平洋延时问题,目前CN仅有只读DB,写操作都会经过一个几M的光钎到US完成再返回,其延时达到300,很吓人的一个数据,关于这个的解决方案,除了在CN建W数据库,其它还真没有靠谱的办法,但建W数据库如果还实行即时同步策略带来的开销更大,也就是说必须要拆分数据库,按用户将中国区学生导向到CN数据库,这对现在架构和应用来说是个Big Thing!!!

####前端

王宏谈到对首页的第一印象,ETFileMergeHandler这个家丑一下子又被揭开,关于这个我之前也讨论,却实也有想法参照Sporket重做一个,但工作时没有时间,业务时不想写.NET就一直没有开始。

顺便提了下DP如何做static file的缓存和对js,css的版本控制和合并。

####关于.NET

这个是QS Team最关注的一个问题了吧,要底要不要坚持C#,在这一点上,我对王宏的回答表示赞佩。

当初在使用.NET时,你会看到Java种种的好,有着更多的使用人群,有着众多的开源项目,有着Linux更优秀的平台。当直的开始使用时,你会发现虽然人数多,但使用Java的公司也对应的多,结果是仍然招不到人。而那些之前所被吸引的开源项目,真正的用起来时,起初像是在睡一张温柔的席梦思,但时间久了,问题来时,你发现你根本不了解它的底层,最后读完这个项目代码修发Bug的时间已超过你写应用的时间,不得已,很多项目最后都是定制。(这一点上,我更喜欢Twritter的作法,将问题Fix,回馈社区,但毕竟有着不同的背景,不能同论)。最后,不得不说,其实Windows在Server上同样有着不凡的性能和操纵能力,而且价格对于企业也真的不贵,还有免费的spark计划。

Fenng不也说过,真正转成功的其实没几家。

最关键的是对技术的深度,不是一味的转型。(送给自己!)

####点评的转型之路

那在DP的转型过程中遇到的难题和对转型时的建议,王宏表示,因为其服务层有着清晰的模块化API设计,所以转起来很方便,以模块为单位,用Java实现同样的接口,再替换上就OK了。

所以特别强调了:API定义是未来扩展的最主要素。

####手机客户端

API设计时要考虑升级和向下兼容。毕竟手机端和安程程序没有区别,你不可能强制用户升级,也不可能不服务某些用户。这一点和Web很不一样。

谈到一点有意思的,王宏表示在手机端,在中国这个移动网络环境里,他更偏向于使用TCP/IP长链接,保证最大化的用户体验,这一点出过国的都应该深有感触吧,中国的网络太差了。而长连接则可以减少用户建立请求的等待时间。

最后一点关于PB,我之前有听过,但没有想到在DP(互联网圈中)中已应用的这么广泛。推荐大家也看下。