高并发、高写入 DB 的基础架构

Jus*_*tin 19 mysql replication mongodb cassandra

我的要求是:

  • 3000 个连接
  • 70-85% 写入与读取

目前,我们将高 CPU 超大实例的连接数最大化为 700。所有 8 个内核都已达到最大值。我们认为这是并发连接数,因为内存很好。写入本身非常简单(验证缓慢)。要扩展到 3000,我们需要转到多台服务器,当前选项:

  • MySQL 分片
  • MongoDB 集群
  • 卡桑德拉
  • Hadoop 和 MySQL(Hadoop 缓存,单个转储到 MySQL)
  • MongoDB & MySQL(我们使用 mongo 代替 Hadoop,用于缓存)

要处理这个数量的连接,有几个问题:

  1. MySQL Sharding 可以处理并发连接吗?
  2. 任何单个主节点都可以处理这些并发连接,还是像 Mongo 这样的多头节点是更好的选择?

如果我没有很好地描述我的问题,我深表歉意。请提问。

Rol*_*DBA 5

如果您使用 MySQL 作为主数据库,您可能需要考虑通过 MySQL 复制使用星型拓扑。

现在,在你对 MySQL 复制说 UGHHH、ROFL 和 OMG 之前,请听我说。

星型拓扑允许您写入一个数据库服务器(称为分发 Mster [DM])并将 SQL 命令发送到多个数据库服务器。你如何设置这样的数据库基础设施?

这是描述

您有 5 个数据库服务器(服务器 A、B、C、D、E)

服务器A

  • 在 MySQL 复制设置中,它将是 Master
  • 作为 DM 扮演特殊角色
  • 服务器主 B、C、D、E
  • 所有表都使用存储引擎BLACKHOLE (/dev/null)
  • 只存储二进制日志
  • 裸机
  • 好处
    • 写入速度非常快,因为 DM 上的所有表都使用 BLACKHOLE
    • 网络延迟不是问题,因为读取占数据库活动的 15-30%
    • 所有从站都严格从 DM 更新

服务器 B、C、D、E

  • A的奴隶
  • 为繁重的 SELECT 服务奠定基础
  • 服务器可以是虚拟的或裸机的
  • 对于用户表使用存储引擎 InnoDB 的所有服务器
    • 它可以作为热备份数据库服务器
    • 可以对其运行非侵入式备份
  • 对于其用户表使用存储引擎 MyISAM 的所有服务器
    • 设置只读选项
    • 表可以重做其行格式以加速读取

我以前写过关于这个的帖子

保持 MySQL 复制处于最佳状态


小智 1

如果它是您的特定应用程序的一个选项,也许您可​​以使用某种异步方式将数据写入数据库(工作队列、批量插入...)和/或通过前面的一些代理将许多客户端连接从数据库中移走。

通过分片,您通常可以很好地扩展(2x 数据库服务器 == 2x 连接),但这在很大程度上取决于数据集的性质以及如何将其拆分到分片上。