技术开发 频道

低成本和高性能MySQL云数据库架构探索

  【IT168专稿】2012年9月13日-15日,再次相约北京永泰福朋·喜来登酒店,第四届中国系统架构师大会又与大家见面了! 自2009年以来,中国系统架构师大会已经成功举办了三届,受到了业界的广泛关注与赞誉,已经成为当前国内最高技术水准的架构师盛会。

参加中国系统架构师大会必备的十个锦囊
2012中国系统架构师大会报道专题

  MySQL作为老牌的数据库,在国内应用的非常普遍,有着良好的群众基础。同时为了提高MySQL集群的利用率和减低成本,各种MySQL云数据库也在不断涌现。本议题集中讨论淘宝MySQL云平台如何在架构上做到稳定,安全,可扩展、如何引入资源隔离来提高密度、如何优化引擎以提高性能从而降低总的成本更好的服务客户。

低成本和高性能MySQL云数据库架构探索
▲淘宝网核心系统技术专家:余锋(褚霸)

  Mysql运维面临的问题

  1、 易用性差;2、 性能:软硬件未经过优化、处于原始阶段;不同阶段的软件硬件性能相差巨大;3、 集群:主备不完全同步和备机利用率很低;以业务划分,集群分散管理,运维成本很高。

  如何解决Mysql面临的问题?

  1、高效Mysql数据库服务支持,平台化之后几十秒就可以完成。自动化运维,解放各种能力。2、提高资源利用率,把诸多资源从小池子放进一个大池子,降低平台成本,3、长期运行,对外屏蔽软硬件的变化。减少机器成本+减少人力成本=平台化

  Mysql平台设计原则

  1、平台对外保持单一的入口,对内维护的单一的资源池;2、保证服务的高可用性,消除单点故障;3、保证系统是弹性神作的。

  第一版花了3-4个月的时间

  基础的使用C开发,上层是Mysql Proxy

  所有的状态存在集群数据库中,进来的时候是无状态的,当时考虑到系统的开放性,子系统是和标准组件耦合的,很好的实现了对接。

  经验和教训

  经验:采用开放成熟的第三方部件;开放的平台,方便用户使用;热部署和升级对不停机维护的意义;容错系统设计的重要性。

  教训:保持和Mysql的绝对兼容的重要性;数据访问主路径必须短且稳定;Proxy性能、稳定性和成本的关系,过去单台机器2-3万的QPS,QTS1万,后端一台的Proxy带两台,如果性能提高五倍,那么成本降低五倍;日志实时收集和处理的难度,如果不实时的话可以放到Hadoop上;系统各个部件部署的粒度,减少系统升级带来的不良影响。

  第二版特性

  1、平台足够稳定,支持热升级。2、支持几千台物理机规模。3、以对用户透明的形式提供主从热备,数据备份,迁移,容灾,读写分离,分库分表功能。4、资源隔离

  平台概况

  稳定性生产系统验证过

  依赖来源的组件:Zookeeper RabbitMQ

  为什么使用Erlang

  高并发高性能集群易扩展;时间检验的高可靠;强大的管理功能,方便的问题定位支持;强大的交互性,与其他系统的整合能力。

  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。

  使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

  使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。

  Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。

  核心部件

  LVS:安全隔离、L4流量切割,实现负载均衡、Proxy故障

  Zookeeper:作为配置服务器、提供分布式锁、Mysql插件监控所有实例的可用性

  RabbitMQ:Erlang消息机制与AMQP极度吻合、系统中各节点间的可靠通信(不包括SQL查询、日志等大数据流的传输)、标准的AMQP协议。

  资源隔离
  通过CGroup的CPUset、Memcg以及Blkio子模块分别限制用户的Mysql进程最大可以使用的CPU使用率、内存和IOPS。
  对用户SQL执行过程中索引使用情况、IO操作数量等进行分析,指导Proxy增加延迟的方法等等。

  什么是云数据库

  即CloudDB,或者简称为“云库”。

  它把各种关系型数据库看成一系列简单的二维表,并基于简化版本的SQL或访问对象进行操作。

  传统关系型数据库通过提交一个有效地链接字符串即可加入云数据库。

  云数据库解决了数据集中与共享的问题,剩下的是前端设计、应用逻辑和各种应用层开发资源的问题。

  使用云数据库的用户不能控制运行着原始数据库的机器,也不必了解它身在何处。

 

0
相关文章