毒霸云查杀数据库架构和
  MySQL优化实践

           温铭
    http://s8.hk/kr^_^
互联网软件的特点
• 糙
   开发维护流程不规范
   代码可维护性差
   轻测试,bug多
• 快
   需求变化快
   迭代速度快
   用户反馈快
• 猛
   海量用户
   海量数据
   新技术
• 精
   运营比开发重要
数据的价值


    • 人才?
    • 数据?
水银是什么
• 毒霸云安全 有对水银一代和云安全比较全
  面的介绍
• 毒霸十年反病毒经验的总结
• 安全数据的收集、处理、分析、总结和应
  用的平台
• 毒霸从客户端向互联网转型的急先锋
水银数据库
• 数据库技术架构的变迁代表了水银技术架
  构的变迁
• 历次系统的瓶颈和阵痛
• 系统性能和功能的飞跃
(零)结合应用
• CAP
   一致性(Consistency)
   可用性(Availability)
   分区容忍性(Partition tolerance)
• BASE
   基本可用(Basically Available)
   软状态(Soft state)
   最终一致(Eventually consistent)
   取代ACID? eBay的选择
• 好架构是用的时候磨合修改出来的;不可能一劳永逸
• 教育或者被忽悠
• 逻辑尽可能前移
(壹)了解数据
• 数据库架构的第一步
• 你需要知道:
 数据的含义
 数据的预计规模和增长速度
 数据的使用频率
 数据的生命周期
 数据是实时的,还是可以cache,多久失效
 ……
• 制定缓存和归档机制
 缓存为王
水银:开发就是DBA
• 开发DBA、运维DBA…..从来就没有过DBA
• 表的设计、字段和索引都是开发人员发起,
  邮件或者群里吼。由兼职DBA简单审查就能
  上线
• 好处:最了解应用和数据;快速实现
• 坏处:数据库慢查询;应用和数据库整体
  架构不统一;不便管理
(贰)备份
•   数据库一定会崩溃
•   备份比优化更重要
•   Master-slave
•   InnoDB Hot Backup
•   innobackupex
•   SAN
•   LVM
•   ZFS
•   锁表、停机
水银:备份重要也紧急
•   Master-slave
•   多重备份
•   备份救过命
•   顺便分担读压力
•   不完善,不系统
•   没有应急方案和崩溃演习
(叁)表和索引的设计
•   开始数据库的第一步
•   表和索引设计是数据库优化的一大半
•   了解会有哪些操作、各占比例以及消耗
•   explain 和 profiling
水银:索引
• 不用索引
水银:索引(续)
• 滥用索引
• 还不如没有索引
水银:数据库参数配置
• MyISAM vs InnoDB
• My.cnf的参数调整
• MySQL优化基础
• 网络环境和硬件都会对参数的调整有很大
  影响
(肆)海量数据
•   多少算海量?TB、PB、billion
•   还是要先了解应用和数据
•   关注慢查询
•   找出瓶颈在哪儿
•   NODB:应用、网络、OS、主机、存储
•   scale up 和 scale out
水银: scale up
• OS:32bit 64bit
• Disk:Sata SASSAS RAID10HP MSA2000i
  (iSCSI)EMC(FC)
• memory:4G8G12G
• MySQL:5.05.1
• 全部使用InnoDB
• 参数调整
水银: scale out
•   数据库按照功能拆分
•   使用Django的多数据库控制,无痛拆分
•   数据归档
•   数据生命周期
(伍)高可用性
•   硬件冗余:RAID、电源、主机、交换机…
•   SAN + Heartbeat
•   DRDB + Heartbeat
•   Master-slave
•   Master-slave 半同步(MySQL5.5支持)
•   Master-master
水银:没有HA
• 内外网都没有
• 我们的服务要求是几个九的可靠性?
• 代价和成本(参考这里)
Q&A

mercury