1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台
基于 Golang 构建⾼可扩展的云原⽣ PaaS 平台 刘浩杨 端点 技术专家 个⼈简介 - 18年加⼊端点,现任微服务和监控团队负责⼈ - 端点开源 PaaS Erda 的核⼼架构师 - 开源爱好者, Apache SkyWalking PMC 成员 ⽬ 录 ⾯向云原⽣的软件交付 01 端点⼀站式 PaaS - Erda 02 Erda 架构的思考 03 模块化开发框架 Erda Infra 开发框架 Erda Infra 是⼀套轻量级 Go 微服务框架,包含⼤量现成的模块和⼯具,能够快速构 建起以模块化驱动的应⽤程序。 • 以模块化设计⽅式来驱动应⽤系统实现,⽀持模块可插拔 • 统⼀配置读取,⽀持默认值、⽀持从⽂件、环境变量、命令⾏参数读取 • 统⼀模块的初始化、启动、关闭 • 统⼀管理模块间的依赖关系 • ⽀持模块间的依赖注⼊ • 包含⼤量现成的微模块 基于 pr 的持续集成 - 打破需求、开发和测试的边界 简化平台的上⼿难度 - 解耦对中间件的强依赖 - 平台应⽤可独⽴安装和部署 - 像搭积⽊⼀样拼装系统 云端和本地⼀致的开发体验 - 本地⽆需启动完整的环境 - 借助IDE插件实现云端服务连接 - 本地和云端服务可交互 微信公众号 : Github : https://github.com/erda-project/erda0 码力 | 40 页 | 8.60 MB | 1 年前3NSQ - 陈冶
• 数据缓冲,提⾼可⽤性 ,缓冲服务故障 使⽤案例 ⼴告点击数统计 Web Service MySQL cluster User Click User Click User Click Stateless Stat Service Stateless 2. 数据⼴播 MQ stream computing 使⽤需求 • 数据缓冲,提⾼可⽤性 ,缓冲服务故障 computing Web Service stream computing stream computing 使⽤需求 • 数据缓冲,提⾼可⽤性 ,缓冲服务故障 • 数据⼴播,分发给多个服务 • 负载均衡,提⾼消费者的扩展性 使⽤案例 ⼴告点击数统计 Web Service MySQL cluster 4. 正确消费确认 MQ stream computing computing Web Service stream computing stream computing Msg 使⽤需求 • 数据缓冲,提⾼可⽤性 ,缓冲服务故障 • 数据⼴播,分发给多个服务 • 负载均衡,提⾼消费者的扩展性 • 消费反馈,确保消息不丢失 使⽤案例 ⼴告点击数统计 Web Service MySQL cluster User Click User0 码力 | 37 页 | 2.49 MB | 1 年前31.每秒百万数据点 Go 应用监控系统演进
跨集群指标无法聚合 ● Prometheus 集群经常崩溃 ● 维护时 Prometheus 会丢数据 ● 成本高,需要大容量 SSD 磁盘 2021-2022 核心需求 可跨集群查询 长期存储 兼容 Prometheus 扩展性强 无侵入性 Why Thanos VS VS 架构 S3 Thanos 架构 Querier Query-Frontend Store Gateway S3 VictoriaMetrics 收益 ● 高性能,看板加载时间从 120s 降低到 10s ● 兼容 Prometheus,可以无缝迁移 ● 成本更低,只需要 thanos 的 50% 资源 ● 扩展性强,所有组件支持水平扩容 2023 年底架构 VictoriaMetrics 架构 VMStorage VMSelect VMInsert Why VictoriaMetrics so good?0 码力 | 42 页 | 2.32 MB | 1 年前3Golang在接入层长连接服务中的实践-黄欣
实时在线百万级别 • 每天平均70亿次的推送量 背景—总结 • 业务上核心依赖 • Golang成功的使用案例 目录 • 背景 • 心得 架构 • 整体架构图 架构—接口设计 • 原则 – 扩展性 – 稳定性(最好不用升级) • 解决方法 – Protobuf(golang) – 接口设计分层 • 框架层:模块间通信协议(类似tcp/udp) • 业务层:bytes(类似应用层)留给业务自己定义就好了 cache(standy) 架构—异地双活 • 要求 – 正常情况下: • 任何一个机房可推送到所有机房app – 异常情况下: • 本机房内推送可达 • 架构图如下 (核心解决路由共享问题) 架构—总结 • 异步通信接口 • 协议包业务态隔离 • 简单无状态 • 有状态的服务(涉及到存储)做到可降级 • 核心业务有自愈逻辑 简单实用,避免过度设计 目录 • 背景 • 架构 心得—coding0 码力 | 31 页 | 1.67 MB | 1 年前3IPC性能极致优化方案-RPAL落地实践
是一套由字节跳动基础架构服务框架团队开源的、 可快速构建企业级云原生微服务架构 的中间件集合。 CloudWeGo 项目共同的特点是高性能、高扩展性、高可靠,专 注于微服务通信与治理。 CloudWeGo 包括 Kitex、Hertz、Volo、Netpoll、Monoio、Sonic 等多个重点子项目,涵盖 Go 与 Rust 开发语言, 上至框架下 至网络库、编解码库、序列化库均是自研,各个项目既可独立 使用也可搭配使用,并围绕这些项目,构建了完整的上下游生0 码力 | 39 页 | 2.98 MB | 1 年前32.7 Golang与高性能DSP竞价系统
⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 专为统计分析⽽而⽣生 • 列存储 • shared-nothing的分布式架构,可扩展性、⾼高可⽤用 • 秒级以内对⼗十亿⾏行级别的表进⾏行统计查询 • 对内存要求⾼高,相当于内存数据库 • JAVA系,开源 曝光统计服务: Druid 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司0 码力 | 51 页 | 5.09 MB | 1 年前3Go Web编程
支持多国语言界面显示 完全插件体系结构 支持编辑器配色方案 基于Kate的语法显示支持 基于全文的单词自动完成 支持键盘快捷键绑定方案 Markdown文档编辑支持 实时预览和同步显示 自定义CSS显示 可导出HTML和PDF文档 批量转换/合并为HTML/PDF文档 LiteIDE安装配置 LiteIDE安装配置 LiteIDE安装 下载地址 http://code.google.com/p/golangide main)这一行告诉我们当前文件属于哪个包,而包名main则 告诉我们它是一个可独立运行的包,它在编译后会产生可执行文件。除了main包之外,其它的包最后都会生成*.a文 件(也就是包文件)并放置在$GOPATH/pkg/$GOOS_$GOARCH中(以Mac为例就是 $GOPATH/pkg/darwin_amd64)。 每一个可独立运行的Go程序,必定包含一个package main,在这个main包中必定包含一个入口函数main,而这 于fmt包,所以我们在第三行中导入了 系统级别的fmt包:import "fmt"。 包的概念和Python中的package类似,它们都有一些特别的好处:模块化(能够把你的程序分成多个模块)和可重用性 (每个模块都能被其它应用程序反复使用)。我们在这里只是先了解一下包的概念,后面我们将会编写自己的包。 在第五行中,我们通过关键字func定义了一个main函数,函数体被放在{}(大括号)中,就像我们平时写C、C++或0 码力 | 295 页 | 5.91 MB | 1 年前35.cgo 原理解析及优化实践
网关的扩展机制 什么是 MoE 举个例子 为什么需要 MoE Envoy 研发效能 良好的生态,上手门槛低 Wasm?Lua? Golang 云原生架构 良好的可扩展性 高性能 MoE 有什么挑战 业界少见 - 重度依赖 cgo 性能敏感 延时敏感 网关场景 cgo 是成熟 & 稳定的 唯一的 bug:trace 工具 性能挖掘空间大0 码力 | 45 页 | 5.74 MB | 1 年前3Go基础语法宝典
面那个常量的值是 iota ,则它也被设置为 iota 。 Go程序设计的一些规则 Go之所以会那么简洁,是因为它有一些默认的行为: 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公有变量;小写字母开头的就是不 可导出的,是私有变量。 大写字母开头的函数也是一样,相当于 class 中的带 public 关键词的公有函数;小写字母开头的 就是有 private 关键词的私有函数。 1 z = iota // z == 2 w // 常量声明省略值时,默认和之前一个值的字面相同。这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用"= iota" ) const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0 const ( h, i, j = iota, iota student.phone 访问的时候,是 访问student里面的字段,而不是human里面的字段。 这样就允许去重载通过匿名字段继承的一些字段,当然如果想访问重载后对应匿名类型里面的字段,可 以通过匿名字段名来访问。请看下面的例子 mark.Human = Human{"Marcus", 55, 220} mark.Human.age -= 1 package main import0 码力 | 47 页 | 1020.34 KB | 1 年前3基于amqp实现的golang消息队列MaxQ
基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 10/22 5. MaxQ相关特性 1. 消息可靠性 2. 容错性 3. 扩展性 4. 高并发 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 11/22 消息可靠性 1) slide#1 14/22 网络分区 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 15/22 扩展性 HA、Exchange和Queue动态扩展属性参数 Exchange、Binding、Queue支持自定义扩展, 如:x-message-ttl、x-expires、x-max- length0 码力 | 22 页 | 1.45 MB | 1 年前3
共 59 条
- 1
- 2
- 3
- 4
- 5
- 6