跳转到主要内容

otter

介绍

使用微服务架构进行服务拆分后,当某些服务需要用到基础数据的时候,往往粗暴的通过RPC调用,先到基础服务查询出数据,再把所有结果传入到服务进行例如in,like 查询。开发测试d时候因为数据量不够,通常没什么问题,当系统运行一段时间后,数据量增多后,就会出现性能问题。

诸如经常需要用到的基础数据,比较好的做法是进行数据表冗余。在同一个数据库内直接级联查询。但是,此时将产生一个问题就是数据同步的问题。

使用otter进行数据同步

otter与cacnl都是阿里开源出来的数据同步工具,因为阿里巴巴业务的特殊性,卖家主要集中在国内,买家主要集中在国外,为了提升用户体验,衍生出了杭州机房和美国机房双机房,数据则是一致的。

这不是重复造轮子

阿里的开源一贯是只管开源,不管维护,otter虽然好,但是BUG一堆且没有在维护和跟新,本次是基于阿里已经开放出来的功能进行了一些安装部署上的优化,主要几种在:

  • 很多配置缺失,管理界面只能内网访问
  • 服务一旦停止后就不能重新启动

因此重新打包了镜像,将一些参数移到外部进行启时候替换

docker-compose方式如下k8s方式可以参考相关配置。

重要:一定要挂载持久化数据,否则重启后同步就全部消失了

version: '3'
services:
  otter-server:
    image: swr.cn-south-1.myhuaweicloud.com/vp-park/otter-server:latest
    container_name: otter-server
    restart: always
    privileged: true
    tty: true
    ports:
      - "8080:8080"
    environment:
      - OTTER_MANAGER_MYSQL=IP:PORT
      - MYSQL_USER=user
      - MYSQL_USER_PASSWORD=password
      - MYSQL_DBNAME=otter
      - OTTE_MANAGER_URL=https://domain:port
    volumes:
      - ./zkData:/home/admin/zkData:rw # 重要,一定要挂载持久化数据,否则重启后同步就全部消失了。

或者你已经在使用otter,确并不想更换镜像则可以


# vi manager/webapp/WEB-INF/common/uris.xml
# <serverURI>http://${otter.domainName}:${otter.port}/</serverURI>
# 修改上面的管理地址为你可以访问的管理地址
# /home/admin/manager/bin/stop.sh
# /home/admin/manager/bin/startup.sh     


服务一旦重启后就无法进行同步

# 清空如下5个表后重新添加,因此,需要将将要同步的表配置用保存好,否则就傻逼了

delete from data_media_pair;
delete from data_media;
delete from pipeline_node_relation;
delete from pipeline;
delete from channel;