DataX OCSWriter 适用memcached客户端写入ocs


1 快速介绍

1.1 OCS简介

开放缓存服务( Open Cache Service,简称OCS)是基于内存的缓存服务,支持海量小数据的高速访问。OCS可以极大缓解对后端存储的压力,提高网站或应用的响应速度。OCS支持Key-Value的数据结构,兼容Memcached协议的客户端都可与OCS通信。

OCS 支持即开即用的方式快速部署;对于动态Web、APP应用,可通过缓存服务减轻对数据库的压力,从而提高网站整体的响应速度。

与本地MemCache相同之处在于OCS兼容Memcached协议,与用户环境兼容,可直接用于OCS服务 不同之处在于硬件和数据部署在云端,有完善的基础设施、网络安全保障、系统维护服务。所有的这些服务,都不需要投资,只需根据使用量进行付费即可。

1.2 OCSWriter简介

OCSWriter是DataX实现的,基于Memcached协议的数据写入OCS通道。

2 功能说明

2.1 配置样例

  • 这里使用一份从内存产生的数据导入到OCS。
{
    "job": {
        "setting": {
            "speed": {
                "channel": 1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "streamreader",
                    "parameter": {
                        "column": [
                            {
                                "value": "DataX",
                                "type": "string"
                            },
                            {
                                "value": 19880808,
                                "type": "long"
                            },
                            {
                                "value": "1988-08-08 08:08:08",
                                "type": "date"
                            },
                            {
                                "value": true,
                                "type": "bool"
                            },
                            {
                                "value": "test",
                                "type": "bytes"
                            }
                        ],
                        "sliceRecordCount": 1000
                    }
                },
                "writer": {
                    "name": "ocswriter",
                    "parameter": {
                        "proxy": "xxxx",
                        "port": "11211",
                        "userName": "user",
                        "password": "******",
                        "writeMode": "set|add|replace|append|prepend",
                        "writeFormat": "text|binary",
                        "fieldDelimiter": "\u0001",
                        "expireTime": 1000,
                        "indexes": "0,2",
                        "batchSize": 1000
                    }
                }
            }
        ]
    }
}

2.2 参数说明

  • proxy

    • 描述:OCS机器的ip或host。
    • 必选:是
  • port

    • 描述:OCS的连接域名,默认为11211
    • 必选:否
    • 默认值:11211
  • username

    • 描述:OCS连接的访问账号。
    • 必选:是
  • password

    • 描述:OCS连接的访问密码
    • 必选:是
  • writeMode

    • 描述: OCSWriter写入方式,具体为:
      • set: 存储这个数据,如果已经存在则覆盖
      • add: 存储这个数据,当且仅当这个key不存在的时候
      • replace: 存储这个数据,当且仅当这个key存在
      • append: 将数据存放在已存在的key对应的内容的后面,忽略exptime
      • prepend: 将数据存放在已存在的key对应的内容的前面,忽略exptime
    • 必选:是
  • writeFormat

    • 描述: OCSWriter写出数据格式,目前支持两类数据写入方式:
      • text: 将源端数据序列化为文本格式,其中第一个字段作为OCS写入的KEY,后续所有字段序列化为STRING类型,使用用户指定的fieldDelimiter作为间隔符,将文本拼接为完整的字符串再写入OCS。
      • binary: 将源端数据作为二进制直接写入,这类场景为未来做扩展使用,目前不支持。如果填写binary将会报错!
    • 必选:否
    • 默认值:text
  • expireTime

    • 描述: OCS值缓存失效时间,目前MemCache支持两类过期时间,

      • Unix时间(自1970.1.1开始到现在的秒数),该时间指定了到未来某个时刻数据失效。
      • 相对当前时间的秒数,该时间指定了从现在开始多长时间后数据失效。 注意:如果过期时间的秒数大于606024*30(即30天),则服务端认为是Unix时间。
      • 单位:秒
    • 必选:否

    • 默认值:0【0表示永久有效】

  • indexes

    • 描述: 用数据的第几列当做ocs的key
    • 必选:否
    • 默认值:0
  • batchSize

    • 描述:一次性批量提交的记录数大小,该值可以极大减少DataX与OCS的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成DataX运行进程OOM情况[memcached版本暂不支持批量写]。
    • 必选:否
    • 默认值:256
  • fieldDelimiter

    • 描述:写入ocs的key和value分隔符。比如:key=tom\u0001boston, value=28\u0001lawer\u0001male\u0001married
    • 必选:否
    • 默认值:\u0001

3 性能报告

3.1 datax机器配置

CPU:16核、内存:24GB、网卡:单网卡1000mbps

3.2 任务资源配置

-Xms8g -Xmx8g -XX:+HeapDumpOnOutOfMemoryError

3.3 测试报告

单条数据大小 通道并发数 TPS 通道流量 出口流量 备注
1KB 1 579 tps 583.31KB/s 648.63KB/s
1KB 10 6006 tps 5.87MB/s 6.73MB/s
1KB 100 49916 tps 48.56MB/s 55.55MB/s
10KB 1 438 tps 4.62MB/s 5.07MB/s
10KB 10 4313 tps 45.57MB/s 49.51MB/s
10KB 100 10713 tps 112.80MB/s 123.01MB/s
100KB 1 275 tps 26.09MB/s 144.90KB/s 无。数据冗余大,压缩比高。
100KB 10 2492 tps 236.33MB/s 1.30MB/s
100KB 100 3187 tps 302.17MB/s 1.77MB/s

3.4 性能测试小结

  1. 单条数据小于10KB时建议开启100并发。
  2. 不建议10KB以上的数据写入ocs。