基于go-micro微服务的实战-基础服务的部署和搭建(一)

基于go-micro微服务的实战-基础服务的部署和搭建(一)

实战的内容分为几个小节,陆续补上
  • 基础服务的部署和搭建
  • 基于go-micro实现用户服务
  • 实现网关Gateway
  • 实现用户的登录注册
  • Gateway网关层的身份认证
  • Gateway网关层的鉴权-rbac
  • 实现邮件服务,注册成功后请求邮件服务发送注册邮件
  • Gateway网关层的限流降级
  • 基于zipkin实现全链路追踪

实战内容用的是go-micro v3版本,并且这里就不细讲micro服务的使用等其他内容,默认读者已掌握所需技术点:(可以只是了解,无需深入,在实践中去学习和总结)

  • go-micro v3的使用
  • docker基本使用
  • shell脚本
  • zipkin和consul基本使用

文章最后附带完整代码

基础服务的部署和搭建
第一步:我们实战需要支持服务的自动注册与发现,使用的是consul。数据库存储使用的是mysql

为了方便,这里我们都用docker容器来部署启动,简单直接。

这里新建一个工具目录grpc_util存放相关工具操作,同时新建一个shell脚本 (middle_docker/middle.sh),用来启动mysqlconsul,也方便后续直接添加其它服务。

//新建目录和脚本文件
# mkdir grpc_util
# cd grpc_util
# mkdir middle_docker
# vi middle.sh

//把以下内容覆盖
#!/bin/bash
##启动mysql容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123789 --name emysql mysql:5.7

##启动consul服务容器
docker run -d -p 8500:8500 --name econsul consul:1.1

//保存后退出
# cat middle.sh
#!/bin/bash
##启动mysql容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123789 --name emysql mysql:5.7

##启动consul服务容器
docker run -d -p 8500:8500 --name econsul consul:1.12

//给权限
# chmod 755 middle.sh
//执行脚本,启动服务
# ./middle.sh

第二步:这时候mysqlconsul已经启动完成,需要考虑服务可用性,挂了的情况需要支持自动重启。

采用的方案是,利用linux的cron定时任务1分钟检测一次,监控服务挂了就自动重启。所以这里需要用到cron定时任务和一个shell脚本来监控和重启服务

grpc_util目录新建一个监控目录monitor_process,同时新建一个监控脚本eMonitor.sh和监控命令配置文件process.conf

监控脚本eMonitor.sh通过监控配置文件的命令,不存在则重启,并写log日志到当前目录的monitor_err.log

# mkdir monitor_process
# vi eMonitor.sh

//把内容覆盖进去
#!/bin/bash
echo "Monitor Start"

#所需监控的命令配置文件路径
file=/home/tool/golearn/src/emicro_1/grpc_util/monitor_process/process.conf
#当前时间
currTime=`date +"%Y-%m-%d %H:%M:%S"`
#docker容器的前缀,用来区分docker进程还是linux进程
docker_str="docker:"

#监控
while read command
do
  is_docker=0
  if [[ ${command} == ${docker_str}* ]]; then
      is_docker=1
  fi
  #判断为docker容器
  if [ ${is_docker} -eq 1 ]; then
      exists=`docker inspect --format '{{.State.Running}}' "${command:7}"`
      if [ $exists != "true" ]; then
        echo "${currTime}: docker-${command:7} is restart" >> /home/tool/golearn/src/emicro_1/grpc_util/monitor_process/monitor_err.log
        `docker start "${command:7}"`
      fi
  #判断为linux进程
  else
      count=`ps aux|grep -c "${command}"|grep -v "grep"`
      if [ $count -lt 2 ]; then
        echo "${currTime}: ${command} is restart" >> /home/tool/golearn/src/emicro_1/grpc_util/monitor_process/monitor_err.log
        `nohup ${command} > /dev/null 2>&1 &`
      fi
  fi
done < ${file}

监控命令配置文件process.conf,监控以行为基准,一行为一个监控,使用的是启动命令。docker启动的则用docker:为前缀,带上容器名,如docker:emysql

docker:econsul
docker:emysql

到这里,监控服务和重启的脚本已经编写完了,需要把该监控脚本放入cron定时任务,1分钟执行一次监控检测

# vi /etc/crontab
*/1 * * * * root /home/tool/golearn/src/emicro_1/grpc_util/monitor_process/eMonitor.sh

gitee完整代码链接

你可能感兴趣的:(golang,微服务,golang,微服务,cron)