• 互联网场景下闪存优化测试和应用


     

    闪存在这几年存储领域发展非常快,应用也越来越广泛,如何能更好的使用闪存,本次分享讲一些闪存相关的优化和应用。

    闪存应用场景
    • 数据库

    • NoSQL

    • 分布式存储

    • CDN

    • 公有云存储

    综合上面几种场景看,闪存主要适合有比较高的随机IO需求和带宽需求的场景。场景选择上,也是要发挥闪存的长处。目前上面业务中 未来几年发展比较快的会是在公有云存储这一部分。下图就是某厂商云盘对比,可以看到闪存的价格已经很接近机械硬盘了,而单从每IOPS成本看,性价比会更高。


    闪存概述

    固态硬盘,不过可以从广义理解,从2010年开始在互联网行业大规模应用,性能和稳定性已经得到大规模集群线上验证,应用场景已经非常广泛。当然闪存的IOPS比传统机械硬盘高几个数量级,但是更核心的还是在延迟降低上,优势更大。

    上图就很好的说明了,闪存在访问延迟上的提升。

    提到闪存,不得不提到闪存里非常基础的组件NAND。NAND分类现在也是非常多。


     

    测试

    我们为什么要做测试呢?

    • 了解产品

    • 了解自己

    • 优化自己

    • 优化成本模型

    所以说面对如此多的厂商和产品,如何做到更高效的测试 是一个很重要的问题。虽然现在大家都开始转向云服务,直接接触硬件产品并不多,但是云厂商的测试依然是很重要的一部分。

    测试很Low吗?

    • 测试很简单?

    • 没科技含量?

    • 测试很无聊?


    上图是我们需要了解的存储技术栈。

    测试准则:

    • 明确目标

    • 高效

    • 完备性

    • 可量化

    • 可对比

    • 产出

    测试过程:

    • 明确测试需求

    • 明确测试目标

    • 选择测试工具和测试模型

    • 制定测试计划

    • 测试过程跟踪

    • 测试数据验证

    • 测试报告

    测试工具:

    • IO层面:fio、sysbench、iometer、dd等

    • OLTP:sysbench,TPC-C

    • 辅助工具:tcpcopy、tcprstat、pt-log-player

    SysBench:

    • 开源的多线程性能测试工具

    • 支持CPU IO Mutex OLTP等测试

    • 可以lua脚本定制测试用例

    • 常用的insert select和oltp三种场景

    测试痛点:

    • 重复工作很多

    • 标准不统一

    • 测试周期很长

    • 人工成本高

    • 测试期间异常处理

    • 测试数据处理和测试报告

    解决痛点首先就是规范化,主要是以下几方面:

    • 测试目标标准化

    • 测试工具标准化

    • 测试流程标准化

    • 测试报告标准化

    自动化测试流程:

    • 自动化测试框架

    • 基于Python

    • 包含整体标准测试流程

    • 覆盖主流测试工具

    • 数据处处理和生成报表

    • 定制测试计划

    下图是测试流程图


    自动化的好处也是显而易见的:

    • 大大节省了人力

    • 提高测试效率

    • 测试的更加完整

    • 有精力做更深入的测试优化

    测试闪存需要注意的几点:

    • 我们需要的性能是steady state

    • OP

    • NAND

    • 全盘写

    • 测试时间不能太短

    • 性能抖动

    • 监控 


    MySQL测试的一些问题:

    • 测试数据集大小,至少要过亿

    • 和内存buffer比例,要看在小cache下的性能

    • 物理读

    • 事务复杂度

    • 多表并发

    系统层面的一些注意点:

    • 文件系统:Ext4 xfs

    • IO调度算法

    • IO cpu affinity

    • Scsi-mq/blk-mq(新内核特性)

    测试优化结合

    InnoDB压缩测试:

    • InnoDB内置压缩

    • 基于zlib库

    • 理论可以达到50%左右的压缩比

    • 但是性能有损失

    • CPU时间换存储空间

    • 对SSD寿命有好处

    • 如何用好呢? 


    基于我们之前的测试过程,我们可以得到结论,InnoDB压缩比在50%左右,对写入性能损失比较大, 损失比例在70%左右。根据这个结论,我们就可以针对我们线上业务选择是否需要使用InnoDB压缩。

    TokuDB:

    • MySQL的一个存储引擎,支持事务 ACID 特性

    • 支持多版本控制(MVCC)

    • 基于Fractal Tree Index,非常适合写入密集场景

    • 高压缩比

    • 原生支持Online DDL

    • 主流分支都支持

    • 收费转开源


    这是我们测试结果,可以看到TokuDB更好的压缩比和更好的写入稳定性,当然代价就是更高的CPU消耗。

    总结
    • 现在不再是性能为王的时代

    • 真正了解自己需求才是更重要的

    • 发掘闪存性能,软硬件结合

    • 拓展闪存应用空间

    • 做真正有价值的事情

    • 如何做到更好的软硬件结合(其实现在硬件是超前于一些软件的)


    以此图结尾,不要只活在当下,要勇敢的接受新技术,勇于试错,当然试错成本和收益也要评估和可控的。其实很多技术理解透彻了,可能并没有别人说的“邪恶”。


    活动推荐
  • 相关阅读:
    iOS 多线程/GCD
    iOS推送通知的实现步骤
    Swift中文教程-学习
    设计模式——观察者模式
    SSM学习
    Servlet 学习
    java基础
    DOM中节点
    会议管理系统设计
    springboot与thymeleaf 整合
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5667076.html
Copyright © 2020-2023  润新知