Skip to content

本平台的核心优势在于通过微服务实现了能力解耦与按需定制,用户只需简单配置即可快速接入,享受由智能模型驱动的全面服务。平台以一座桥梁的角色存在着,将复杂的业务逻辑和强大的算力资源紧密连接,促进高效的资源调度和信息流转。

Notifications You must be signed in to change notification settings

AdrianWangs/ai-nexus

Repository files navigation

更新计划

  • go 配置中心的代码编写
  • go 用户微服务的编写
    • 登录
    • 注册
    • 用户信息修改
    • 用户信息查询
    • 第三方登录(后期计划)
    • JWT 鉴权
  • ai 智核微服务的编写
    • 通用 ai 的接口编写
    • 反射机制调用函数
    • 工作流
  • 前端的编写
  • go 用户部署的配置文件
  • 编写thrift模板代码来配置自己的模板文件
  • java demo 的编写

目录结构

.
├── README.md
├── api-test // 请求接口测试
├── compose.yaml // docker-compose 配置文件
├── go-common // 存放公共的go代码
│   ├── conf // 配置文件
│   ├── error_code // 错误码
│   ├── go.mod // go 依赖包
│   ├── middleware // 中间件
│   │   └── jwt.go // jwt中间件
│   ├── nacos // nacos配置,含配置中心和服务发现
│   └── utils // 工具类
├── go-service // 存放go的微服务
│   ├── run.sh // 一键运行所有微服务
│   └── user // 用户微服务
│       ├── biz //业务逻辑相关的代码,主要修改这里
│       │   ├── dal // 数据访问层,用于初始化数据库和数据库相关的业务逻辑
│       │   ├── handler //(http 相关的)相当于 mvc 中的 controller,用于处理请求和返回响应
│       │   │   └── user_microservice
│       │   │       └── user_service.go
│       │   ├── router //路由相关的代码,用于初始化路由和中间件
│       │   │   ├── register.go
│       │   │   └── user_microservice
│       │   │       ├── middleware.go
│       │   │       └── user-service.go // 这种文件不要修改,因为每次生成代码都会覆盖
│       │   └── service //业务逻辑层,用于处理业务逻辑
│       ├── build.sh // 一键编译当前微服务
│       ├── conf // 配置文件,是单个微服务的配置文件,其中 nacos 相关配置是公共的,不在这里配置
│       │   ├── conf.go
│       │   ├── dev // 开发环境配置
│       │   ├── online // 线上环境配置
│       │   └── test // 测试环境配置
│       ├── docker-compose.yaml // 构建当前微服务所需的docker环境
│       ├── go.mod // go 依赖包
│       ├── handler.go //业务逻辑入口,更新时会覆盖
│       ├── hex_trans_handler.go // 业务逻辑入口,更新时不会覆盖
│       ├── kitex_gen // 生成的代码,这里不要修改
│       ├── main.go // 主函数
│       ├── model // 数据模型
│       ├── readme.md // 当前微服务说明文档
│       ├── script // 脚本文件
├── go.work  //存放go的工作目录
├── idl //存放用于生成代码的thrift文件
├── k8s-config //k8s的配置文件
│   ├── auth.yaml //创建服务账号和角色
│   ├── cluster-config.yaml //创建服务
│   ├── database.yaml //创建数据库
│   ├── ingress.yaml //创建ingress规则
│   └── namespace.yaml //创建命名空间
├── redis // redis 数据存放的目录,用于持久化
└── some-think.md // 项目说明文档,整个项目的构思

docker-compose 本地开发环境部署

一、部署环境

使用 dockcer-compose 部署本地开发环境

docker-compose up -d

二、运行服务

1. 一键运行(不推荐)

进入到 go-service 目录下,运行如下命令

bash run.sh

这个命令会自动运行 go 的所有微服务,如果需要查看日志,可以使用如下命令

tail -f  微服务名称/微服务名称.log

但是这里有个问题,就是每次关闭得手动关闭,使用以下步骤:

  1. 查看所有相关端口的进程:
lsof -i:端口号
  1. 杀掉进程
kill -9 进程号

2. 单个运行

进入到 go-service 目录下,这个目录下全部都是微服务的代码,可以进入到对应的微服务目录下,运行如下命令

go run .

这个命令会自动运行 go 的所有微服务,如果需要查看日志,可以使用如下命令

k8s线上负载均衡环境部署

一、编写go代码

二、使用Dockerfile更新镜像

手动构建

  1. 将微服务目录的Dockerfile拷贝到根目录下
  2. 构建镜像
docker build -t 微服务名称:版本号 .
  1. (可选)推送镜像

运行脚本

或者其实也可以使用我编写的脚本来自动构建镜像

