热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle专家谈MySQLCluster如何支持200M的QPS

Oracle专家谈MySQLCluster如何支持200M的QPS作者谢丽发布于2015年7月2日|讨论分享到:微博微信FacebookTwitter有道云笔记邮件分享稍后阅读我的阅读清单

Oracle专家谈MySQL Cluster如何支持200M的QPS 作者 谢丽 发布于 2015年7月2日 | 讨论

Andrew Morgan是Oracle MySQL首席产品经理。 近日,他撰文介绍了MySQL Cluster如何支持200M的QPS。

MySQL Cluster简介

MySQL Cluster是一个实时可扩展且符合ACID的事务型内存数据库。该数据库有高达99.999%的可用性和低廉的开源软件总拥有成本。在设计方面,它采用了一种分布式、多主节点的架构,消除了单点故障,能够在商用硬件上横向扩展,并借助“自动分片(auto-sharding)”功能为通过SQL和NoSQL接口访问数据的读/写密集型工作负载提供服务。

最初,MySQL Cluster被设计成一个嵌入式的电信数据库,用于网内应用程序,需要具备运营商级的可用性和实时性能。之后,其功能随着新功能集的增加迅速增强,其应用领域随之也扩展到了本地或云上的Web、移动和企业应用程序,包括:大规模OLTP、实时分析、电子商务(库存管理、购物车、支付处理、订单追踪)、在线游戏、金融交易(欺诈检测)、移动与微支付、会话管理&缓存、流式推送、分析及推荐、内容管理与交付、通信与在线感知服务、订阅者/用户信息管理与权益等。

MySQL Cluster体系结构

在MySQL Cluster内部,总共有三种类型的节点为应用程序提供服务。下面是一张MySQL Cluster体系结构简图,其中包含6个节点组,共12个“数据节点(Data Node)”:

数据节点是MySQL Cluster的主要节点。它们提供如下功能:内存内及基于磁盘的数据存储与管理、表的自动“分片(sharding)”及按用户定义分区、数据节点间数据同步复制、事务与数据检索、自动故障恢复、自我修复(故障解决后自动重新同步)。

表会自动跨数据节点分区,每个数据节点都是一个可以接受写操作的主节点。这使得写密集型工作负载很容易在节点之间分配,而且对于应用程序而言,这个过程是透明的。

MySQL Cluster采用了一种无资源共享的体系结构(比如不使用共享磁盘)存储和分发数据,并同步生成至少一个数据副本,如果某个数据节点出现故障,则总是有另一个数据节点存储了同样的信息, 使得请求和事务可以继续而不被中断。任何在数据节点故障期间短暂中断(亚秒级)的事务都可以回滚并重新执行。

MySQL Cluster允许用户选择如何存储数据:全部在内存中或者部分在磁盘上(仅限于未索引数据)。内存内存储对于经常变化的数据(活动工作集)而言尤其有用。存储在内存中的数据会定期地(本地检查点)写入本地磁盘,并在所有数据节点之间协调,这样,MySQL Cluster可以从系统完全失效(比如停电)的情况下恢复过来。基于磁盘的存储可以用于存储性能要求不那么严格的数据,其数据集大于可用内存。与其它大多数数据库服务器一样,为了提高性能,MySQL Cluster使用页缓存将经常使用的、基于磁盘存储的数据缓存在数据节点的内存中。

应用节点提供从应用逻辑到数据节点的连接。应用程序可以使用SQL访问数据库,通过一台或多个MySQL服务器对存储在MySQL Cluster中的数据执行SQL接口的功能。当访问MySQL服务器时,可以使用任何一种标准的MySQL连接器,这使用户有许多种访问技术可选择。NDB API是其中一个可选的方案。这是一个基于C++的高性能接口,可以提供额外控制、更好的实时行为及更高的吞吐能力。NDB API还提供了一个层,使NoSQL接口可以绕过SQL层直接访问MySQL Cluster,降低了延迟,提高了开发灵活性。现有接口包括Java、JPA、Memcached、Javascript与Node.js、HTTP/REST(借助Apache Module)。所有应用节点都可以访问所有数据节点的数据,所以,它们即使出现故障也不会导致服务中断,因为应用程序只要使用剩下的节点就可以了。

管理节点负责向MySQL Cluster中的所有节点发布集群配置信息以及节点管理。管理节点在启动、向集群加入节点及系统重新配置时使用。管理节点关闭和重启不会影响数据节点和应用节点的运行。在默认情况下,在遇到导致“集群分裂(split-brain)”或网络分区的网络故障时,管理节点还提供仲裁服务。

通过透明分片实现可扩展性

