部署安装EdgeMesh
Kubeedge - 3: 部署安装EdgeMesh什么是EdgeMesh EdgeMesh 作为 KubeEdge 集群的数据面组件,为应用程序提供了简单的服务发现与流量代理功能,从而屏蔽了边缘场景下复杂的网络结构 KubeEdge 基于 Kubernetes 构建,将云原生容器化应用程序编排能力延伸到了边缘。但是,在边缘计算场景下,网络拓扑较为复杂,不同区域中的边缘节点往往网络不互通,并且应用之间流量的互通是业务的首要需求,而 EdgeMesh 正是对此提供了一套解决方案 为什么要使用EdgeMeshEdgeMesh 满足边缘场景下的新需求(如边缘资源有限、边云网络不稳定、网络结构复杂等),即实现了高可用性、高可靠性和极致轻量化: 高可用性 利用 LibP2P 提供的能力,来打通边缘节点间的网络 将边缘节点间的通信分为局域网内和跨局域网 局域网内的通信:直接通信 跨局域网的通信:打洞成功时 Agent 之间建立直连隧道,否则通过中继转发流量 高可靠性 (离线场景) 元数据通过 KubeEdge 边云通道下发,无需访问云端 apiserver EdgeMesh 内部...
Linux部署Go
Linux部署Gobash一键部署bash地址 下载123456# 安装wget命令yum install -y wget# 在 ~ 下创建 go 文件夹,并进入 go 文件夹mkdir ~/go && cd ~/go# 下载的 go 压缩包wget https://studygolang.com/dl/golang/go1.17.linux-amd64.tar.gz 解压1tar -C /usr/local -zxvf go1.17.0.linux-amd64.tar.gz 添加到环境变量123456vi /etc/profile# 在/etc/profile最后一行添加export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin# 保存退出后source一下source /etc/profile 验证GO1go version linux上运行Gin1234# 更换代理源export GOPROXY=https://mirrors.aliyun.com/goproxy/# 开启go modexport G...
整合sql和sqlx
整合sql和sqlxWhat is sqlx sqlx是Go语言内置database/sql的超集,它在优秀的内置database/sql基础上提供了一组扩展 Get sqlx go get github.com/jmoiron/sqlx Prepare sqlx1234567891011121314151617181920212223242526272829package mysqlimport ( "bluebell/setting" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx")var db *sqlx.DB// Init 初始化MySQL连接func Init(cfg *setting.MySQLConfig) (err error) { // "user:password@tcp(host:port)/dbname" dsn := fmt.Sprintf("%s...
整合限流策略
整合限流策略限流 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数 常用的限流策略漏桶法 漏桶法限流很好理解,假设我们有一个水桶按固定的速率向下方滴落一滴水,无论有多少请求,请求的速率有多大,都按照固定的速率流出,对应到系统中就是按照固定的速率处理请求 uber-go/ratelimit实现 uber-go/ratelimit Example uber-go/ratelimit1234567891011121314151617181920212223242526272829// 漏桶法// 定义全局限流器对象var rateLimit ratelimit.Limiter// 在 gin.HandlerFunc 加入限流逻辑func leakyBucket() gin.HandlerFunc { prev := time.Now() return func(c *gin.Context) { now := rateLimit.Take() fmt.Println(now.Sub(prev)) // 为了打印时间...
整合管理配置 - viper
整合管理配置 - viper Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式 viper是一个配置管理的解决方案,它能够从 json,toml,ini,yaml,hcl,env 等多种格式文件中,读取配置内容,它还能从一些远程配置中心读取配置文件,如consul,etcd等;它还能够监听文件的内容变化 读取 json,toml,ini,yaml,hcl,env 等格式的文件内容 读取远程配置文件,如 consul,etcd 等和监控配置文件变化 读取命令行 flag 的值 从 buffer 中读取值 viper 读取配置文件的优先顺序,从高到低,如下: 显式设置的Set函数 命令行参数 环境变量 配置文件 远程k-v 存储系统,如consul,etcd等 默认值 Viper 配置key是不区分大小写的 Famous parsing library toml :https://github.com/BurntSushi/toml json : https://github.com/json-iterato...
整合热加载
整合热加载热加载 和 热部署 热加载:代码进行修改时,程序能重新加载(部分代码),减少手动编译 热部署:代码修改时,程序能重新加载(整个应用或容器),热部署比热加载更为强大 Go实现热加载工具库Air 彩色日志输出 自定义构建或二进制命令 支持忽略子目录 启动后支持监听新目录 更好的构建过程 Get Air go get -u github.com/cosmtrek/air How to use Air 进入到项目目录 生成.air.conf文件: 首先在当前目录下查找 .air.conf配置文件,如果找不到就使用默认的air -c .air.conf air_emxaple.conf:12345678910111213141516171819202122232425262728293031323334353637383940414243444546# [Air](https://github.com/cosmtrek/air) TOML 格式的配置文件# 工作目录# 使用 . 或绝对路径,请注意 `tmp_dir` 目录必须在 `root` 目录下root...
整合Swagger
整合SwaggerWhat is Swagger Swagger 是 描述使用JSON表示的RESTful API 接口文档描述语言,实现了自动文档,代码生成和测试用例功能 Get Swagger(Gin) go get -u github.com/swaggo/swag/cmd/swag import("github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger") Prepare Swagger 在根目录执行swag init 生doc文件 在main写入项目介绍 1234567891011121314// @title Tets Swaggper项目接口文档// @version 1.0// @description Go web Swagger// @termsOfService http: //swagger.io/terms/// @contact.name Piwriw// @contact.url http://www.swagger....
自定义业务状态码
自定义业务状态码业务状态码和HTTP状态码 业务状态码:在 REST 接口设计规范中,我们通常都会被引导为这里的 Code 应该是 HTTP 协议状态码 200,404 或者 501 等 HTTP状态码:HTTP 请求状态码是 HTTP 协议的一部分,用于表明 HTTP 响应状态 How to prepare code1. Code业务状态码封装123456789101112131415161718192021222324252627package controllertype ResCode int64const ( CodeSuccess ResCode=1000+iota CodeInvalidParam CodeUserExist CodeUserNotExist CodeInvalidPassword CodeServeBusy)var codeMsgMap=map[ResCode]string{ CodeSuccess: "success", CodeInvalidParam:"请求参数错误", CodeUserEx...
整合JWT
整合JWTWhat is JWT JWT 是 JSON Web Token 的缩写,是为了在⽹络应⽤环境间传递声明⽽执⾏的⼀种基于JSON的开放标准((RFC 7519)。JWT 本身没有定义任何技术实现,它只是定义了⼀种基于 Token 的会话管理的规则,涵盖 Token 需要包含的标准内容和 Token 的⽣成过程,特别适⽤于分布式站点的单点登录(SSO)场景 一段JWT Token 由”.”切割成头部、负载、签名三部分 JWT优缺点 JWT 拥有基于 Token 的会话管理⽅式所拥有的⼀切优势,不依赖 Cookie,使得其可以防⽌ CSRF 攻击,也能在禁⽤ Cookie 的浏览器环境中正常运⾏。 ⽽ JWT 的最⼤优势是服务端不再需要存储 Session,使得服务端认证鉴权业务可以⽅便扩展,避免存储Session 所需要引⼊的 Redis 等组件,降低了系统架构复杂度。但这也是 JWT 最⼤的劣势,由于有效期存储在 Token 中,JWT Token ⼀旦签发,就会在有效期内⼀直可⽤,⽆法在服务端废⽌,当⽤户进⾏登出操作,只能依赖客户端删除掉本地存储的 JWT Tok...
整合validation库
整合validation库Background 利用validation库进行对参数校验,减少业务逻辑的手动校验 Get validation go get github.com/go-playground/validator/v10 validation 配置项目 逗号( ,):把多个验证标记隔开。注意:隔开逗号之间不能有空格, validate:”lt=0,gt=100”,逗号那里不能有空格,否则panic 横线( - ):跳过该字段不验证 竖线( | ):使用多个验证标记,但是只需满足其中一个即可 Tag Description Example required 必填 Field或Struct validate:"required" omitempty 空时忽略 And more len 长度 Field validate:”len=0” eq 等于 Field validate:”eq=0” gt 大于 Field validate:”gt=0” gte 大于等于 ...