第四阶段的读写分离 , 但是一写多读 , 当写的单机成为瓶颈时 , 就只能横向或者众向分表了 , 我们一般说得分库分表都是众向分表 , 即选择一个合理的分表策略 , 一般是根据高并发的查询条件设置 , 因为要防止跨表查询 , 同时还得考虑分布式事务的问题 。一个事务里涉及到的表尽量在一个库中 。
第六阶段:NoSQL
有些复杂查询和聚合查询 , 真的不适合使用mysql这种关系型数据库来支撑 , 就需要使用es这类倒排索引的存储引擎或者一些列式存储的mapreduce的来解决 , 此时就需要考虑使用NoSQL来冗余数据存储 , 以解决这类特殊场景的业务查询 。
总结在性能优化过程中 , 加机器是最容易实现的 。所以针对应用层的CPU算力问题是最容易解决的 , 网络层的带宽只要预先算好 , 客户也能欣然接受 。而针对存储层的各种优化都是极为复杂的 , 单机的维护比多机简单的多 , 单写比多写简单的多 , 一个存储的维护也要比多个存储的维护简单的多 , 每一个阶段的优化都意味着更高的维护成本 , 所以优化是根据业务需求被动提出的而不是过度设计出来的 。说白了我们都想舒舒服服地坐在这喝茶看着系统稳定运行 , 不要自己给自己加码提高维护成本 。
提到并发大家就会想到秒杀 , 就会想到红包、春节活动、双十一、12306等等 。他们确实是极为典型的高并发大流量 , 他们的接口qps甚至可以达到几十万上百万 , 他们的存储可能需要支撑几千万上亿的qps 。他们在解决这个问题上使用了各种各样高大上的技术 , 限流熔断 , 分布式存储 , 队列 , 缓存 , 调用链跟踪 , 全链路监控等等等等 。
对于软件开发人员来说 , 性能优化的根本就是在协调CPU、内存、磁盘和网络等硬件设备的性能瓶颈 , 把单机性能优化到极致 , 然后优化为可以支持多机扩展 。不能随心所欲地使用一些流行技术堆积出一个系统 , 解铃还须系铃人 , 找到性能瓶颈的本质才是最关键的 。
推荐阅读
- 新时代的网络工程师需要掌握哪些技能
- 关于一次弱口令的BC渗透
- 朱元璋向元朝称臣,朱元璋怎么打败元朝的
- 诗仙太白是哪朝的著名诗人,诗仙太白是哪里产的
- 对某edu站点的一次渗透测试
- Redis 有哪些数据类型?
- 尉迟恭为什么叫尉迟敬德,尉迟敬德的说法
- 实用-API接口设计
- 刘备有诸葛亮和五虎上将为啥会输,刘备的五虎上将是哪五虎
- JavaScript 如何检测文件的类型?