任何表的行都可以透明地分成多个分区/片段。对于每一个片段,都会有一个单独的数据节点保存它所有的数据,并处理所有针对那些数据的读写操作。每个数据节点还有一个伙伴节点,它们共同组成了一个节点组;伙伴节点存储了那个片段的第二个副本以及一个它自己原有的片段。MySQL Cluster使用同步两段提交协议确保事务提交的变化同时存储到两个数据节点。

MySQL Cluster默认使用表的主键作为“分片键(shard key)”,并对分片键执行MD5散列,从而选择数据应该存储的片段/分区。如果一个事务或查询需要访问多个数据节点的数据,那么其中一个数据节点将承担事务协调器的角色,并将工作委派给其它所需的数据节点;结果会在提供给应用程序前合并。需要注意的是,事务或查询可以连接来自多个分片和多个表的数据,这与传统的、实现了分片机制的NoSQL数据存储相比是一个巨大的优势。

当单个节点就可以满足高强度查询/事务的数据操作需求时,就实现了最理想的(线性)扩展(因为这减少了数据节点间消息传递的网络延迟)。要做到这一点,应用程序应该清楚地知道数据分布——这实际上就是说定义模式的人可以指定用作分片键的列。比如,上图中的表使用了由user-id和服务名组合而成的主键;如果只使用user-id作为分片键,那么表中特定用户的所有行将会总是存储在同一个片段中。更为强大之处在于,如果其它表中也使用了同样的user-id列,并将其设定为分片键,那么所有表中特定用户的数据都会存储在同一个片段中,那个用户的查询/事务就可以由单个数据节点处理。

利用NoSQL API最大限度地提高数据访问速度

MySQL Cluster提供了许多种数据访问方式;最常用的方法是SQL,但从下图可以看出,还有许多原生API可供应用程序从数据库直接读/写数据,避免了向SQL转换并传递给MySQL服务器的低效和开发复杂度。目前,MySQL Cluster提供了面向C++、Java、JPA、Javascript/Node.js、HTTP及Memcached协议的API。

基准测试:每秒2亿次查询

根据设计,MySQL Cluster用于处理以下两种工作负载:

  • OLTP(在线事务处理):内存优化型表可以提供次毫秒级的低延迟以及极高水平的OLTP工作负载并发能力,并且仍然可以提供良好的稳定性;此外,它们也能够用于基于磁盘存储的表。
  • 即时搜索:MySQL Cluster提高了执行表扫描时可以使用的并发数,极大地提高了未索引列的搜索速度。

话虽如此,MySQL Cluster旨在处理OLTP工作负载方面达到最佳,特别是在以并发方式发送大量查询/事务请求的情况下。为此,他们使用flexAsynch基准测试,测量更多数据节点加入集群后NoSQL访问性能的提升。

在该基准测试中,每个数据节点运行在一个专用的56线程Intel E5-2697 v3(Haswell)机器上。上图显示了在数据节点从2增加到32(注意:MySQL Cluster目前最多支持48个数据节点)的过程中吞吐量的变化。从中可以看出,吞吐量呈线性增长,在32个数据节点时,达到了每秒2亿次NoSQL查询

读者可以登录MySQL Cluster基准测试页面,查看关于这次测试的最新结果及更详细的描述。

每秒2亿次查询的基准测试是在MySQL Cluster 7.4(最新的正式版本)上得出的,关于该版本的更多信息请查看这里。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

证券公司的大数据应用和展望,传统金融公司的互联网技术演进之路,互联网金融的征信体系架构,高可用的投资组合推荐技术架构,如何做一个有把握的“红包”系统,银行的应急系统实践与升级。更多互联网金融热点尽在ArchSummit深圳2015大会“互联网金融”专题

推荐阅读
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • Oracle 10g 和 11g 32位 OCI.DLL 文件下载
    32位 PL/SQL Developer 访问 64位 Oracle 11g 数据库时,需要使用 32位的 OCI.DLL 文件以确保正常连接和数据访问。本文将详细介绍如何获取并配置此文件。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 解决远程桌面连接时的身份验证错误问题
    本文介绍了如何解决在尝试远程访问服务器时遇到的身份验证错误,特别是当系统提示‘要求的函数不受支持’时的具体解决步骤。通过调整Windows注册表设置,您可以轻松解决这一常见问题。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • 本文详细介绍了如何在 CentOS 7 及其衍生发行版(如 Red Hat, Oracle, Scientific Linux 7)上安装和完全卸载 GitLab。包括安装必要的依赖关系、配置防火墙、安装 GitLab 软件包以及常见问题的解决方法。 ... [详细]
author-avatar
岳述穗__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有