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;