基于gRPC go实现消息发布订阅使用gRPC go实现 基于Topic的高效消息订阅发布模型 姓名 张凯 中国电子云 目 录 gRPC go 介绍 01 gRPC四种通信模式及落地场景 02 根据proto生成go桩代码 03 订阅者动态注册 04 发布者消息推送 05 现场案例演示 06 gRPC go介绍 gRPC是什么? 01. 副标题 开篇思考几个问题 01. 副标题 gRPC介绍 Web开发 基于通信模式如何落地? 01. 副标题 流式传输 基于通信模式如何落地? 01. 副标题 以及,本次分享的 “ ” 基于Topic消息发布订阅 基于Topic的消息发布模型简介 01. 副标题 基于Topic的消息发布模型简介 01. 副标题 BRIAN KERNGHAN service PubSubService { rpc Publish(PublishRequest) 服务器和客户端的接口代码。 --go_out=.: 类似地,这个选项指定了非 gRPC 相关的 Protocol Buffers 消息结构体等 Go 语言代码的输出目录, 同样为当前目录。protoc-gen-go 插件会处理 .proto 文 件中的消息定义并生成对应的 Go 结构体。 订阅者动态注册 01. 副标题 type subscriber chan interface{}0 码力 | 31 页 | 2.42 MB | 1 年前3
Go在数据库中间件的应用Go在数据库中间件的应用 基础架构组/刘延允 liuyun827@foxmail.com 2017年9月 1 关于我 • 刘延允——酷狗音乐,基础架构组 • 数据库变更通知服务 • 酷狗消息队列 • 酷狗数据库中间件 • 主要工作:分布式存储、高可用、数据库 • 两年通信设备开发经验,四年互联网 • 五年C/C++使用经验,一年Golang 2 CONTENTS • 程序开发的需求 程序开发的需求 • Golang特性 • Go开发mysql中间件 • 整体方案 • 分表路由 • 故障切换 • 平滑扩容 • 系统运维 3 程序开发的需求 • 语言特性精炼,容易入门 • 开发效率高,代码逻辑清晰 • 运行性能强,节省机器资源 • 部署维护方便 • 生态圈完善 4 Golang特性 • Go语法简练;没有学习压力 • 开发效率高;语言描述能力接近于脚本语言0 码力 | 17 页 | 4.02 MB | 1 年前3
基于amqp实现的golang消息队列MaxQ7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 1/22 基于amqp实现的golang消息队列 MaxQ 2017-07-01 张培培 饿了么-基础框架组 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 2. IPC消息队列 3. AMQP协议 4. MaxQ架构模型 5. MaxQ相关特性 6. 使用场景和案例 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 3/22 1. 队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ 生产者消费者 通信方式 存储方式 堆积能力 消息可靠性 生产消费关系 Pull/Push 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 5/22 2. IPC消息队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.1680 码力 | 22 页 | 1.45 MB | 1 年前3
go web 框架 严清满满绿格⼦子⻅见证我开发⽣生涯的⼀一⾯面 • 16 年年底组建 Go 团队,重构后端服务体 系,为此造了了⼀一些轮⼦子,如 Gear 框架 基于 kubernetes 和 SOA,部分已上线,如 TCM 消息推送服 务直接提供 HTTP/2 和 gRPC 接⼝口 • 前端架构师 ➞ 后端架构师 ⇢ 技术负责⼈人 技术学习⽆无⽌止境,逼迫个⼈人成⻓长,推进团队成⻓长 Why I Don’t Use 服务就是操作 HTTP,实⽤用语法糖极⼤大提升开发⼈人员的幸福指数 Middleware 模式及其控制 Express、koa、toa、Gear、Echo、Gin、Iris… ⼤大家都选择了了中间件模式 app := gear.New() app.Set(gear.SetLogger, log.New(gear.DefaultFilterWriter(), "", log.LstdFlags)) Pagination) app.UseHandler(initRouterV1(mongoService, zipkinService, authService)) gRPC ⽣生态也玩起了了中间件模式。。。 import "github.com/grpc-ecosystem/go-grpc-middleware" myServer := grpc.NewServer( grpc0 码力 | 23 页 | 333.12 KB | 1 年前3
02. Service Mesh落地之后_为sidecar注入灵魂 - 周群力基础设施 MOSN RPC MQ Actuator Cache Config 鉴权 配置 Java/NodeJS/C++/… App P a a S 降级限流 流量镜像 … 消息 缓存 8 事情没有那么 简单 新的挑战 1:应用跟基础设施强绑定 9 MOSN App 业务逻辑 RPC SDK port1 bolt SOFA-RPC 基础设施 RPC Multi Runtime: 所有中间件下沉: 业务逻辑和基础设施分离 多语言治理 同一套代码移植到不同组件 • Runtime API:真正的供应商解绑 • WebAssembly in sidecar:让业务逻辑跑在 sidecar 里 • Service Mesh : 通信中间件下沉,sidecar 实现组织架构上 的解耦 • Multi Runtime: 所有中间件下沉: 业务逻辑和基础设施分离0 码力 | 63 页 | 880.85 KB | 1 年前3
Golang 微服务在腾讯游戏用户运营领域的探索及实践业务混合部署 面向需求实现 效率质量之痛 流程 敏捷 隔离 性能 安全 监控 中间件技术选型 团队背景 内部生态 业务发展 开发成本 运营成本 Golang CSP并发 多核友好 自动GC 语法简洁 开源库多 CGO集 成 快速交付 内核稳定 生态趋势 数据中间件——指标服务 Golang 高性能 高可用 扩展性 安全性 可运营性 业务发展驱动技术演进 并发模型 异步Async 批量Batch 多核并行Parallel Lua协程绑定Go程 IO阻塞自动切换 高可用 负载均衡 寻址 限流 缓存 降级 SLA保证 并行执行单元 消息总线 屏蔽本地网络差异 微执行单元 水平伸缩 运营监控 旁路实时上报 自定义告警策略 收敛算法 海量日志查询 DSL加速敏捷 微服务编排 Node API调用 Graph0 码力 | 34 页 | 1.22 MB | 1 年前3
1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台数据集成 数据开发 数据资产 数据服务 数据应⽤ 资源统计 运维报告 审计⽇志 K8S 管理 数据监控 多云管理平台 MySQL Redis Kafka ES MQ Minio 中间件 通⽤服务 ⾃定义服务 服务市场 Kubernetes Rancher Openshift 私有云 公共 物理机 虚拟机 微服务治理平台 DevOps 平台 边缘监控 边缘站点管理 version: 5.7.23 create_dbs: trade_db erda.yml 定义 - 定义了⼀组服务如何被部署 - 定义了服务之间的依赖 - 定义了服务和中间件的依赖 云原⽣微服务治理 - 兼容 Spring Cloud & Dubbo, 应⽤⽆需改动代码即可接⼊ - 托管的微服务引擎,降低⽤户 运维压⼒ - 可选云服务作为服务引擎 系统监控 开源新时代的挑战 第五部分 打造围绕开源的开发流程 - GitFlow or Github Flow - 基于 pr 的持续集成 - 打破需求、开发和测试的边界 简化平台的上⼿难度 - 解耦对中间件的强依赖 - 平台应⽤可独⽴安装和部署 - 像搭积⽊⼀样拼装系统 云端和本地⼀致的开发体验 - 本地⽆需启动完整的环境 - 借助IDE插件实现云端服务连接 - 本地和云端服务可交互 微信公众号0 码力 | 40 页 | 8.60 MB | 1 年前3
微服务容灾治理CPU密集型还是IO密集型服务,go-zero都能很好的保护服务在如下场景不被拖垮或卡死: • 远超服务容量的突发⼤流量 • CPU打满 • 上下游故障或者超时 • MySQL、MongoDB、Redis等中间件故障或者超负载(典型的是CPU飙⾼) 如图,我们从三个⽅⾯来保护系统的稳定性: • 服务端⾃适应过载保护 • 服务端⾃适应熔断 • 客⼾端⾃适应熔断 当然,我们还有⾃动适配后端服务能 benchmarkCPU-103303600743ns/op 从 benchmark 结果可以看出单个请求的逻辑处理需要3.6msCPU资源(不包括服务端中间件处理 消耗)。对于两核的容器来说,qps上限约为550(2000/3.6)。但是我们是⼀个HTTPserver,肯定 还有接受请求、解析请求、返回结果等开销,实际上是达不到550qps的。 动扩容默认CPU阈值是80%,当你在设置这两个参数的时候,不要让HPA的CPU阈值⼤于go-zero 的过载保护CPU阈值,否则可能会抑制HPA的⽣效。 当然整个系统并不是链路上所有服务和中间件都可以⾃动或及时扩容的,这⾥就牵出另⼀个稳定性能 ⼒-⾃适应熔断了。有了⾃适应过载保护和⾃适应熔断的双重加持,流量再⼤(上限是所有CPU都⽤ 在降载熔断等能⼒上),服务也不会挂。后续⽂章0 码力 | 13 页 | 1.68 MB | 1 年前3
云原生go-zero微服务框架设计思考不允许不过期的缓存 ● 分布式缓存,易伸缩 ● 自动生成,自带统计 缓存的最佳实践 ● 协议选择 - gRPC ● 服务发现方式 - etcd ● 负载均衡 - p2c ewma ● 支持自定义中间件 service2 etcd service1 注册上报 watch发现 rpc call rpc服务层 - zRPC Power of Two Choices ● 默认算法 ● 当前请求数 io/2016/03/16/beyond-round- robin-load-balancing-for-latency/ ● 流控 ● 请求鉴权 ● 请求参数校验 ● 业务聚合 ● 支持自定义中间件 api gateway层 ● Google SRE算法 ● 放弃了Netflix Hystrix算法 ● 基于滑动窗口(10秒/40窗口) ● 支持自定义触发条件 ● 支持自定义fallback0 码力 | 29 页 | 5.70 MB | 9 月前3
Golang大规模云原生应用管理实践Golang⼤规模云原⽣应⽤管理实践 刘洋(炎寻) 关于我 • 毕业于中国科学技术大学,定居杭州 • 就职于阿里云-云原生应用平台团队 • Problem Solver,聚焦中间件,容器,Kubernetes,PaaS平台… • OAM社区成员 开局一张图 规模化应用交付效率对比去年 每万笔峰值交易的IT成本对比4年前 提升1倍 下降80% 云原生 技术 稳定 成本 效率 Kubelet,等组件都具有一定复杂度,无法做到定期升 级以维持安全,高可用,高性能的状态; • … 能力复用 自动化 可观测 稳定 安全 开发者真正想要的是策略:大象无形的基础设施,坚如磐石的中间件,丰富高效的应用PaaS平台 基础设施 云原生PaaS平台提供应用管理策略 基础设施 K8s 云原生生态(CNCF) 云原生应用 4 6 7 2 3 5 1 1 Kubectl plugins0 码力 | 23 页 | 7.70 MB | 1 年前3
共 34 条
- 1
- 2
- 3
- 4













