otter
介绍
使用微服务架构进行服务拆分后,当某些服务需要用到基础数据的时候,往往粗暴的通过RPC调用,先到基础服务查询出数据,再把所有结果传入到相关服务进行例如in,like 查询。开发测试的时候因为数据量不够,通常没什么问题,当系统运行一段时间后,数据量增多后,就会出现性能问题。
诸如经常需要用到的基础数据,比较好的做法是进行数据表冗余。在同一个数据库内直接级联查询。但是,会将产生数据同步的问题。
使用otter进行数据同步
otter与cacnl都是阿里开源出来的数据同步工具,因为阿里巴巴业务的特殊性,卖家主要在国内,买家主要在国外,为了提升用户体验,衍生出了杭州机房和美国机房双机房,既使用工具将数据同步为一致的。
这不是重复造轮子
阿里的开源一贯作风是只管开源,不管维护,otter虽然好,但是BUG一堆,因此对安装部署脚本做了一些修改:
- 管理界面只能内网访问
- 服务一旦停止后就不能重新启动
因此重新打包了镜像,将一些参数移到外部进行启时候替换。
docker-compose方式如下,k8s方式可以参考相关配置。
重要:一定要挂载持久化数据,否则重启后同步就全部消失了
重要:这个软件的登录授权功能等于于无,因此,在设置OTTE_MANAGER_URL时,应该设置一个并不存在的域名后,然后使用host表来配置
推荐使用nginx-ingress注解认证或者nginx提供的basic认证
# 创建一个键值对(opaque)密钥,
# 键为 auth
# 值为 htpasswd -c auth username 生成
# 在线生成 https://www.bejson.com/encrypt/htpasswd/
# 为ingress增加注解
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
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
初始化数据库脚本
先用**/bin/bash**命令行启动容器
# 找到数据库初始化文件
cd /home/admin/bin
# 使用mysql链接到数据库并创建数据库
create database otter;
# 恢复数据
mysql -h127.0.0.1 -uroot -ppassword < ddl.sql
打开channel_list.html报错
# 清空如下5个表后重新添加,因此,需要将将要同步的表配置用保存好,否则就傻逼了
delete from data_media_pair;
delete from data_media;
delete from pipeline_node_relation;
delete from pipeline;
delete from channel;