新年伊始,花椒直播服务端系统开发组对多个内部广泛使用到的基础服务开源,包括之前介绍过的总线系统和分布式 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 service discovery.WithRegistry(instance), discovery.WithRegistryTTL(60*time.Second), // schedule strategy,default:random discovery.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 service discovery.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知识,欢迎关注下面公众号


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/14989.html