前言
当作为开发者的我们在设计一套复杂分布式系统之前,很多时候,我们会忘记开发配套的一些工具程序。这个工具程序可以是常见的压力测试工具。按照惯常的压力工具的使用手法,用户能够通过命令行输入执行参数来控制压测程序的执行。在后续系统代码快速开发,更新迭代的过程中,我们可以一直依赖这个压力测试工具来测试系统的稳定性。但是问题来了,从系统工具层面而言,一套压力测试工具已经足够了吗?答案显然是不够的。本文笔者借鉴Hadoop对象存储系统Ozone的工具类设计思想,来聊聊这个话题。
分布式系统工具类设计要点
下面笔者来逐一阐述一套成熟的分布式系统,它的工具包的一些实现要点。这里笔者暂且把它归为3小类:
- 性能跟踪,测试类
- 漏斗排查分析类
- 通用型类
下面我们一个个来看。
性能跟踪,测试工具
这个是和性能相关的,这类工具在系统开发迭代时的作用会比较突出,一般使用这种工具比较多的是系统代码的主要开发者们。
在这个小类里,我们可以分为2个小工具模块:
第一个模块,压力测试工具。压力测试工具的作用环境将完全是真实环境,而且能够制造出足够多的压力,来测试实际环境。
第二个模块,基准测试工具(Benchmark)。这个测的要比压测工具更加细致化了,它并不强依赖真实物理环境。它可以针对特定模块,特定操作逻辑做性能测试(指定不定的线程数,循环数等等)。比如我们可以利用JMH(Java Micro Benchmark)来做这个事情。
漏斗排查分析类
这个在系统问题处理时,为用户所使用的。这类工具使用的一般形式是一种查询操作,输入指定条件值,然后工具返回结果。以存储系统的工具类为例,有下面2种形式:
第一种,指定某个数据id,工具会从系统当前内存元数据中进行查找。这种方式的优缺点都非常明显,优点是操作简单,便捷,这是建立在前面给定的条件已经是非常详细的情况。如果查询条件模糊,就会带来全局的查找,延时就会比较厉害了。
所以这里我们有了第二种方案,将系统元数据dump下来,然后在以离线的方式慢慢二次分析或查询。这种方式也是我们会比较推荐的。
通用型类
第三类,通用型工具,这种工具比较简单往往。比如用户想生成得到一个系统基本使用配置文件,诸如此类。
以上是笔者借鉴Hadoop Ozone工具类模块的设计,所得所想。