sh deploy.sh

windows电脑点击deploy.bat即可运行

三、使用k8s部署微服务

先配置nginx-ingress进行端口转发

  1. 安装helm,参考在线教程
  2. 安装nginx-ingress
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx
  1. 运行k8s-config/auth.yaml文件,创建服务账号和角色,以保证服务的pod可以正确被创建
kubectl create namespace go-zero-demo
kubectl apply -f k8s-config/auth.yaml 
  1. 运行k8s-config/cluster-config.yaml文件,将服务跑起来

这里需要注意一下,使用配置中的镜像名称,需要修改配置文件中的镜像名称

kubectl apply -f k8s-config/cluster-config.yaml
  1. 运行k8s-config/ingress.yaml文件,创建ingress规则,以保证服务可以被外部访问
kubectl apply -f k8s-config/ingress.yaml

可以运行如下命令查看服务是否正常运行

kubectl get pods --all-namespaces

mac 电脑使用 minikube 发现不能访问时,可以使用如下命令查看是否是因为ip地址不对导致的

minikube tunnel

使用自定义代码生成来生成代码(尚不完善)

  1. 安装 cwgo,教程:cwgo
  2. 在 go-service 目录下创建一个新的目录存放新的微服务代码
  3. 进入到新的目录下,运行如下命令生成一个新的 RPC 相关微服务
cwgo server --type RPC --module github.com/AdrianWangs/ai-nexus/go-service/{微服务名称} --server_name {微服务名称} --idl ../../idl/{相关 idl 文件} --template ../../idl/tpl/kitex/server/standard
  1. 运行如下命令生成一个新的 HTTP 相关微服务
cwgo server --type HTTP --module github.com/AdrianWangs/ai-nexus/go-service/{微服务名称} --server_name {微服务名称} --idl ../../idl/{相关 idl 文件}
  1. 修改 go.mod 文件,添加一个替换
replace github.com/AdrianWangs/ai-nexus/go-common => ../../go-common

如果该微服务还依赖其他微服务,需要添加其他微服务的替换

  1. 运行如下命令下载依赖包
go mod tidy

使用官方代码生成来生成代码

  1. 安装 cwgo,教程:cwgo
  2. 在 go-service 目录下创建一个新的目录存放新的微服务代码
  3. 进入到新的目录下,运行如下命令生成一个新的微服务(同时在一个端口开启 RPC 和 HTTP 服务)
cwgo server --type RPC --module github.com/AdrianWangs/ai-nexus/go-service/{微服务名称} --server_name {微服务名称} --idl ../../idl/{相关 idl 文件} --hex
  1. 在 main.go 中添加如下代码:
// nacos 注册中心
r := nacos.GetNacosRegistry()
opts = append(opts, server.WithRegistry(r))

上述代码用于向 nacos 注册中心注册服务

  1. 在 conf/conf.go 中添加如下代码以使用注册中心配置:
import (
    common_config "github.com/AdrianWangs/ai-nexus/go-common/conf"
)
// 获取当前环境配置
	env := GetEnv()
	klog.Infof("当前环境: %s", env)

	conf = new(Config)

	// 从公共配置中加载 Nacos 配置
	nacos_config := common_config.GetConf().Nacos
	client, err := nacos.NewClient(nacos.Options{
		Address:     nacos_config.Address,
		Port:        nacos_config.Port,
		NamespaceID: nacos_config.Namespace,
		Group:       nacos_config.Group,
	})

	if err != nil {
		panic(err)
	}
	client.RegisterConfigCallback(vo.ConfigParam{
		DataId:   "{配置文件名称}.yaml",
		Group:    env,
		Type:     "yaml",
		OnChange: nil,
	}, func(s string, parser nacos.ConfigParser) {
		err = yaml.Unmarshal([]byte(s), conf)
		if err != nil {
			klog.Error("转换配置失败 - %v", err)
			panic(err)
		}
		klog.Info("重启配置")

		// 打印配置
		klog.Infof("配置:")

		pretty.Printf("%# v\n", conf)

		klog.Info("配置加载成功")
	}, 100)
  1. 修改 go.mod 文件,添加一个替换
replace github.com/AdrianWangs/ai-nexus/go-common => ../../go-common

如果该微服务还依赖其他微服务,需要添加其他微服务的替换

  1. 运行如下命令下载依赖包
go mod tidy

About

本平台的核心优势在于通过微服务实现了能力解耦与按需定制,用户只需简单配置即可快速接入,享受由智能模型驱动的全面服务。平台以一座桥梁的角色存在着,将复杂的业务逻辑和强大的算力资源紧密连接,促进高效的资源调度和信息流转。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published