DTCC2011基亍MySQL的分布式实践杨海朝SeniorMySQLDBA@SINAjackbillow@gmail.comDTCC20112011.4.15业务增长DTCC2011usage·Sharding策略·Cache应用·NoSQL应用·多IDC部署议题DTCC2011DatabaseShardingDTCC2011whatdrivestheneedfordatabasesharding?://前期·一开始就考虑CAP&BASE理论·异步所有能异步的操作·避免分布式事务DTCC2011前期按功能分割:·不同的业务不同的DB·Master/Slaves·MPSM·多个DB一个portDTCC2011前期水平切分:·索引和数据在不同的DB·Tablepartitioning(256张tables)DTCC2011Scaling实践#1·SPSM·提高slave数量DTCC2011Scaling实践#2·索引和数据物理分开·一个DB一个端口DTCC2011Scaling实践#3提高单机的性能:·SSD·IODrive·Cachecade·FlashcacheDTCC2011Scaling实践#4.1Master不拆分Slave分成多组DTCC2011Scaling实践#4.2以表对象进行拆分DTCC2011Scaling实践#4.3按不同partitioningkey进行拆分DTCC2011Scaling实践#5时间维度来分,持续归档DTCC2011Scaling实践#6中间件来减少开发和运维的成本DTCC2011Sharding原则·一开始就关注架构设计·Scale-upScale-outScale-up·成本可控下硬件是首选·逐步解决拆分中成本问题DTCC2011挑战·如何减少TCO?·如何权衡业务后期的功能扩展?·故障率如何降低?·大批量的快速部署?DTCC2011CachingDTCC2011EverythingrunsfrommemoryinWeb2.0--EvanWeaverCachingDTCC2011·Delayisthefault--MeDB的延时越来越不可以接受,进行了并发复制的开发,降低响应时间还是没有解决Caching第一阶段:MySQL+MemcachedMemcacheServerClientDatabaseDTCC2011Caching第二阶段:MySQL+UDFDTCC2011Caching第三阶段:按冷热度分层原则·采用一致性Hash部署·Cache按照冷热分层·所有热数据都放入Cache·双写来避免雪崩问题·队列方式持久化落入MySQLDTCC2011挑战·双写导致应用复杂?·实现localityRAM?·多IDC部署Cache的复杂度问题?DTCC2011NoSQL·NouseonlyMySQL·高性能·丰富的数据类型DTCC2011独立redis:·关系·计数·通知……NoSQLDTCC2011NoSQLDTCC2011MySQLRedis复制·通过RBR解析BINLOG同步到redis·Redis提供特定数据结构的读访问·实现关系型数据转变成队列数据NoSQLDTCC2011RedisMySQL复制·Redis提供特定数据结构的读写·通过replication接口同时写入到MySQLNoSQL对redis进行完善·解决replicaton问题(rdb+aof)·容灾问题(加入position思想)DTCC2011挑战·如何批量管理?·后期容量扩展?·复杂数据的load速度问题?DTCC2011Federatedtable多IDC部署DTCC2011Master/Master多IDC部署DTCC2011开发多主复制多IDC部署DTCC2011多IDC部署Pub/sub+MySQLreplication=2937455DTCC2011挑战·延时带来的应用时序问题?·部署datacenter的数量有限?DTCC2011总结·持续的databasesharding·硬件解决是首选·数据库简化为存储·关系型和非关系结合·谨慎考虑多机房部署DTCC2011DTCC2011Thankyouforcoming!@jackbillowjackbillow@gmail.comQ&A长期招聘,欢迎加入!