今天被面试官问到,你们的系统都有哪些稳定性的保障手段,当时回想了一下,说出了高可用集群,负载均衡,限流削峰,事务回滚一致性,数据库容灾,备用方案,缓存落地与持久化,灰度发布,数据库主从复制,读写分离等,回来后总结了一下这方面的知识,希望大家互相学习
一.数据库方面
衡量一个数据库的吞吐量我们可以看从这两方面看:
内在因素:
• 确定数据库是MySql还是Oracle,不同数据库的搜索引擎和隔离级别都是有差异的。
• CPU是几核?现在的数据库都充分运用了多核CPU的并行处理能力。
• 内存多大?数据库的索引数据、缓存数据都会进入内存中。
•去磁盘的IO能力:数据库文件都存储在磁盘中,所以磁盘的IO能力是影响数据库性能的直接因素。
• 网络宽带:网络的上行和下行带宽,数据库服务器可支持的最大连接数是多少。
外在因素:
• TPS:每秒处理的事务个数,主要是对事务性存储引擎的一个性能指标,比如对数据库增删改
• QPS:每秒的查询处理量,也就是查询,我们常说的并发能力就是TPS
• IOPS:•每秒磁盘进行的I/O操作次数
那么我们可以从以下几个方面来保障数据库系统的稳定性:
1.做数据库并发量评估最好的方法就是做数据库压力测试,在做压力测试的时候我们可以一点一点的加压力,逐步的得出数据库的tps和qps,这样也能判断出能支撑接入的程序和业务,常用的压测工具有 sysbench、Tpcc-mysql 、mysqlslap
2.机器数量:通过压测能预估每台机器能够达到的qps,以及预估系统最大需要承受的qps,来决定机器的数量。假设每台机器能够承受的最大qps是1000,而我们系统预估的qps是3000,这时候就需要三台机器去提供服务。
3.分库分表:单机的存储容量、连接数、处理能力都有限,当单表的数据容量达到1000W或100G以后,做很多操作时性能就会下降,此时要考虑将数据分散到多个数据库中,通过扩充主机的数量来缓解单一数据库带来的性能问题。
4.主从复