• 论一个成熟分布式系统的工具类设计


    前言


    当作为开发者的我们在设计一套复杂分布式系统之前,很多时候,我们会忘记开发配套的一些工具程序。这个工具程序可以是常见的压力测试工具。按照惯常的压力工具的使用手法,用户能够通过命令行输入执行参数来控制压测程序的执行。在后续系统代码快速开发,更新迭代的过程中,我们可以一直依赖这个压力测试工具来测试系统的稳定性。但是问题来了,从系统工具层面而言,一套压力测试工具已经足够了吗?答案显然是不够的。本文笔者借鉴Hadoop对象存储系统Ozone的工具类设计思想,来聊聊这个话题。

    分布式系统工具类设计要点

    下面笔者来逐一阐述一套成熟的分布式系统,它的工具包的一些实现要点。这里笔者暂且把它归为3小类:

    • 性能跟踪,测试类
    • 漏斗排查分析类
    • 通用型类

    下面我们一个个来看。

    性能跟踪,测试工具

    这个是和性能相关的,这类工具在系统开发迭代时的作用会比较突出,一般使用这种工具比较多的是系统代码的主要开发者们。

    在这个小类里,我们可以分为2个小工具模块:

    第一个模块,压力测试工具。压力测试工具的作用环境将完全是真实环境,而且能够制造出足够多的压力,来测试实际环境。
    第二个模块,基准测试工具(Benchmark)。这个测的要比压测工具更加细致化了,它并不强依赖真实物理环境。它可以针对特定模块,特定操作逻辑做性能测试(指定不定的线程数,循环数等等)。比如我们可以利用JMH(Java Micro Benchmark)来做这个事情。

    漏斗排查分析类


    这个在系统问题处理时,为用户所使用的。这类工具使用的一般形式是一种查询操作,输入指定条件值,然后工具返回结果。以存储系统的工具类为例,有下面2种形式:

    第一种,指定某个数据id,工具会从系统当前内存元数据中进行查找。这种方式的优缺点都非常明显,优点是操作简单,便捷,这是建立在前面给定的条件已经是非常详细的情况。如果查询条件模糊,就会带来全局的查找,延时就会比较厉害了。
    所以这里我们有了第二种方案,将系统元数据dump下来,然后在以离线的方式慢慢二次分析或查询。这种方式也是我们会比较推荐的。

    通用型类

    第三类,通用型工具,这种工具比较简单往往。比如用户想生成得到一个系统基本使用配置文件,诸如此类。

    以上是笔者借鉴Hadoop Ozone工具类模块的设计,所得所想。

  • 相关阅读:
    使用一系列命令生成字母数字符号组合
    linux分析apache日志获取最多访问的前10个IP
    shell脚本输出九九乘法表
    shell脚本输出空心等腰三角形
    awk与sed命令面试题整理
    linux分析apache日志获取最多访问的前10个IP
    iOS开发-由浅至深学习block
    PM常用软件&工作平台
    iOS开发之—— 各种加密的使用(MD5,base64,DES,AES,RSA,DSA)
    MVVM With ReactiveCocoa
  • 原文地址:https://www.cnblogs.com/bianqi/p/12183555.html
Copyright © 2020-2023  润新知