使用go-zero搭建api及grpc中台
安装goctl参照官方文档,安装goctl
123go install github.com/zeromicro/go-zero/tools/goctl@latest# 验证goctl --version
创建Api服务12345678mkdir go-zero-demo && cd go-zero-demo# 生成go.modgo mod init go-zero-demomkdir api common rpcls # api common rpcmkdir -p api/doc/sys && cd api/doc/sys# touch user.api
创建user.api, 内容如下
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586syntax = "v1&q ...
GoPath和Go Modules包管理
1、概述大多数语言都有“依赖”、“包”等概念,Go语言的依赖处理经历了几次变革
最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面
从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么go工具链会优先使用vendor内的包进行编译、测试等
从v1.11开始,引入了Go Module 作为依赖解决方案,到v1.14宣布Go Module已经可以用于生产环境,到v1.16版本开始Go Module默认开启
2、GOPATH介绍2.1 GOPATH目录GOPATH是什么,输入如下命令查看
12# go env GOPATHGOPATH="/Users/ssgeek/go"
进入到该目录下,目录结构如下
12345678910111213141516171819# cd `go env GOPATH`# tree -L 2 ..├── bin│ ├── dlv│ ├── go-outline│ ├── gomodifytags│ ├── gopkgs│ ├── goplay│ ├── gopls│ ├ ...
消息队列nsq介绍
nsq介绍NSQ 是一个消息队列中间件,用 go 实现。特点:
分布式: 它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。
易于扩展: 它支持水平扩展,没有中心化的消息代理( Broker ),内置的发现服务让集群中增加节点非常容易。
运维方便: 它非常容易配置和部署,灵活性高。
高度集成: 现在已经有官方的 Golang、Python 和 JavaScript 客户端,社区也有了其他各个语言的客户端库方便接入,自定义客户端也非常容易。
集群及组件nsqdnsq 核心逻辑所在,负责接收消息、排队消息、并投递消息给消费者。
nsqlookup负责管理拓扑信息,类似于kafka的 zookeeper。用于服务注册、发现。
Topic一个 topic 就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建 topic
Channel类似 kafka 中的消费组,是消费者之间的负载均衡。每当一个发布者发送一条消息到一个 topic,消息会被复制到所有消费者连接的 channel 上,然后将消息随机推送到其中一个消费者
数 ...
golang 1.18新特性
golang 1.18版本有很大的变化,增加了泛型支持
泛型golang1.18就加入泛型,通过泛型的支持,将减少很多代码量,但也会带来不少可读性问题,因此泛型在生产中仍然需要谨慎使用,特别是目前golang的泛型还比较基础。
golang 泛型使用[]定义
123func print[v int | uint | uint32](params v) { fmt.Println(params)}
声明泛型类型上面的函数支持了三种类型[v int | uint | string],那如果我们要支持更多的类型,岂不是该函数会非常的长,并且不好维护,达不到不用的效果,例如其他的函数也要支持这样的类型。这时候可以声明泛型类型,格式如下:
123type Nums interface { int | uint64 | uint32}
函数修改为
123func print[v Nums](params v) { fmt.Println(params)}
这样把Nums当作函数的入参,调用方也不需要调整,这样如果后续需要支持更多的类 ...
部署开源大模型
使用ollama部署开源大模型
Docker部署ollama用多种部署方式
Linux部署
1curl -fsSL https://ollama.com/install.sh | sh
如果使用Docker部署,可以查看https://hub.docker.com/r/ollama/ollama
12# 仅使用CPUdocker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
使用GPU运行时
需要安装nvidia-container-toolkit
123456apt-get install -y nvidia-container-toolkitsudo nvidia-ctk runtime configure --runtime=dockersudo systemctl restart docker# 使用GPUdocker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ ...
laravel-mix
Laravel Mix 是 Laravel 框架提供的一种前端构建工具,它基于 webpack,并为前端开发提供了简化的 API。使用 Laravel Mix,你可以轻松地管理、编译和优化你的前端资源,如 JavaScript、CSS、Sass 等。
以下是关于 Laravel Mix 的介绍和使用方法:
特点和优势:
简化配置:Laravel Mix 提供了简单易用的 API,让你可以轻松配置和管理前端资源的编译过程,无需深入了解 webpack 的复杂配置。
支持多种预处理器:Laravel Mix 支持多种前端资源的预处理器,包括 JavaScript、CSS、Sass、Less 等,可以让你使用更灵活和高效的方式编写前端代码。
自动版本控制:Laravel Mix 会自动为编译后的前端资源生成唯一的版本号,帮助你避免浏览器缓存的问题,确保用户始终加载最新的资源。
代码分割和优化:Laravel Mix 内置了 webpack 的代码分割和优化功能,可以帮助你有效地管理和优化前端代码,提升页面加载速度和性能。
使用方法:
安装 Laravel Mix:首先确保你已经安装了 La ...
Redis详解
Redis介绍Redis是C语言编写的开源高性能键值对存储的内存数据库,可以用作数据库、缓存、中间件,是NoSQL(not-only sql,泛指非关系型数据库)的数据库。
Redis作为一个内存数据库。
性能优异,数据在内存中,读写非常快,支持并发10W QPS
单线程但进程,线程安全,采用IO多路复用。 IO 多路复用指的是 Redis 服务器使用一个单线程来处理多个客户端的连接和请求,通过事件驱动和异步非阻塞 IO 来提高系统的效率和可伸缩性。
丰富的数据结构,主要为5种:字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)。还有3中新的数据类型:位图(Bitmap)、超日志(HyperLogLog)和地理位置(Geo)。
支持持久化,可以将内存中数据保存在磁盘中,重启时加载。
可以配置主从模式,或者分布式
可以作为消息中间件使用,支持发布订阅。
Redis为啥快官方提供的数据可以达到100000+的QPS(每秒内的查询次数)
Redis确实是单进程单线程的模型,因为Redis完全是基于内存的操作,CPU不是Redis ...
k8s部署mysql 8.0.26
k8s部署创建nas阿里云,文件存储。使用通用性NAS(容量最大10P)
创建k8s volume阿里云 k8s,先创建存储卷,选择NAS,配置挂载点,配置挂载路径
然后创建存储声明,使用刚才创建的存储卷
创建prod使用无状态模式。
镜像使用mysql/mysql-server, Tag使用8.0.26
配置环境变量
12MYSQL_ROOT_PASSWORDMYSQL_ROOT_HOST
配置启动参数
1["--default-authentication-plugin=mysql_native_password"]
使用挂载卷(挂载卷配置路径/var/lib/mysql),对应容器路径/var/lib/mysql
迁移导出原来数据
可以使用export导出,或者使用client工具导出.
由于原数据库使用阿里云RDS,不区分大小写。自己部署的区分大小写。
注意导出的数据库表名为小写,需要手动修改表名为大小。
导入,使用source
12345# 原数据库名称为 weixin-database; 8.0开始不能使用-作为表名c ...
安卓调试adb工具
ADB,全称Android Debug Bridge, 是Android SDK中的一个重要工具,起到调试桥的作用。它是一种功能多样的命令行工具,允许开发者和Android设备进行通信。
通过ADB工具,可以方便进行Android应用的开发和调试。
可以执行设备操作,获取相关设备信息,可以访问设备上的文件目录。
安装ADB下载ADB工具包,添加环境变量
如果使用mac,可以直接使用brew安装
连接设备执行命令:
123456adb connect [ip]adb connect 192.168.2.190# 管理员su
如果遇到中文乱码设置
修改 cmd 字符集
1chcp 65001
文件传输手机传到电脑
1adb pull /sdcard/文件名
电脑到手机
1adb push 文件名 /sdcard/(手机存储路径)
mysql优化cpu占用
原因由于数据量大,数据文件已经达到40多G。业务服务启动后,大量mysql请求,导致cpu,占用超过 100%。
12# 分析各表的数据占用SELECT table_name, data_length, avg_row_length, index_length, table_rows FROM information_schema.tables WHERE table_schema = 'mydb';
优化方案优化方式:
调整innodb_buffer_pool_size 由128M,调整为21G
增加慢查询日志,监控慢查询sql。
优化后,平均cpu占用,低于100%。
mysql conf调整Buffer Pool是MySQL中最重要的内存组件,介于外部系统和存储引擎之间的一个缓存区,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘 IO,加快处理速度。
innodb_buffer_pool_sizeinnodb_buffer_pool_siz ...