go-zero学习—go-zero-looklook

365 阅读4分钟

1.环境搭建

1.1 开发工具配置

(1)VSCODE连接阿里云。
如何在Linux上创建和管理用户账户
vscode远程连接不上阿里云机器?
高版本vscode连接不上云主机的原因
如何在Gitee上拉取代码

(2)Mac电脑怎么免密登陆阿里云(为了vscode免密连接)。
centos7 重装ssh服务(可参考其对/etc/ssh/sshd_config的配置)
具体配置->SSH 免密登录(设置后仍需输入密码的原因及解决方法)Git配置多个SSH-Key
ssh debug策略->解决Linux普通用户配置SSH免密登录不生效 
遇到的问题:ssh免密码登陆设置时Authentication refused: bad ownership or modes错误解决方法

1.2 运行环境配置

1.2.1 遇到的问题

(1)docker容器重启问题
问题:
  运行docker-compose -f docker-compose-env.yml up -d时,发现kafka、elastic、jaegertracing、go-stash在不停的重启。
解决策略:
  通过docker logs ...命令查看日志发现elastic、jaegertracing反馈的是cpu、内存不够用。因此,更改云服务ECS配置,由4核(vCPU) 4GiB改为4核(vCPU) 8GiB的。 最终阿里云的配置如下:

CPU&内存:4核(vCPU) 8 GiB
操作系统:CentOS 7.9 64位
公网带宽:100 Mbps
挂载的云盘:ESSD Entry云盘 40GiB (2120 IOPS)

(2)创建数据库命令
CREATE DATABASE IF NOT EXISTS looklook_order DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; 创建数据库后,可以使用DBeaver执行deploy/sql/looklook_order.sql脚本(创建表),如下图导入执行该脚本。

(3)kibana启动不了问题。
问题描述:按照Readme,访问kibana : <http://xxx:5601/>,发现访问不了。
解决策略:参考Kibana server is not ready yet [closed],通过Deleting .kibana* indexes fixed the problem,即执行curl --request DELETE 'http://xxx:9200/.kibana*'

(4)阿里云 云服务器空间不够问题
问题排查:
  启动项目容器后过一段时间发现服务器空间不够用了,通过df -h可以查看到磁盘信息已经占满了,通过命令du -sh ./*一路查看下去,发现是文件夹var/lib/docker/overlay占用空间过大。
解决策略:
  参考Docker Build Cache 缓存清理,运行命令docker system df,可以查看到是Build Cache占用太多空间,运行docker builder prune来清理缓存。

(5) 项目日志收集到es失败。
(filebeat收集日志->kafka -> go-stash消费kafka日志->输出到es中,kibana查看es数据)

  • kafka创建的topic不可消费或生成消息问题。
    问题描述:
       创建looklook-log等topic后发现分区leader为none(运行./kafka-topics.sh --describe --zookeeper zookeeper:2181 --topic looklook-log命令)。 解决策略:
       先使用docker rm 镜像id命令来删除kafka、zookeeper镜像,再运行docker-compose -f docker-compose-env.yml up -d命令重启kafka、zookeeper。
    在尝试解决该问题时,看到的比较有用的kafka或zookeeper命令链接有:Linux下的kafka终端发送、接收消息(生产、消费模式查看kafka在zookeeper中节点信息和查看方式

  • go-stash问题 解决:根据Readme,重启一次go-stash就好。即先docker stop go-stash,后docker start go-stash

1.2.2 待学习的知识

1.2.3 本项目亮点

(1) 本项目依赖的lyumikael/gomodd:v1.20.3镜像,其以golang-1.17.7-alpine为基础镜像,安装了modd。该镜像提供了运行项目所依赖的golang(即golang-1.17.7),并可以监控app下所有的api+rpc启动服务(即modd作用),若app下的api+rpc内文件有改动就进行对应的热加载。
lyumikael/gomodd:v1.20.3镜像使用docker数据卷,把外部的项目目录挂载到了镜像内部的/go/looklook目录(见项目文件docker-compose.yml),可以使用命令 sudo docker exec -it ... sh进入该镜像进行验证(修改镜像内部文件或创建新文件后,看下镜像外部对应文件是否有变化)。

docker exec -it kafka /bin/sh
cd /opt/kafka/bin

./kafka-topics.sh --describe --zookeeper zookeeper:2181 --topic test

./kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic test

./kafka-console-producer.sh --broker-list kafka:9092 --topic test

1.2.4 调试、压测项目api和rpc服务

  • 调试:可以使用Apifox调试项目中的api、rpc。项目内的nigix对内部api服务做了映射,可以直接通过访问nigix的方式访问内部的api。若要通过Apfox访问项目内部的rpc服务,需要先在docker-compose.yml中把rpc服务的端口做个映射,使外部可以访问。
  • 压测:参考go zeroe的-限流(并发控制),可以使用hey对api服务做压测,可以使用ghz对rpc服务做压测(同样,需要先在docker-compose.yml中暴露rpc服务的端口)。