背景

我们在开发 Spring Cloud 微服务时候由于本机内存有限,无法同时启动多个微服务,我们如果搞?
PS: 如笔记本 8G 内存本地运行 10 个微服务,基本上是是卡死状态。为了尽量达到无需配置本地环境就可以通过隧道连接云端服务器的环境进行的开发。

解决方案

1、简单应用内存优化

针对Java应用内存不够,可以在 IDEA 的应用面板设置 VM options 参数 -Xms128m -Xmx256m,来降低每个服务的内存占用,但是这并不是根本解决问题的办法,更好的方案见2、。

2、应用组件化部署

  • 本地只保留当前开放应用到的服务模块,其他业务模块部署云服务器
  • 通过 VPN 或者其他技术,实现本地 & 云服务器 之间组网,实现互相之家的通信,并且指定服务中心的网卡,实现服务调用的正常注册。 由于搭建 VPN 成本较高且难度较大,本文讲述如何使用 ZeroTier 实现

3、开始搭建

  • 购买云服务器(阿里云、腾讯云、华为云均可),推荐内存大一点,所有共同环境都采用云环境,演示略
  • 初始化 CentOS7 服务器环境,执行一键脚本
wget -N --no-check-certificate https://raw.githubusercontent.com/Lcry/Command-file/master/centos7init.sh && sh centos7init.sh LcryCentos7
或者
curl -LJO https://raw.githubusercontent.com/Lcry/Command-file/master/centos7init.sh && sh centos7init.sh lcryCentos7
  • 安装 zerotier,本地和云服务器都要安装
# If you’re willing to rely on SSL to authenticate the site, a one line install can be done with:
curl -s https://install.zerotier.com | sudo bash

# If you have GPG installed, a more secure option is available:
curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
官方网站下载地址:
https://www.zerotier.com/download/

4、部署 ZeroTier 组网

概念:ZeroTier is a smart Ethernet switch for planet Earth.(用于地球的智能以太网交换机)通俗来讲就是 Peer to Peer (P2P) ,ZeroTier 根服务器记录请求路径来做类似于 DNS 的解析。主要功能,就是可以把多个不同网络的设备连接在一起,用来就像在一个局域网下 如下图:

ZeroTier 敏捷组网教程

Zerotier 定义了几个专业名词:

  • PLANET 行星服务器,Zerotier 根服务器
  • MOON 卫星服务器,用户自建的私有根服务器,起到代理加速的作用
  • LEAF 网络客户端,就是每台连接到网络节点。

5、注册 zerotier 服务

  • https://my.zerotier.com/ 网站注册一个帐号,然后新建一个网络,网段任意选择,最好和本地网络冲突
  • 客户端加入网络,使用命令
zerotier-cli join + 生成的16位ID #创建网络生成的16位ID
  • 网站上同意授权加入网络,同时可以修改加入后的 IP 地址
  • 多个网络加入,然后 ping 看看是否互通

6、部署中继加速服务 MOON 卫星

  • 需要有一个公网 IP,打开默认 UDP 端口号:9993
  • 中继服务器执行下面脚本:
# 这里为了有写入文件的权限
sudo chmod 777 /var/lib/zerotier-one

cd /var/lib/zerotier-one

sudo zerotier-idtool initmoon identity.public > moon.json
  • 修改 moon.json 配置文件,示例如下:
"stableEndpoints": ["主机ip1/9993","主机ip2/9993"] #修改为VPS公网IP/9993
还需要注意moon.json中的 id 值,它是 MOON 服务器的 ID,是一个 10 位的字符串,也可以用sudo zerotier-cli info查看,后面会用到。
  • 继续生成密钥文件
zerotier-idtool genmoon moon.json
# 此ID 非常重要对应 唯一服务ID (在 zerotier 后台也能看到)
grep id /var/lib/zerotier-one/moon.json | head -n 1

mkdir /var/lib/zerotier-one/moons.d

cp 000000XXX moons.d/

systemctl restart zerotier-one

# 唯一服务ID两边一样的
zerotier-cli orbit 唯一服务ID 唯一服务ID

zerotier-cli listpeers
  • windows 加入 moon,下载生成 0000 开头的密钥文件到本地,Windows 目录在 C:\ProgramData\ZeroTier\One,新建 moons.d 文件夹,把密钥文件放进去,然后重启服务即可

7、常用命令

# 查看状态
zerotier-cli status

# 加入网络
zerotier-cli join ################

# 离开网络
zerotier-cli leave ################

# 列出网络
zerotier-cli listnetworks

# 重启zerotier服务
systemctl restart zerotier-one

参考教程

【远程办公】要啥没啥,5分钟如何实现内网穿透

ZeroTier-moon-设置教程

文章目录