四月, 2011 | iJohn.org

Archive for 四月, 2011

21st
四月 2011

天涯社区的进化经验(二)产品篇
爱因万江斯坦@2011年04月21日 13:16 Post in 互联网产品 No Comments »

产品与技术
• 拙劣的产品设计,会对技术设计造成很大的麻烦
– 产品设计要平衡技术特点,技术设计要为产品提供思路
– 尽可能去理解业务及其目标,才有可能设计出最恰当的技术方案
• 和产品人员共同决策
• 不要增加太多新功能,创建容易维护难,会分散不多的产品及技术资源,更重要的是分散了用户关注。
• 创新不是发散的,要基于核心功能创新
• 支持产品快速优化,前端代码要易维
• 追求完美的设计只是美好的愿望, 做实用主义者。
• 优先解决让用户最恼火的问题。
• 综合考虑时间成本、服务器成本、技术风险、现有人员能力。
• 维护轻重缓急任务清单,优先做重要的事情,当前重要的事情不要超过三个。

保持技术朴素
• 尽量保持简单、低成本,易维护性、可扩展性,不一味追求新技术,适合的才是最好的,让技术保持朴素。
• 通过简单、常见的技术来组合出灵活的系统。
• 试图了解和利用现有技术,保持技术的连贯性。
• 不要为将来做太多技术准备,很多事情可以放在以后做,把握做事的最佳时间点。

21st
四月 2011

天涯社区的进化经验(一)技术篇
爱因万江斯坦@2011年04月21日 13:05 Post in 系统构架, 性能 No Comments »

设备投入
– 1999 1台服务器
• 2000年,在线用户300
• 2002年,在线用户1000
• 2003年,在线用户8000
WEB+DB共用在一台服务器上
– 2004 4台WEB 2台DB
• 2004年,在线用户2万
WEB及DB剥离。同时WEB不断增加,DB进行分库(4台WEB,2台DB)
– 2005 7台WEB 4台DB
• 2005年,在线用户14万
– 2006 11台WEB 4台squid(页面缓存) 6台DB
• 2006年,在线用户20万
– 2007 +双线接入 F5设备
实现双线双IP,购置F5实现本地及全局负载均衡,haproxy部署,动静剥离
– 现在 136台应用 38台DB
2008年,数据库双机(事务复制),IBM架构咨询。
• 2009年,在线用户40万
Memcache,数据访问层,服务器虚拟化。
• 2010年,在线用户54万

大多数网站发展初期遇到的技术问题,不是没有采用多层架构、没有使用内存缓存、没有购买好的服务器,而是数据结构及检索设计出了问题。
数据库调优是一个长期的过程,建立模拟环境,来跟踪每条请求的反应时间。

数据库设计注意事项
• 在对产品及业务深度了解的前提下进行数据库设计
• 表记录规模的增加对查询不要有性能问题
• 合理的索引(不要犯常识性错误)
• 慎用联合查询(几乎不用),通过一定的数据冗余来回避联合查询
• 必要时通过合并数据,减少结果集大小
• 尽量通过WHERE来定位分页数据
• 在设计时尽量考虑数据规模增长后的拆分问题

WEB服务扩展
• 无状态服务
– 不要用session保留用户数据,Cookie(或会话Cookie)保留用户标示,用户数据统一保留在数据库,或内存中)
• 应用拆分
– 按不同业务拆分,按流量拆分
• DNS轮询、或通过应用控制轮询

构架完善:
双链路接入双IP
– 使用了2台F5-GTM-1500做链路判断。
• 负载均衡
– 使用了2台F5-LTM-6400实现负载均衡
– LVS(IP层负载均衡)
– 反向代理(haproxy 7层负载均衡
• 动静分离
– 使用lighttpd来提供静态资源服务。
• 代理服务
– 使用haproxy提供七层负载均衡,通过ACL拆分应用。
• 页面缓存
– 2005年,使用squid-2.6在前端实现页面级缓存。
– 已经替换成varnish,增加压缩模块。
• 内存缓存
– Memcache

建立服务可用性监控
• 要预警及报警机制和故障点快速定位
– 应用运行中的错误监测
– 应用可用性监测
– 服务器及网络设备健康监控
– 网络流量监控
– 全国访问质量监测