一、由来
1、工作中框架是spring+springMVC+zookeeper+dubbox
2、目前有正在运行的项目,正在使用;另外需要加新功能和新项目。
3、同一时间有多个项目在开发
3、当前只有一个代码master 库在支撑
4、每次灰度升级都会带来大大小小的一些问题,影响线上用户使用
5、如何解决?
二、问题分析
1、多个项目同时在跑、却只有一个代码库;大家都往上面push 代码,每次升级都把所有代码升级上去。并且有些代码是没有开发完成的,也没有通过测试。这是非常危险的
2、希望每次升级都只升级开发完成的代码,并且是通过测试的。
3、开发服务器只有一台,有两个基础服务与一个业务服务,及多个消费应用,需要尽可能充分利用这台服务器
4、后台写好代码后发布到开发服务器运行以供,前端开发人员对接接口
5、每个版本都以一个消费应用划分,即:一个总业务服务,一个消费应用
三、问题解决思路
1、每个项目与版本代码通过分支隔离。仅仅只能开发完成时拿到master 中去
2、当开发完成后合并到master 中去,然后发布到测试环境,让测试人员测试,测试通过后再发布到生产环境
2、使用docker,管理zookeeper将基础服务注册到zookeeper 中,并且将业务服务按分组的方式注册到zookeeper中,可以使用单机版,也可以集群
3、业务服务与开发的版本打包成docker 镜像,代码是分支的代码,按版本划分。多个项目同时开发的过程中,因为业务服务是重叠部分。将接口重复注册到zookeeper 中肯定有问题,消费的时候或者调用不到我想要的服务。所以需要通过 dubbo.registery.group隔离
4、将业务服务给定一个group 名称,并且应用在发现服务的时候也是通过group 去发现的。所以可以将不同的项目,隔离出来。
另外也有考虑过使用,注册中心隔离,但考虑到有公用部分(两个基础服务),所以“注册中心隔离”是不合适的。
四、zookeeper 安装与集群
1、安装
#拉取zookeeper 容器
docker pull zookeeper
#创建docker-compose.yml 文件
version: '2'
services:
zoo1:
image: zookeeper
restart: always
container_name: zoo1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo2:
image: zookeeper
restart: always
container_name: zoo2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo3:
image: zookeeper
restart: always
container_name: zoo3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
2、运行
#将路径切换到 docker-compose.yml 文件夹下,执行
COMPOSE_PROJECT_NAME=zk_test docker-compose up -d
考虑教程:https://segmentfault.com/a/1190000006907443?utm_source=tag-newest
五、创建版本镜像