简介
圈木云直播
自主研发的高性能直播语聊系统
版本说明
- php版本: ThinkPHP + vue+elementUI。
- golang版本: k8s+微服务+vue+elementUI
# 技术栈
goim
:基于B站IM架构,golang分布式IM设计。流媒体服务器
:golang开发的高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。webrtc
:Meetecho优秀的通用WebRTC服务器(SFU);MongoDB
:云时代构建的基于文档的分布式数据库;Redis
:内存中的数据结构存储,用作数据库,缓存和消息代理;kafka
:队列 群聊,私聊,消息通知等。Coturn
:TURN和STUN Server的开源项目;Nginx
:高性能负载平衡器,Web服务器和有HTTPS / Quiche和Brtoli支持的反向代理;K8s集群+docker
:用于构建、部署和管理容器化应用程序的平台。后端
: php8.0 + ThinkPHP + ElementUI | golang版 + Vue + ElementUI移动端
: 原生开发版 | uniapp混合开发版
# 后台界面
# 架构图
# 代码目录说明
├── ergo
│ ├── app // app代码
│ ├── backend // 后台接口,rpc
│ ├── backendweb // 后台vue页面代码
│ ├── script // 数据库脚本,简化的kubernetes部署脚本
│ ├── .gitignore // git控制忽略文件
│ ├── LICENSE // LICENSE文件,使用的是MIT LICENSE
2
3
4
5
6
7
开发模式
本项目使用的是微服务开发,api (http) + rpc(grpc) , api充当聚合服务, 复杂、涉及到其他业务调用的统一写在rpc中,如果一些不会被其他服务依赖使用的简单业务, 可以直接写在api的logic中
网关
nginx
做网关,使用nginx的auth模块,调用后端的backend服务统一鉴权,业务内部不鉴权,
如果涉及到业务资金比较多也可以在业务中进行二次鉴权。 这块原理基本一样,可以自行替换成apisix
、kong
等
日志
关于日志,统一使用filebeat
收集,上报到kafka
中,
logstash
把kafka
数据源同步到elasticsearch
中,
再通过kibana进行分析处理展示等。
监控
监控采用prometheus
,只需要配置到k8s就可以了,这里可以看项目中的配置
链路追踪
默认jaeger
、zipkin
支持,只需要配置到k8s就可以了,这里可以看项目中的配置
消息队列
这里使用可kq,kq是基于kafka做的高性能消息队列
延迟队列、定时任务
延迟队列、定时任务本项目使用的是asynq
, google团队给予redis开发的简单中间件, asynq也支持消息队列,你也可也把kq消息队列替换成kafka
分布式事务
分布式事务使用的是dtm
,单节点每秒1W条事务,平常抢购秒杀足够应付了。
# 启动服务
$ go run admin.go -f etc/admin.yaml
Starting server at 0.0.0.0:8888...
2
# CURL调用
$ curl -i -X GET http://localhost:8888/api/order/get/1
HTTP/1.1 200 OK
Content-Type: application/json
Date: Sun, 07 Feb 2021 03:45:05 GMT
Content-Length: 30
2
3
4
5
6
# 演示
⨳ 后台管理:http://live.onionnews.cn (opens new window) 账号:admin 密码:admin
注意
IOS需要提供UUID:手机通过safari浏览器打开h5页面获取UDID -https://www.yunedit.com/udid (opens new window)
# 联系方式
QQ:407193275 【请备注好信息,否则不加】 微信:BCFind5 【请备注好信息,否则不加】 TG:@qmcloud 【回复较慢】