数据库中间件Atlas调研笔记

简介: 13年底的调研笔记,文中的“画外音”是我当时的批注,希望能让大家对Atlas能有一个初步的认识,有疑问之处,欢迎交流。
+关注继续查看

13年底负责数据库中间件设计时的调研笔记,拿出来和大家分享,轻拍。

一、Atlas是什么

  • 奇虎360的一个mysql数据库中间层项目
  • 在mysql官方推出的mysql-proxy0.8.2的基础上改的
  • 基于服务端的中间件

画外音:数据库中间件有基于服务端的,也有基于客户端的,TDDL属于后者;而cobar和Atlas是一个中间层服务,属于前者。

二、Atlas相对mysql-proxy的优势

既然Atlas是基于mysql-proxy改的,有一些什么优化呢?

  • 主流程中的Lua脚本用C重写
  • 网络模型,线程模型重写
  • 实现了“真正意义”上的连接池,真正连接复用
  • 优化了锁机制,性能提高数十倍

画外音:性能提高数十倍是传说,用过的同学可以出来说一说。

官方mysql-proxy主库宕机从库亦不可用,Atlas优化为可读不可写

优化之外,还新增了什么特性呢?

  • ip过滤
  • 分表支持
  • dba可平滑上下线db
  • 自动摘除宕机db

三、Atlas最吸引人的分表功能

分表功能是Atlas相对于mysql-proxy最具有吸引力的功能。

分表设置

为了支持分表,需要增加分表设置

tables = $db_name

    .$table_name

    .$partition_column_name

    .$table_count

例如

tables = school:stu:id:100
  • 数据库名叫school
  • 表名叫stu
  • 分表字段叫id
  • 总共分为100张表

这100张子表需要用户手动逐个建立的,stu_0, stu_1, stu_2, … stu_99,并且所有的子表必须在一个数据库里。

画外音:额,这个需要用户手动执行,还是有点坑的。

画外音:分表并且要求子表在一个库里,如果数据量过大,无法通过扩展实例来扩容,不确定Atlas对于这个问题是如何考虑“扩展性”的。

操作支持

Atlas支持select, delete, update, insert, replace操作,它会根据$partition_column_name 的值来对表的个数进行取模,以定位到sql请求要落到哪个子表。

需要注意的是,sql语句必须带上分表id作为查询条件,如果不带上id,则会提示stu表不存在。

画外音:不支持夸库分表,不支持非partition_column上的查询,应用场景应该会比较受限。

四、Atlas的参数扩展

min-idle-connections

  • 用来实现mysq连接池功能,进行连接限制
  • Atlas为每台DB建立一个连接池
  • 当有客户端连接Atlas时,Atlas会先在第一台DB上建立连接,直到第一台DB连接池内的空闲连接数达到min-idle-connections,再在下一台DB上建立连接,直到所有DB连接池内的空闲连接数都达到min-idle-connections,便不再建立新连接,而开始复用连接池内的连接
  • Atlas启动时,配置里的所有DB会按照主库在前从库在后的顺序在内存里排好次序,所以初始阶段会先在主库上建立连接
  • Atlas在运行过程中,某连接如果触发了DB的wait_timeout,Atlas会把该连接销毁,如果因此而导致连接池内的空闲连接数低于min-idle-connections,Atlas将在客户端下一次连接时重新在该DB上建立连接
  • 初使用者常常会误认为读写分离不起作用,其实是由于min-idle-connections设置得较大,而测试时只连接了一次或几次,这样的话建立的连接都在主库上,从库上还没有建立连接,此时发送读语句,自然也只能打向主库
  • DB的wait_timeout建议不要设得太小,因为Atlas有连接池机制,不会一直新建连接导致DB上连接数过多,所以DB不需要依赖wait_timeout防止过多连接,如果wait_timeout太小会导致Atlas的一些不必要的销毁超时连接的开销

画外音:并发量比较大的时候,连接几乎不会被销毁。

client-ips

该参数用来实现多用户的权限控制功能

配置格式如下:

client-ips : 127.0.0.1, 192.168.0.*

画外音:简单而实用的功能,多少事故是因为“线下将流量压到线上”或者“ SecureCRT 窗口太多,切换错了数据库”。

lvs-ips

  • 该参数是Atlas前面挂接的LVS的物理网卡的IP,不是虚IP
  • 该参数用来实现平滑重启功能,否则在重启Atlas的瞬间的那些SQL请求都会失败
  • 平滑重启的条件:至少有两台配置相同的Atlas,且挂接在LVS之后

五、Atlas最受关注FAQ

问:Atlas是否支持多字符集?

答:是,对多字符集的支持是Atlas对原版MySQL-Proxy的第一项改进。

问:Atlas是否支持事务操作?

答:支持,且处于事务状态的客户端中途退出时,Atlas会销毁该客户端使用的连接,让后台的mysql回滚事务,保证了事务的完整性。

画外音:单库多表。

问:自动读写分离挺好,但有时候写完马上就想读,万一主从同步延迟怎么办?

答:SQL语句前增加 /master/ 就可以将读请求强制发往主库,例如:

