以下结论均为本人总结,如果不对,往指出共同学习。
准备工作
项目背景介绍
一共三个端的程序,首先是面向用户的一个客户端,以及一个面向商家的一个商户端,以及一个PC端的后台管理,这种项目算是比较大众的项目了。
项目的整体架构为一个eureka注册中心,gataway网关,项目的日志处理,以及SpringSession微服务共享session(为以后准备),一个PC端,一个商户端,一个客户端。
使用的数据库有MySQL8,Redis6(项目不大,目前都不是集群,之后会做一个定时备份MySQL,后期如果有需求可以做一个主从复制读写分离或者集群)
整理出来的jar包分别有一下几个
eureka,gateway,PC端,商户端,客户端
后端一共三台服务器
192.168.1.11
192.168.1.12
192.168.1.13
由于服务器有限,全部搭建起来其实感觉更像单体项目,并没有体现出来微服务的优点。
11号 | 12号 | 13号 |
---|---|---|
eureka、gateway | 商户端、PC端、MySQL、Redis | 客户端 |
首先分配的思路为客户端请求量>商户端+PC端,所以就将客户端的放在了一个服务器上,将剩下的两个端和存储的放在了一起,至于eureka和gateway主要是想着三个端的请求都先打到网关上后在进行断言分流到各个端,所以将gateway单独放在了一个服务器,eureka占用需求比较小所以也放在了同一台机子上了,按道理来说存储这块应该单独一台机子的,但是这个项目本地存储的数据量还是比较小的,大部分使用的还是第三方的接口,由第三方进行处理部分数据,本地的数据库相当于存储一个中转数据的,所以将那一堆都放在了12号机子。
后续如果机子足够我是这样想的给客户端加1-2台,从gateway那边进行负载均衡,商户端以及PC端由于这个项目使用这俩端的人极少所以不做扩展,将MySQL单独放在一台机子上面做主机,12号机子做一个从机做主从复制,当然也可以两个主机做Galera Cluster for MySQL,之后将gateway单独提出来放一台机子上面,然后将eureka和Redis放在一台机器上,如果可以在做一个消息队列RabbitMQ(主要处理异步以及定时),后面如果项目在大点加一个SpringCloudBus消息总线,方便热刷新。
由于微服务这边好多东西都要设置密码,比如eureka的健康检测信息什么的,如果都对外网开放这些都要设置security什么的,太麻烦了,然后这三台服务器之对外开放一个443(gateway端口),其他端口全部做限制,可以选择在Linux内部的防火墙设置,也可以在服务器的控制台设置安全组,配置所有端口只能服务器内网访问以及公司电脑访问,自己先在自己电脑上找到公司的公网IP进行设置即可,这样的话前端直接访问网关的端口,网关进行断言进行内网转发请求。
目前的思路就是这样的,如果大家有好的意见尽管提。
部署
将5个包分别上传到各个服务器上面,我本人比较喜欢整洁一点,先在Linux中的创建点文件夹
mkdir /usr/local/project # 在三个服务器都进行创建项目文件夹
mkdir /usr/local/project/client # 创建一个客户端文件夹将客户端jar包放在此处,其他几个jar包一样这样放在各个服务器上面
nohup java -jar jp_client-1.0.jar & # 使用此命令可以后台启动Java程序,同时在当前生成一个nohup.out文件,主要是Java输出的消息,其实本项目已经有日志了而且日志做的还比较细每个等级的日志不同文件夹每天不同日志文件,但是我个人还是比较喜欢直接看nohup.out文件的
tail -f nohup.out # 持续读日志文件,方便分析,这个文件之后可以做一个shell定时脚本清空一下,毕竟已经有日志了,这个文件只是实时观看信息的输出的,时间长了文件还特别大
这样项目就已经部署成功了,如果大家又更好的已将可以提出来一起学习。