Facebook用户量十分庞大,为什么还使用MySQL数据库?

尽管Facebook使用MySQL,但它们并不是一成不变的使用它 。事实上,他们的团队已经提交了许多MySQL核心和Innodb插件的高性能增强 。他们的主要重点是增加性能计数器到Innodb 。其他更改集中在IO子系统上,包括以下新功能:
1 innodb_io_capacity:设置服务器的IO容量以确定后台IO的速率限制
2 innodb_read_io_threads, innodb_write_io_threads:设置后台IO线程
3 innodb_max_merged_io:设置可能合并到一个大IO请求中的相邻IO请求的最大数量
Facebook使用MySQL作为键值存储,其中数据随机分布在一大组逻辑实例中 。这些逻辑实例分散在物理节点之间,负载均衡在物理节点级完成 。Facebook已经开发了一个分区方案,其中全局ID被分配给所有的用户数据 。他们也有一个自定义的归档方案,它基于每个用户的频繁和最近的数据 。大部分数据是随机分布的 。令人惊讶的是,据传Facebook有1800个MySQL服务器,但只有3个全职DBA
Facebook主要将MySQL用于结构化数据存储,例如墙贴,用户信息等 。这些数据在各个数据中心之间复制 。对于blob存储(照片,视频等),Facebook使用一个自定义的解决方案,涉及外部的CDN和内部的NFS
同样重要的是,Facebook大量使用Memcache,这是一种内存缓存系统,通过在RAM中缓存数据和对象来加速动态数据库驱动的网站,以减少阅读时间 。Memcache是Facebook的主要缓存形式,大大减少了数据库的负载 。拥有一个缓存系统可以使Facebook的速度与调用数据一样快 。如果不需要访问数据库,则只需根据用户标识从缓存中获取数据
所以,“Facebook使用什么数据库”似乎是一个简单的问题,你可以看到他们已经添加了各种其他系统,使其真正的具有网络可扩展性 。但是,仍然可以自由地使用这样一个观点:“MySQL和Oracle或者MS SQL Server一样好或者更好,因为就算只有Facebook使用它,它也有5亿用户!”
谢邀 。我分享下他们MySQL运维优化的逻辑,大家可以借鉴参考一下 。本质上讲,他们用的是修改后的MySQL,不是原生MySQL 。Facebook创办以来就一直在使用MySQL数据库,也随着数据量的增大而不断改进他们的自有MySQL,目前已经可以轻松支撑来自20多亿用户的数据量 。

Facebook用户量十分庞大,为什么还使用MySQL数据库?

文章插图
所以Facebook优化MySQL的经验我觉得有很多借鉴学习之处,有相关数据库经验也可以在评论区讨论探讨,互相学习学习 。
1.每台机器都使用多实例的模型,每个机器放多个实例,每个实例放多个DB,多实例之间没有资源隔离,充分发挥实例间的最大性能 。
【Facebook用户量十分庞大,为什么还使用MySQL数据库?】2.将大部分核心业务引擎切换到MyRocks,不改变服务器配置大概可以节省一半服务器资源 。
Facebook用户量十分庞大,为什么还使用MySQL数据库?

文章插图
3.主从结构采用基于GTID的一主多从结构,外加一个基于lossless semi-sync机制的mysqlbinlog实现的binlog server 。
4.所有的备份都是基于mysqldump实现,可以无需备份索引,只备份数据,而且备份文件压缩比高,更节省磁盘空间,通过改进了的mysqldump,备份过程中还可以进行额外压缩 。当然备份时也会控制并行备份的数量,避免影响在线业务性能 。
5.快速部署从库可使用xtrabackup在现有存活的SLAVE实例上备份,也可在主库上发起备份,再利用WDT(或者是BT)协议传输到异地,用于拉起从库 。
Facebook用户量十分庞大,为什么还使用MySQL数据库?

文章插图
总而言之,Facebook在优化MySQL方面做了很多努力,也提交了很多优秀的Innodb插件来大大提高了MySQL主从集群的性能 。而且有传闻称,Facebook拥有大约1800台MySQL服务器,内部却只有三名数据库管理员(DBA) 。这有点匪夷所思,不过也侧面说明Facebook确实在MySQL优化方面有着非常不错的效果 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。