/master/ select * from t;

画外音:额,需要调用方自己来强制读主,说实话,不是特别实用。

问:主库宕机,读操作受影响么?

答:不受影响,mysql-proxy不支持这个功能。

问:想下线一台DB, 又不想停掉server, 怎么办?

答:可以通过管理接口手动上下线后端db:

remove backend i

问:想给集群中增加一台DB, 不想影响线上正常访问可以吗?

答:可以通过管理接口可以实现:

add master ip:port

add slave ip:port@weight

问:Atlas支持mysql的prepare特性吗?

答:不支持,但打算在后续版本中支持。

问:Altas支持多个主库的运行模式吗?

答:目前还未对于Atlas后面挂接多个主库的情形进行测试过,不建议这样使用。建议使用一主一从或一主多从的模式。

问:Altas支持SQL安全性过滤吗?

答:支持,不带where字句的delete可以过滤。

问:Altas未来有什么发展规划?

答:支持跨机器的分库分表,将数据分不到多台机器上。

13年底的调研笔记,文中的“画外音”是我当时的批注,希望能让大家对Atlas能有一个初步的认识,有疑问之处,欢迎交流。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
SQL 安全 关系型数据库
写在开源前 1 天:OceanBase ODC 开源背后的故事
关于开源协议选择,ODC 开源选择了足够开放的 Apache 2.0 协议,如果和您的产品矩阵能够互补,我们鼓励基于 ODC 开源项目打造自己的完整解决方案提供给客户。对于 OceanBase 而言,这其实也有助于实现最理想的企业级软件销售模式 “分销”,从数据库厂商角度来说,如果能帮助更多合作厂商获得商业利益,销售和交付成本的问题就可以比较彻底的解决。
12 0
|
3月前
|
存储 弹性计算 运维
互娱NoSQL架构优化 —— 暨MongoDB“在线换引擎”技术服务指南”
XX工作室是某大客户核心游戏工作室,其核心业务是国内二次元RPG手游,采用实时开放世界对战模式,整体采用阿里云方案,本次专项攻坚主要对于玩家在游戏期间各类游戏属性交互(包含过图、物品、面板、剧情等)的核心业务模块进行优化,其中涉及NoSQL部分由于在专项优化期间存在诸多细节,特此提炼出来给各位有类似互娱业务场景进行参考。
|
9月前
|
缓存 自然语言处理 算法
阿里P9架构师终于把毕生心血而成的分布式高可用算法笔记开源了
分布式系统无处不在。 一台计算机内部多个互联的处理器组成了一个分布式系统,它们通过“一致性缓存”算法使每个处理器核心看到相同的数据。近三十年来,随着互联网的发展,越来越多的互联网后台系统采用计算机集群的方式来应对海量请求和数据的需求,这个计算机集群也是分布式系统。 为了简化分布式系统的开发,出现了很多为开发者提供分布式框架的开源项目,例如Apache基金会旗下的ZooKeeper项目就是一个应用广泛的分布式框架。 同时,国内也有很多关于如何使用这些分布式框架来搭建应用的书籍,它们极大地推动了分布式系统在国内的应用。我们不仅要知道如何使用这些现成的分布式框架来搭建应用,而且应该知道这些分布
|
10月前
|
存储 SQL NoSQL
高性能分布式No SQL数据库Aerospike(四)——经验总结和最佳实践
高性能分布式No SQL数据库Aerospike(四)——经验总结和最佳实践
190 0
|
SQL 分布式计算 Java
数据治理之元数据管理的利器——Atlas入门宝典(二)
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程。作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置。但是其官方文档不是很丰富,也不够详细。所以整理了这份文档供大家学习使用。
2056 1
数据治理之元数据管理的利器——Atlas入门宝典(二)
|
存储 消息中间件 分布式计算
数据治理之元数据管理的利器——Atlas入门宝典(一)
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程。作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置。但是其官方文档不是很丰富,也不够详细。所以整理了这份文档供大家学习使用。
1023 0
数据治理之元数据管理的利器——Atlas入门宝典(一)
|
并行计算 算法 关系型数据库
【学习视频】第10期2017-PostgreSQL 应用场景实践 - 适合架构师与业务开发者
大家好,这里是PostgreSQL 多应用场景实践 - 沙箱实验
|
运维 NoSQL 大数据
Cassandra技术介绍之开篇
cassandra的技术浅谈
2222 0
|
关系型数据库 大数据 数据库
PostgreSQL生态、原理、应用案例、开发与管理实践 - 南京站 (最全资料下载,PPT+回顾视频)
活动介绍 PostgreSQL发展非常的迅猛,覆盖OLTP,OLAP,NoSQL,搜索,时空,流,图,图像等应用场景,往企业级全栈数据库的方向发展。PostgreSQL的应用场景丰富,在稳定性、性能、可用性、可靠性、容灾、安全性、扩展性等方面不亚于商用数据库Oracle,常被业界称为“开源界的Oracle”。
6281 0
相关产品
云消息队列 MQ
微服务引擎
云消息队列 Kafka 版
推荐文章
更多