在我的生产环境中,我有一个运行在16gig内存上的MySQL服务器实例,每小时处理多达20,000个查询。我的桌子的大小正以每月200万的速度增长。这些数字预计会随着时间的推移而上升,但我不确定何时需要改进架构。
如何能够对这种情况采取主动态度并对未来的系统进行验证?
升级硬件在时间和资本效率方面的购买量是否很大?
在这种情况下,通常的做法是什么,如果我们每3个月将流量增加一倍,那么分片是否会自然发展?还是有其他选择吗?
我如何判断我的系统是否达到峰值,有哪些可用于分析数据库的工具?我将用它来衡量它的指标是什么?
答案 0 :(得分:6)
很难回答可扩展性这么大的问题。
首先,单台机器上的硬件升级时间不长 - 甚至不是短期选项,因为您似乎计划呈指数增长(每3个月x2很大,从每月2M行开始) 。因此,您必须找到分布式可扩展硬件架构。
然后会想到两个基本选项:
如果您坚持使用不断增长的表格的SQL存储,则必须在clustering和replication之间进行选择。从我的观点来看,后者往往比前者更具成本效益和更快,但有点难以解决。
在这里,你会在Advanced MySQL Replication Techniques上找到一篇非常有趣的论文。
然后,您可以从partitionning或更好,sharding开始,如前所述。
请注意,某些MySQL产品似乎提供auto-sharding clusters。
另一个选择显然是设想在怪物表上使用NoSQL技术。分布式键值存储系统在可伸缩性方面几乎是无成本的,最多是线性的。
另一点是,键值可以与分布式缓存(例如众所周知的Memcached一起使用)优雅地工作,非常容易在大多数语言中使用API设置,以非常低的成本获得非常好的性能。