推荐花椒直播服务端的 4 个开源项目
新年伊始,花椒直播服务端系统开发组对多个内部广泛使用到的基础服务开源,包括之前介绍过的总线系统和分布式 cron 管理:
gokeeper - 集中化配置管理中心
pepperbus - 花椒直播总线系统
peppercron - 花椒直播分布式 cron 管理
dashboard - pepperbus & peppercron 操作后台
gokeeper
github 仓库地址:
https://github.com/huajiao-tv/gokeeper
docker 镜像仓库:
docker pull huajiao/gokeeper
gokeeper 是一个基于 go 语言编写的集中化配置管理中心,支持服务发现功能,默认使用 ETCD 作为后端配置存储(可支持 consul, zokeeper 等),支持单节点或集群方式部署。
运行
前提条件
本地配置 Docker 环境及 docker-compose
Clone gokeeper 代码至本地
启动 gokeeper
进入
deploy/docker_compose
目录执行
docker-compose up -d
集中配置
gokeeper 支持 go 语言内置的 gob 编码,并支持 go 语言的大部分数据类型及复合结构:
bool, []bool
int, int64
[]int, []int64
float64, []float64
string, []string
map[string]string, map[string]int, map[string]bool
map[int]string, map[int]int, map[int]bool
map[string][]string, map[string]struct{}, map[int]struct{}
time.Duration
除以上 go 语言类型外,还持将 json 字符串到自定义类型的映射,配置类型为 json
。
此外,为了兼容其它语言,gokeeper 还支持使用 gRPC 协议,目前其它语言的 SDK 仍在开发测试中。
接入
引入
go get -u github.com/huajiao-tv/gokeeper
使用自定义的
ini
格式定义配置ini 文件使用
<key> [type] = [value]
的格式,如果不指定类型,默认为string
生成配置对象
go get -u github.com/huajiao-tv/gokeeper/cmd/gokeeper-cli
$GOPATH/bin/gokeeper-cli -in ./ini_file_path -out data
gokeeper client
//your ps to use
ps := []string{"test.conf/DEFAULT"}//gokeeper.WithGrpc() will use grpc to connect gokeeper server,otherwise use gorpc
client := gokeeper.New(keeperAddr, domain, nodeID, component, ps, nil, gokeeper.WithGrpc())
client.LoadData(data.ObjectsContainer).RegisterCallback(run)
if err := client.Work(); err != nil {panic(err)
}
服务发现
原理
特性
client 端服务注册与发现的接口只与 gokeeper 交互,不关心 gokeeper discovery 后端存储
服务的订阅者只订阅自己感兴趣的服务,没有订阅的服务不会得到信息变动的推送
gokeeper discovery 与后端存储建连,监听服务的节点信息变化,如果有增删节点,discovery实时将信息推送给服务的订阅者
在 client consumer 与 gokeeper discovery 不通的情况下,原有的节点可用
负载均衡策略由后台配置,通过 gokeeper 写到存储中,各个 gokeeper discovery 节点同步更新,然后通过 gokeeper 同步给各个 Service Consumer
接入
引入
go get -u github.com/huajiao-tv/gokeeper/client/discovery
Service Provider
instance := discovery.NewInstance(discovery.GenRandomId(), "demo.test.com", map[string]string{discoverry.SchemaHttp: "127.0.0.1:17000"})
instance.Id = "test_id_1"client := discovery.New(// gokeeper server address(grpc address)"127.0.0.1:7001",// registry servicediscovery.WithRegistry(instance),discovery.WithRegistryTTL(60*time.Second),// schedule strategy,default:randomdiscovery.WithScheduler(map[string]schedule.Scheduler{"demo.test.com": schedule.NewRoundRobinScheduler(),}),
)
Service Consumer
// start gokeeper client
client := discoverry.New(// gokeeper server address(grpc address)"127.0.0.1:7001",// subscribe a group of servicediscovery.WithDiscovery("example_client1", []string{"demo.test.com"}),
)// TODO// get service address
addr, err := client.GetServiceAddr("demo.test.com", discovery.SchemaHttp)
if err != nil{// TODO
}
pepperbus
github 仓库地址:
https://github.com/huajiao-tv/pepperbus
docker 镜像仓库:
docker pull huajiao/pepperbus
pepperbus - 花椒直播总线系统,相关的设计及介绍在花椒技术公众号的 2019-11-26 期。
peppercron
github 仓库地址:
https://github.com/huajiao-tv/peppercron
docker 镜像仓库:
docker pull huajiao/pepperbus
peppercron - 花椒直播分布式 cron 管理服务,相关的设计及介绍在花椒技术公众号的 2019-10-29 期。
dashboard
github 仓库地址:
https://github.com/huajiao-tv/dashboard
docker 镜像仓库:
docker pull huajiao/dashboard
dashboard 是为了简化 pepperbus 和 peppercron 的使用,根据花椒直播的业务需求开发的通用管理后台。
dashboard 使用说明
启动
Clone 代码至本地后,执行 docker-compose up -d
,会创建以下容器:
redis - pepperbus 消息落地存储
mysql - 后台 dashboard 数据库
gokeeper_etcd - gokeeper 及 peppercron 使用的 ETCD
gokeeper - 配置中心
peppercron - 分布式 cron 管理服务
php-fpm - 总线 php 消费
pepperbus - 总线系统
dashboard - pepperbus & peppercron 管理操作后台
登录
浏览器登录 localhost:8360
,启动后的默认账户为:
默认管理员:
admin
密码:
admin@pass
(在config.yaml
中指定)
创建系统
pepperbus 总线
为系统添加 pepperbus 服务器
为系统添加 redis 存储
添加队列
为队列添加两个 Topic
代码仓库中的 example/php/consume.php
已经通过 php 的 SDK 实现了两个消费者,分别为:queue1/topic1
, queue1/topic2
。其中 topic1 默认返回成功,topic2 默认返回失败。
测试 Topic
topic1
topic2
peppercron 任务管理
为系统添加 peppercron 任务服务器
添加任务
测试任务
启动之前可以先测试任务是否配置正常
修改任务输出至文件
验证任务执行结果
想要更多Java知识,欢迎关注下面公众号
推荐花椒直播服务端的 4 个开源项目相关推荐
- Windows远程桌面实现之十一:桌面屏幕通过各种直播服务端直播(RTSP, RTMP, HTTP-FLV, HLS)
by fanxiushu 2020-01-23 转载或引用请注明原始作者. 此文还是基于xdisp_virt远程项目中的一个子功能.在把xdisp_virt移植到各种平台之后,就想着再做点什么新功能, ...
- SSR服务端渲染(nuxt重构项目)
SSR服务端渲染(nuxt重构项目) 目的:优化SEO,提高网站权重 ,页面静态化,强化搜索引擎,提高首屏渲染速度 参考文档:https://zh.nuxtjs.org/guide/installat ...
- Node 应用篇!推荐 10 个好用的 Node 的开源项目 YYDS
大家好,我是你们的 猫哥,那个不喜欢吃鱼.又不喜欢喵 的超级猫又在线营业啦 ~ 平时如何发现好的开源项目,可以看看这篇文章:GitHub 上能挖矿的神仙技巧 - 如何发现优秀开源项目 1. puppe ...
- 视觉盛宴篇!推荐 12 个好用的 CSS 的开源项目,YYDS !
大家好,我是你们的 猫哥,那个不喜欢吃鱼.又不喜欢喵 的超级猫又在线营业啦 ~ 平时如何发现好的开源项目,可以看看这篇文章:GitHub 上能挖矿的神仙技巧 - 如何发现优秀开源项目 1. anima ...
- 推荐 12 个好用的 React 的开源项目,开发效率又能提升了!
大家好,我是你们的 猫哥,那个不喜欢吃鱼.又不喜欢喵 的超级猫又在线营业啦 ~ 平时如何发现好的开源项目,可以看看这篇文章:GitHub 上能挖矿的神仙技巧 - 如何发现优秀开源项目 1. react ...
- ffmpeg sdk java_推荐一个强大的音视频处理的开源项目!
原标题:推荐一个强大的音视频处理的开源项目! 1.前景提要 在我们的开发中,经常会用到音视频相关内容,一般我们都会选择FFmpeg,但是其交叉编译对于我们来说是一件很麻烦的事情.所以这里方便日后使用就 ...
- nginx+rtmp实现直播服务端
目前直播系统从功能上分为两种,直播和互动.普通直播对播放延迟要求不高,推流端也能设置本地延迟推流时间.互动直播对低延时要求较高,主要应用在即时通讯和在线教育等行业,从推流端采集到拉流端播放一般延时不超 ...
- WCF服务端的.NET Core支持项目Core WCF 正式启动
长期以来在wcf客户端库https://github.com/dotnet/wcf里反应最强烈的就是.NET Core的服务端支持https://github.com/dotnet/wcf/issue ...
- 推荐 10 个好用的 Vue3 的开源项目,开发效率又能提升了!
大家好,我是你们的 猫哥,那个不喜欢吃鱼.又不喜欢喵 的超级猫又在线营业啦. 平时如何发现好的开源项目,可以看看这篇文章:GitHub 上能挖矿的神仙技巧 - 如何发现优秀开源项目 如果不想错过精彩内 ...
最新文章
- RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)
- python无法启动此程序、因为计算机中丢失_无法启动此程序,因为计算机中丢失*.DLL...
- 利用CSS的三列等高布局
- SAP UI5关于navigation API的boolean参数
- 使用MVC模式制作游戏-教程和简介
- 工作176:表单重置
- Python下载、安装及其配置
- 450g吐司烘烤温度_这不可能是吐司!不,是的
- seafile自建服务器,自建云盘系列——Seafile (支持分布式存储)
- 游戏开发之动态创建对象及构造函数、析构函数的执行(C++基础)
- DOM.getBoundingClientRect()
- 计算机专业专科生毕业论文题目,★专科生计算机专业论文题目专科生计算机专业毕业论文题目大全专科生计算机专业论文选题参考...
- 如何恢复计算机永久删除文件,回收站删除文件如何恢复
- cesium 实现指南针及比例尺效果
- 大数据架构师是做什么的?
- 数制中为什么1代表负号
- python实现共轭梯度算法
- scJoint integrates atlas-scale single-cell RNA-seq and ATAC-seq data with transfer learning
- ensp-网络地址转换
- airpods二代降噪吗_2020年苹果无线蓝牙耳机AirPods/Airpods Pro选购指南和使用技巧 | 10月更新...
热门文章
- 这次的新计算,很全能!
- python3.5安装tensorflow_win10下python3.5.2和tensorflow安装环境搭建教程
- 8大基本数据类型各占多少字节和一些单位常识
- 小红书去水印代码_小红书无水印图片,无水印视频解析下载,小红书视频图片去水印代码实现...
- C语言进阶 之 字符串函数(4)
- 使用 CNN 进行面部表情检测
- Linux网卡模块,裁剪Linux并实现网卡模块的安装(附有命令移植的脚本)
- ubuntu20.04安装小鹤双拼输入法挂接音形改简体中文Rime
- TYVJ-P1035 棋盘覆盖
- 控制性详细规划图纸成果及深度要求