作者:方腾飞 整理:水羽哲
去年参加了QCon杭州2012大会,有一些收获和大家分享一下。
京东的分享
京东面临的问题
京东的分享嘉宾何斌提出京东之前面临的两个问题:第一个是促销时需要很多机器,但是平时不需要;第二个是当某一台客服中毒其他客服主机也会中毒。大家可以先思考下,觉得应该如何解决这两个问题呢?
京东的解决方案
第一个问题京东采用弹性架构的方式解决。当服务器的资源利用率超过一定阈值时动态扩展虚拟机。举一个例子:如在5分钟内资源使用率达到某个设定的阈值时,就会自动生成几个虚拟机,虚拟机里会自动部署好相关的应用程序,在自动发布前有一个TestServer来监测生成的虚拟机是否可以对外提供服务。云存储和云计算是分离的,云存储使用一个磁盘阵列来实现。
第二个问题京东采用桌面云的方式来解决。首先分配一批虚拟桌面池,然后客服通过权限登陆虚拟桌面,如果没有则再分配一批,虚拟桌面和人不是一一对应的,用完后就回到池子里别人可以继续申请使用,这样可以大大节约资源,当一台机器中病毒后只会影响到子网。
美丽说的架构演变
美丽说的技术总监王曦分享了很多干货,美丽说的架构演变值得很多创业公司学习。美丽说起步的时候开发了一个浏览器插件,这个插件显示用户浏览的商品,插件里提供聊天室的功能,好友间可以就购物进行交流,目的是让女孩子在上班的时候也有购物的感觉。通过这个插件美丽说发现女人对于购物的分享和交流具有非常大的兴趣,所以决定做一个网站。美丽说的发展经历了不同的阶段:
十万级PV:采用LAMP架构,无memcache,基本SQL搞定。使用爬虫工具爬商品信息。
百万级PV:开始使用Redis。出现大量的写操作时,会先存储在Redis里然后异步写回数据库。
千万级PV:开始使用服务化。整体架构向SOA服务化转型,将所有的功能以服务化的方式提供,当某一个功能挂掉的时,其他功能仍然能继续使用。整个架构分为API层(评论,用户管理,私信等),平台服务层(数据库,队列,爬虫等),基础服务层(cache,Redis和并发代理)。前端和后端彻底分离,前后端可以单独上线。
美丽说发现稳定性和访问速度变得更加重要,例如,访问速度提高10% PV会提高30%。美丽说的微博系统通过Redis来实现,给每个用户在Redis里建立一个类似邮箱的存储模型,当有用户关注的消息时,就往用户的"邮箱"投递,投递时会采取很多策略,比如先投在线用户,再投活跃离线用户,最后投离线不活跃用户,或不投。
冯大辉的山寨CTO的速成班分享
冯大辉说道:
初去丁香园,发现系统做得很烂,经常不能访问。作为CTO,面临的第一个问题是选择,重新做一套?还是基于开源的论坛进行修改?还是基于旧系统修改?
冯大辉最后选择在旧系统的基础上进行修改。基于两点原因,重新做不一定比旧系统做得好,其次业界比较好的开源论坛很难做二次开发。
整个演讲所传达理念是:
CTO需要谨慎和专业,把一件技术吃透再运用。用数据说话,没有任何数据支撑,不要轻易做改版和新功能。要快,避免大团队,小团队攻坚,要敏捷但不要照搬敏捷的步骤。
让团队更敏捷。让大家坐在一起,让团队成员在团队之间轮岗,减少会议,减少沟通成本。
不要轻易用新技术。因为业界大多数成熟的公司并不是不断的用新技术,而是把已有技术用得非常登封造极,新技术也会逐渐变成老技术的。
最后,不想做CTO的架构师不是好程序员。
聚划算的分享
大对象的存储方案:大量用户登陆到聚划算,聚划算需要通过IP定位到用户的城市,像IP库这种非常大的对象,如果使用Redis存的话会有很高的网络开销,所以聚划算将这些大对象存在本地JVM的内存中,然后在不同的服务器之间通过消息同步大对象里的数据。
分布式任务系统:通过一个第三方服务器来管理所有的任务,使任务能分别在不同的机器上运行,可以通过锁来实现,拿到当前任务锁的机器才能执行当前任务。
缓存击穿攻击问题:如果有用户访问淘宝不存在的产品id,那么系统每次都会绕过缓存直接访问数据库,解决方案是可以通过在缓存里标示该商品不存在来防止。在微博里校长回复说,CDN也有这样的问题,比如使用404攻击,通常类似的问题5-20秒的cache就足够了。
Paypal的分享
Paypal的演讲嘉宾一上台先来一支骑马舞热热场,很欢乐。Paypal主要分享CEP。 CEP是复杂事件处理的意思,是数据库的反方向,从数据库里查数据是使用查询语句拿到结果,而CEP是把数据发到一个地方然后得到结果。
Paypal嘉宾分享的CEP感觉和我以前做的安全日志分析有点像。安全日志分析可以基于状态,统计,行为等手段进行分析。基于状态机的日志分析,比如1号有某帐号不停尝试登陆的日志,10号有这个帐号在操作某台机器的日志,就说明这个ip有可能在攻击我们的主机,通过多个日志的组合分析出安全风险。
组建一支强悍的小团队
陈皓(@左耳朵耗子)分享的”组建一支强悍的小团队”和facebook的精英文化很类似。不过他的分享比较极端,他说在一个团队里除了程序员,其他的角色都是不干活的,比如项目经理、产品经理、配置管理员、主管等,他的理由是:团队大、角色多、流程多、会议多、内耗大,而在项目中需求分析,项目管理,质量保证和运帷程序员都能搞定。通过减少角色分工,沟通成本和内耗自然下降。这样的团队对人有一定的要求,敏捷是个很好的方法论,但是必须由人来执行。
去年我们团队开始尝试向这样的精英团队转型,QA和前端开发逐渐脱离项目,逐渐转型为负责公共组建的开发,专业培训和咨询。比如前端工程师负责开发每个项目都需要使用的前端框架,QA负责开发增加自动化测试速度的工具并对我们的测试用例进行Review和指导。
这样的团队很好但打造难,因为对人要求很高,招人和引导非常重要。
其他的分享
妥协等于尊重,因为别人说的东西里有值得学习的地方。有好的想法并且能从中盈利才算创新。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/141100.html