Categorygithub.com/xiaomeng79/istio-micro
module
0.1.6
Repository: https://github.com/xiaomeng79/istio-micro.git
Documentation: pkg.go.dev

# README

istio-micro

Build Status codecov Go Report Card

使用go-micro构建微服务示例请到一下仓库

go-example

介绍

通过一个前后台都可以操作的用户接口,对用户服务进行操作 这是一个使用服务网格(istio)构建微服务的使用示例

技术栈

技术描述
grpc+protobuf服务层之间的通讯
echo应用层接口暴露
mysql存储层
redis缓存层
kafka服务之间异步通讯
jaeger链路跟踪
EFK日志收集存储查询(没涉及,只把日志打到文件)go-log
statik静态文件打包
metric监控报警(influxdb+grafana)
docker-compose容器部署
istio流量控制,服务降级,跟踪,服务发现,分流等
golangci-lint代码风格一致性,静态检查

模块

  • api_backend 后台操作用户数据的RESTful接口
  • api_frontend 前台查询用户的接口
  • srv_user 用户服务
  • srv_socket 推送服务
  • srv_account 账户服务

快速演示(docker-compose)

安装流程

  1. 安装依赖
  • 系统依赖安装
    • git >= 2.17
    • wget
    • make
    • unzip
    • tar
    • go >= 1.13
#ubuntu系统安装
apt-get install git wget make unzip tar -y
  • 可选部署安装(任何一种都可以,也可直接部署二进制文件)
    1. docker >= 1.13.1
    2. docker-compose >=1.19
    3. k8s >=1.12
    4. istio >=1.1
  1. 克隆项目
git clone https://github.com/xiaomeng79/istio-micro.git
  1. 安装运行环境
cd istio-micro && git pull --all
make ver
source ~/.profile 
make install sample
  1. 编译代码
sudo make allbuild
  1. 运行代码
sudo make compose 

可在scripts下新建安装环境变量配置文件(myvariables.sh)

#项目相关的
ProjectName=${ProjectName:-"github.com/xiaomeng79/istio-micro"}
Version=${Version:-"unknow"}
TARGET=${TARGET:-'main'}

#执行环境
GOPROXY=${GOPROXY:-"https://goproxy.io"}
#go mod是否开启
GO111MODULE=${GO111MODULE:-"auto"}
#GOPATH的路径
GOPATH=${GOPATH:-${HOME}"/com_go"}
#其他软件的安装目录
soft_dir=${soft_dir:-${HOME}}
#go安装的版本
go_version=${go_version:-"1.12.9"}
#protoc的版本
protoc_version=${protoc_version:-"3.6.1"}
#protoc引用的路径
protoc_include_path=${protoc_include_path:-"${soft_dir}/protoc-${protoc_version}-linux-x86_64/include"}
#cloc版本
cloc_version=${cloc_version:-"1.76"}
#执行文件路径
cmd_path=${cmd_path:-"${GOPATH}/bin"}

自动化安装不成功,可以选择手动安装

手动安装教程

测试

  1. 浏览器打开消息推送窗口http://127.0.0.1:5002/public/

  2. 打开命令行插入mysql一条数据

curl -X POST \
  http://127.0.0.1:8888/backend/v1/user \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{"user_name":"meng","iphone":"18201420251","sex":1,"password":"123456"}'

也可使用grpc-gateway(网关端口:9998)发送信息

curl -X POST \
  http://127.0.0.1:9998/user \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{"user_name":"meng","iphone":"18201420251","sex":1,"password":"123456"}'
  1. 查看消息推送窗口是否有变化

目录介绍

技术描述
apiapi接口
cinit配置和初始化文件
cmd程序入口
deployments部署文件(docker,k8s,istio)
internal内部公共文件
scripts脚本文件
srv服务

自动化

Makefile

make fmt 
// vendor
make vendor
// 代码测试,代码检查
make test
// 编译单个服务,同时添加版本信息
make build type=srv project=user
// 编译全部服务
make allbuild
// protobuf
make proto
// 生成单个dockerfile
make dockerfile type=srv project=user
// 生成全部dockerfile
make alldockerfile
// docker-compose部署
make compose up
// 打包静态文件
make builddata
// 提交代码到远程仓库
make push msg="提交信息"
// 开启代码性能分析(如type为api,project为frontend)
make pprofon type=api project=frontend
// 关闭代码性能分析(如type为api,project为frontend)
make pprofoff type=api project=frontend
//  清空编译
make clean
// 代码风格检查
make lint

命令行

# 每个执行程序,可以查看版本和提交信息,如:srv_user
./srv_user version

增量更新sql

原理:通过在程序上,加上版本号如:v1.0.1,在数据库记录上一个更新程序程序版本号如:v0.1.1,程序启动会判断更新记录,并将中间的版本号的sql,按照版本号从小 到大排序后,依次执行,执行完成后并更新数据库版本号为最新的版本号

增量更新sql文件说明

监控报警

influxdb提供采集数据存储,grafana提供数据展示,报警

http://127.0.0.1:3000 账号密码:admin

# 新建数据源(influxdb) 地址:http://influxdb:8086
# 导入度量的信息(deployments/config/metrics/gc.json) 可以查看gc和内存信息

代码性能分析(可以线上临时开启分析)

pprof封装库

程序运行的时候会生成进程id(默认在运行目录下server.pid),通过kill命令发送一个信号(默认10)到程序开启性能分析,kill命令发送一个信号(默认12)到程序关闭性能分析

kill -10 3125// 开启代码性能分析

go tool pprof http://127.0.0.1:38888/debug/pprof/goroutine// goroutine
go tool pprof http://127.0.0.1:38888/debug/pprof/heap// heap
go tool pprof http://127.0.0.1:38888/debug/pprof/profile// profile

kill -12 3125// 关闭代码性能分析

生成文档(swagger)

# 生成网关和文档
#需要已经安装过以下依赖(切换到GOPATH)
go get  github.com/golang/protobuf/protoc-gen-go
go get  github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get  github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
#安装依赖后执行
make proto
# 本地文档地址(istio-micro/deployments/config/swagger/srv/user/proto/user.swagger.json)
# 在线文档地址(http://127.0.0.1:9998/swagger/user.swagger.json)
# 可以使用swagger-ui(http://editor.swagger.io/)查看

k8s部署

kubectl apply -f deployments/k8s/api_backend/dev.yaml
kubectl apply -f deployments/k8s/api_frontend/dev.yaml
kubectl apply -f deployments/k8s/srv_user/dev.yaml
kubectl apply -f deployments/k8s/srv_socket/dev.yaml

istio流量控制

执行deployments/k8s目录下各个network文件和网关文件

TODO

  • 完善istio其他配置文件

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author