天涯运维的那些事 周小军@ 网络系统部.天涯
主题 天涯现状 运维的历史 运维工具 愿景
天涯现状 5000万用户 2个机房,6G带宽, 1000+服务器,并发20万+ 中国最大的社区 发源于天涯论坛 论坛使用asp脚本语言 使用Windows平台和MSSQL数据库 2个机房,6G带宽, 1000+服务器,并发20万+ 国内最大的社区,中文排名14 用户5千万,PV过亿,每天几十万新增记录 发源于论坛 论坛使用asp脚本语言 使用windows平台和MSSQL数据库 2个机房,6G带宽,1000+服务器,并发20万+
1999年… 关键词:卓锐 1台服务器 80人在线,1万4千用户 王建科用了一个多月的业余时间,写出了天涯的原型。 1999年2月28日12时55分,天涯第一帖。 最初为1台服务器,WEB和DB并存。天涯第一代DIY兼容机,16G SCSI硬盘,PIII 900CPU,512M内存,128K带宽。
2004年 关键词:天涯博客 竹影青瞳 300、1000、8000、2万在线 6万、16万、38万、94万、220万用户 瓶颈:单机压力 解决:WEB及DB剥离,分库 DNS轮询及www1、www2…. 2004年1月2日,天涯博客试运行。 2004年2月18日,竹影青瞳事件,流量暴涨,服务器负载大。 天涯社区赶超西祠目标。 主要工作目标:数据库性能优化、应用性能优化。 测试过DNS轮询,但因应用服务器性能不平衡,造成配置低的服务器响应时间长。
基于应用的负载均衡 客户端 重定向到其它服务器 WWW1 WWW2 WWW3 WWW4 主版DB 副版DB
2005年 14万在线,463万用户 瓶颈:WEB CPU压力/IIS 内存回收/数据库IO压力 解决:使用squid(11台www,4台squid,6台DB) 黑客入侵 2005年天涯营收目标一千万。 使用Squid,ASP程序加上缓存代码,页面及列表缓存5分钟,应用功能分离(点击、发表、回复等)、增加新的功能(x-forward数组)、IIS的url rewrite软件。 11台WEB,4台squid,6台DB 2005年8月,菜霸通过社交工程,入侵服务器。 chinabbs等社区聚合网站的威胁
页面缓存结构 squid1 squid2 保存页面副本 WWW1 WWW2 WWW3 WWW4 定制N分钟缓存 主版DB 副版DB
squid Request Hit Ratios: 5min: 46.8%, 60min: 44.8% Byte Hit Ratios: 5min: 10.2%, 60min: 11.6% Request Memory Hit Ratios: 5min: 29.7%, 60min: 25.1% Request Disk Hit Ratios: 5min: 2.7%, 60min: 7.6% Squid初上线时,命中率达到40-50%,后来经过不断的调优,命中率不断提升,减缓了后端应用和数据库的压力。 某台squid服务器: 客户端HTTP请求:155个/秒
2006年 20万在线,887万用户 21台www,12台squid,14台DB 瓶颈:数据库压力(存储过程、IO) 解决:继续分库 服务器第一次搬家 开始采用Java和Mysql 域名变更 域名从原来的tianyaclub.com转为tianya.cn。
2007 30万在线,1300万用户 68台www,33台squid,32台DB 瓶颈:南北互联/负载均衡/缓存命中率 解决:双线双IP,购置F5,部署7层负载均衡、动静资源剥离 数据库双机复制/读写分离 新架构开发 与谷歌合作来吧及问答 ALEXA进入200名内。 双链路接入双IP 使用了2台F5-GTM-1500做链路判断。 负载均衡 使用了2台F5-LTM-3400实现负载均衡 动静分离 使用lighttpd来提供静态资源服务。 七层负载均衡 使用haproxy提供七层负载均衡,通过ACL拆分应用。 Haproxy,处在F5之下,对流量进行分流,依据规则将不同的应用分流到不同的应用服务期上处理,如天涯杂谈,将天涯杂谈的流量导入到天涯杂谈缓冲服务器,保证缓存服务器、应用服务器、数据服务器的连贯性,来提高缓冲服务器、数据服务器的运行效率。
七层负载均衡 acl free_content path_beg -i /publicforum/content/free acl free_list path_end -i free.shtml acl asp path_end -i .asp acl static path_end -i .js .css .gif .jpg .htm .html use_backend asp if asp use_backend static if static use_backend pub_hot_1 if free_content OR free_list 通过F5 LTM对Haproxy进行负载均衡 作为应用服务器的前端,对后端服务器进行简单的负载均衡。 应用拆分,提高应用效率,提升cache命中率。
结构 F5-GTM F5-GTM F5-LTM F5-LTM Haproxy 根据URL分拆版块应用 Squid squid squid WWW WWW WWW WWW 写 读 DB主 DB从
2008-2009 40万人在线,2000->3000万用户 瓶颈:性能利用不均衡/页面未压缩 解决:服务器虚拟化,Squid迁移到varnish IBM天涯用户体验咨询,天涯页面全新改版 论坛新架构在部分版块试运行 IT视界、贴图专区等。 120多台虚拟机在运行,应用于广告、论坛、博客、无线、游戏、会员等多个产品。节省了三分之二的服务器投入预算,10个机柜的托管成本,以及相关的交换机、布线等投入。
varnish 热门版块命中率70% 流量节约70% 上午9时40分varnishstat输出结果: Hitrate ratio: 10 100 137 Hitrate avg: 0.7300 0.7206 0.7196 56322971 48.96 45.05 Client connections accepted 45186154 42.97 36.14 Client requests received Varnish为新架构,支持gzip,支持SMP/多核,采用虚拟内存,避免内核开销,减少磁盘瓶颈。在64位系统上支持更好。 varnish-2.0.6 天涯主要采用了页面缓存及内容压缩功能。
2010年 54万在线,4500万用户 瓶颈:数据库磁盘IO 解决:Memcache、Redis 论坛放弃迁移到新架构 成果: 1、支持读写分离 2、支持多个读节点同时访问,负载均衡 3、支持数据库访问的failover,避免单点故障 4、支持数据库分库,提高系统的可伸缩性 5、支持资源统一配置,提高系统的可配置型 6、数据库访问分层,提高数据库访问的可复用性 问题: 1、配置复杂,出错时找问题很难 2、socketserver效率不高,健壮性差,流量高时发生堵塞
ASP对memcache的操作 set cache = Server.CreateObject("Tianyamemcached.Client") cache.setGroup("group_test") content = cache.get("key") add_action = cache.add("key",content,OutTime) del_action = cache.Delete ("key") set cache = nothing 使用c#编写对memcache的操作组件。
F5-GTM F5-GTM F5-LTM F5-LTM Haproxy 根据URL分拆版块应用 Varnish Varnish Varnish Varnish WWW WWW WWW WWW Memcache Redis 写 读 DB主 DB从
天涯论坛技术特点 分库、分表、读写分离 无回复表 无状态服务 双线双IP 四层、七层负载均衡 动静分离 采用缓存 页面压缩 URL Rewrite 在设计时尽量考虑数据规模增长后的拆分问题,减少数据表间的紧耦合,可扩展、提升读性能、数据多份安全。 将主帖、回复帖放置于一个字段中,读取时通过标记符判断,在应用层拼装成主回复。 不用session保留用户数据,Cookie(或会话Cookie)仅保留用户标示,用户数据统一保留在数据库中,尽量放置在内存中。 按业务/流量拆分应用 页面级缓存及数据缓存。 URL Rewrite输出友好URL
特点(续……) 一帖到底(不限制-300K-200K-100K-100回复) 帖子不物理删除 所有帖子都可以回复 压力都集中在WEB端,因此WEB的压力极大,经常发现CPU 100%现象,IIS不断重启以释放内存。
分库 应用不断被动调整 业务中断代价 运维成本高 实施时间 工作内容 提前 安装配置好服务器 在新服务器上创建相关链接服务器、数据库、存储过程、数据库用户帐号、作业 发公告 0:00 数据库写封口 0:30 导表到新库并创建索引 2:30 相关版块应用读写新库测试 3:00 相关版块应用读写新库开放并每接口测试
脏读 update带来X锁 读阻塞 放弃一致性,使用unlock 通过memcache或redis做记录级update
天涯运维的特点 架构规划 5 日常维护 10 产品协同 80 故障处理 5
运维的四个阶段 性能优化 架构 自动化 规范流程与面向云计算
运维监控平台 每台PM/VM安装Agent 对象监控插件化 Agent以轮循方式执行注册插件 数据以XML包格式发送 Socket Server解析XML Socket Server将采集数据入库 WEB UI展现数据,统计报表,性能分析 开发语言:Python、C++、Java 数据库:MySQL WEB框架:Django
监控平台结构 WatchDog Agent Server XML WEB Server Switch Socket Server SNMP DB Server
其它运维开源工具 Nagios Cacti Func Python 计算机系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户。基于GPLv2开发的开源软件,可免费获得及使用。 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形。 Func是由红帽子公司以Fedora平台统一网络控制器 Func(Fedora Unified Network Controller),目的是为了解决这一系列统一管理监控问题而设计开发的系统管理基础框架。 能有效简化多服务器系统管理工作的工具,易学习、易使用、易扩展。 Func分为master及slave两部分,master为主控端,slave为被控端。 Python:可读性,优雅,简单。缩进来定义语句块。面向对象,支持命令行编程和函数式编程等多种编程范式。自动内存管理、垃圾回收功能。处理系统管理和WEB编程。,以及高阶任务。包含很多标准库。
虚拟化 1 vs 7 (单CPU/8G/100GB) 双路四核CPU/64G内存/6块SATA 500GB硬盘/RAID 10 目前有17台实体服务器,129台VM在线 节约了70%硬件投入、10个机柜托管成本…… 目前使用Oravle VM Manager对虚拟化进行管理。
运维蓝图 虚拟化 性能监控 容量规划 流程管理 可用性监控 资源库 配置管理 远程管理 系统发布 自动部署
谢谢 欢迎线下与我交流 zhouxj@hainan.net