基于Go的大数据平台-党合萱
基于Go的⼤大数据平台 七⽜牛云—党合萱 什什么是Pandora 简单 · 可信赖 Pandora架构图 Export Service API / Portal / 消息 消息 计算 计算 消息 导出任务 导出任务 导出任务 导出任务 导出任务 计算 消息 对象存储服务 HTTP MongoDB 时序数据库 ⽇日志检索服务 XSpark Report Studio 简单 · 可信赖 内容提要 • 系统设计分析与架构 • 多种上下游适配 • ⾼高吞吐/低延迟问题探究 • ⾼高可⽤用与⽔水平扩展 • ⾃自动化运维 • Go的应⽤用 简单 · 可信赖 系统设计分析与架构 构建系统的挑战 export service系统全貌 简单 · 可信赖 数据预取 • export server在向下游推数据的时候预先从上游拉数据回来,保证⽹网络最⼤大的利利⽤用率,同时也减⼩小了了等待时间,提升导出效率。 • 预取时如果⽆无数据可取,则休眠1s再取数据,既然没有数据则休眠时间加倍……⼀一直到32s为⽌止,过程中如果取到数据,则休眠时间重置为 1s,有效减少对底层存储的请求数量量。 简单 · 可信赖 数据推送协议优化 • 优化export0 码力 | 34 页 | 1.26 MB | 1 年前3Go在数据库中间件的应用
Go在数据库中间件的应用 基础架构组/刘延允 liuyun827@foxmail.com 2017年9月 1 关于我 • 刘延允——酷狗音乐,基础架构组 • 数据库变更通知服务 • 酷狗消息队列 • 酷狗数据库中间件 • 主要工作:分布式存储、高可用、数据库 • 两年通信设备开发经验,四年互联网 • 五年C/C++使用经验,一年Golang 2 CONTENTS • 程序开发的需求 • 强大的标准库、丰富的第三方库、go test、pprof • 自动内存管理;内存泄漏与野指针是C/C++语言开发者的噩梦 • Go routine + channel;简单的并发与简易的数据同步 5 系统整体方案 mysql-group proxy proxy mysqld(M) mysqld(S) mysqld(S) mysql-group mysql-group mysql-group 主备自动切换(主-主模式)。 • 分表设计——按照Hash分表 • 分表设计——按照范围分表(年、月、日、整形) • 数据库表在多个mysql实例间平滑扩容 • 大表拆分为多个子表情况下的平滑扩容 7 系统整体方案 • 现存问题 • 数据库访问基本采用直连方式 • 无法满足数据访问平台化要求 • 配置管理方式落后,运维压力大 • 为什么采用Go来实现 • go诸多优点,可用性高 •0 码力 | 17 页 | 4.02 MB | 1 年前3如何消除程序中的数据竞争-周光远
如何消除程序中的数据竞争 周光远 华为 从一些问题说起 1 2 3 什么是数据竞争 Go语言中的数据竞争(data race): data race occurs when two goroutines access the same variable concurrently and at least one of the accesses is a write. 数据竞争(data 且至少其中一次访问是写操作。 data Thread1 Thread2 data goroutine1 goroutine2 从微观看数据竞争 时间上:多个并发的读写操作被观察到的顺序无法预知。 空间上:并发读写时观察到非预期的数据。 a:1 b:2 a:2 b:1 a:1 b:2 a:2 b:1 a:1 b:1 a:2 b:2 Thread 1 Thread 2 接收完成(同一个数据); • 对于无缓冲channel:开始接收 → 发送完成(同一个数据); 开始发送 接收完成 其他的对于init函数,锁,协程,原子操作,sync包里的功能,还有许多保证,更详细可以看: https://golang.org/ref/mem https://go101.org/article/memory-model.html 消除数据竞争的原理 消除数据竞争,实质就0 码力 | 30 页 | 1.92 MB | 1 年前34.GPT 与数据库的生态整合
GPT 与数据库的生态整合 王琦智 PingCAP TiDB 开发者生态高级工程师 目 录 自然语言到 SQL 01 自然语言到图表 02 GPTs 调用数据库 API 03 总结 04 自然语言到SQL OSS Insight 自然语言到图表 Thoughts to insights made easy(with AI) GPTs 调用数据库 API Thank You0 码力 | 21 页 | 3.33 MB | 1 年前31.每秒百万数据点 Go 应用监控系统演进
每秒百万数据点 Go 应用监控系统演进 张平 AfterShip 高级 SRE 关于 AfterShip 拥抱云原生和开源系统 目 录 监控架构概览 01 如何监控 Go 应用? 02 Metrics 系统架构演进 03 Why VictoriaMetrics so good? 04 总结与展望 05 监控架构概览 第一部分 监控系统架构概览 -- 数据源 监控系统架构概览 2K+ 40K 1Mil+ 2020 年指标数据 业务指标数量 每秒写入数据点 Active Time Series 2018-2020 年架构 2020 年底面临的问题 ● 无法查询超过 30 天的数据 ● 查询慢,平均时间超过 2 分钟 ● 跨集群指标无法聚合 ● Prometheus 集群经常崩溃 ● 维护时 Prometheus 会丢数据 ● 成本高,需要大容量 SSD 磁盘 S3 2022 年中指标数据 14K+ 0.6Mil 30Mil+ 业务指标数量 每秒写入数据点 Active Time Series Thanos 架构优化 Querier Query-Frontend Store Gateway S3 Store Gateway Store Gateway Redis 2022 年底面临的问题 ● 超 100+ 倍数据点增长导致查询缓慢 ●0 码力 | 42 页 | 2.32 MB | 1 年前3Go 构建大型开源分布式数据库技术内幕
Go 搭建大型开源分布式数据库技术内幕 shenli@PingCAP 关于我 ● 申砾 (Shen Li) ● TiDB 技术负责人 ● 网易有道 / 360搜索 / PingCAP ● Infrastructure software engineer 为什么需要一个新的数据库? 从单机数据库到 NewSQL ● 关系型数据库 ● NoSQL ● 中间件 ● NewSQL Processing) ● 24/7 availability, even in case of datacenter outages ● Open source, of course 如何构建分布式数据库? 原则 ● 分层 ● Make it right and make it fast. ● 测试很重要 ● 简单易用 ● 和社区结合 架构 TiKV TiKV TiKV TiKV Metadata / Timestamp request Stateless SQL Layer Distributed Storage Layer gRPC gRPC gRPC 数据分片 ● Hash Based Partition ○ Redis ○ 不利于范围 Scan ● Range Based Partition ○ Hbase ○ Range 需要足够大且足够小0 码力 | 44 页 | 649.68 KB | 1 年前33.云原生边云协同AI框架实践
器、云服务器,利用分布式乃至分布式协同方式实现人工智能的技术 数据在边缘产生 边侧逐步具备AI能力 分布式协同AI 核心驱动力 分布式协同AI核心驱动力 • 随着边侧算力逐步强化,边缘AI持续演变至分布式协同AI 分布式协同AI技术挑战 1. 边缘资源碎片化 2. 边缘数据孤岛 3. 边缘样本少 4. 边缘数据异构 分布式协同AI 技术挑战 边云协同AI框架 第二部分 用无缝下沉到边缘 为分布式协同机器学习服务 ✓ 降低构建与部署成本 ✓ 提升模型性能 ✓ 保护数据隐私 SIG成员近年发表分 布式协同AI顶会论文 10+ SIG成员在AI顶会IJCAI 上分享分布式协同AI论文 Sedna斩获中国信通院云边协 同应用创新大赛最佳创新奖 ✓ 数据集管理 ✓ 模型管理 ✓ …… 基础框架 ✓ 协同推理 ✓ 增量学习 ✓ 联邦学习 ✓ 终身学习 GlobalCoordinator ⚫ 统一边云协同AI任务管理 ⚫ 跨边云协同管理与协同 ⚫ 中心配置管理 2. LocalController ⚫ 特性本地流程控制 ⚫ 本地通用管理: 模型, 数据集等 3. Worker ⚫ 执行训练或推理任务, 训练/推理程序, 基于现有AI框 架开 ⚫ 按需启动, docker容器或function ⚫ 不同特性对应不同的worker组, 可部署在边上或云0 码力 | 37 页 | 2.36 MB | 1 年前3GoFrame框架介绍及设计
应用接口:HTTP/TCP/UDP/RPC Server、终端应用、源码接口 • 数据库类型:通过标准库驱动接口支持多种数据库类型 • 跨平台性:基于Golang开发语言强大跨平台特性 框架介绍-项目初心 工程化建设 统一框架 核心组件 项目架构 设计模式 开发规范 开发文档 开发工具 …… 模块化设计 第二部分 • 复用原则 • 单仓包设计 • 模块聚合设计 • 常见问题 模块化设计 什么是模块? 项目依赖的模块过多,项目整体的稳定性会受到影响 • 项目依赖的模块过多,无从下手是否应当升级模块版本 • 各个模块孤立设计,单独看待每个模块可替换性很高, 开发体系难以建立,开发规范难以统一 模块化设计-模块聚合设计 • 框架核心维护较全面的通用基础模块,降低基础模块选择成本 • 我们只需要维护一个统一的框架版本,而不是数十个模块版本 • 我们只需要了解一个框架的内容变化,而不是数十个模块的内容变化 第四部分 • 经典MVC • 三层架构模式 • 项目代码结构 代码分层设计-经典MVC 痛点: • 视图展示与数据操作方式的进一步剥离,特别是移动端的发展, 前端MVVM框架的发展,我们大多数场景下已不再需要服务端 渲染View • Model层级的代码既维护着数据,也封装着业务逻辑,随着业 务逻辑变得越来越复杂,这一层功能逻辑会变得越来越臃肿不 易维护 • Controlle0 码力 | 37 页 | 8.84 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
对于很多项目来说, Go是一个相当不错的选择。 目前,Go主要用于网络开发、系统工具开发、数 据库开发和区块链开发。 随着从Go 1.18开始支持自定义泛型,预期Go会在更 多开发领域流行起来,比如图形界面、游戏、大数据和人工智能等。 最后,我们应该知道,没有一门语言是完美的。Go也一样。Go的设计中有很 多折衷和各种权衡。Go 1确实有一些不足。 比如,目前Go不支持任意类型的 不变量。这导致很多标准库中一些希望永不被更改的值目前被声明为变量。这 一个操作可能从一个硬件设备读取、或者向一个硬 件设备写入一些数据,从而完成一个特定的任务。 对于现代计算机来说,最 基本的操作是底层计算机指令,比如CPU和GPU指令。 常见的硬件设备包括 内存、磁盘、网卡、显卡,显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言 通过对底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观 和易于理解。 在流 操作符(operator)运算来完成的。 大多数高级编程语言都支持一些条件和循 环控制语句。 这些条件和循环控制语句可以看作是特殊的操作。 它们的语法 接近于人类语言,因此一个人写的代码很容易被其他人理解。 在大多数高级编程语言中,数据通常被抽象为各种类型(type)和值 (value)。 一个类型可以看作是值的模板。一个值可以看作是某个类型的实 例。 大多数编程语言支持自定义类型和若干预声明类型(即内置类型)。 一 门语言的类型系统可以说是这门语言的灵魂。0 码力 | 821 页 | 956.82 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
对于很多项目来说, Go是一个相当不错的选择。 目前,Go主要用于网络开发、系统工具开发、数 据库开发和区块链开发。 随着从Go 1.18开始支持自定义泛型,预期Go会在更 多开发领域流行起来,比如图形界面、游戏、大数据和人工智能等。 最后,我们应该知道,没有一门语言是完美的。Go也一样。Go的设计中有很多 折衷和各种权衡。Go 1确实有一些不足。 比如,目前Go不支持任意类型的不变 量。这导致很多标准库中一些希 一个操作可能从一个硬件设备读取、或者向一个硬件 设备写入一些数据,从而完成一个特定的任务。 对于现代计算机来说,最基本 的操作是底层计算机指令,比如CPU和GPU指令。 常见的硬件设备包括内存、 磁盘、网卡、显卡,显示器、键盘和鼠标等。 直接操控底层计算机指令进行编程是非常繁琐和容易出错的。 高级编程语言通 过对底层指令进行一些封装和对数据进行一些抽象,从而使得编程变得直观和 易于理解。 在流行 函数的解释同样适用于方法。 事实上,以后我们将会了解到自定义函数(包括方法)本身都属于函数类型的 值,所以它们都是单值表达式。 通道的接收数据操作(不包括赋值部分)也属于表达式。通道(第21章)将在 以后详解。 Go中的一些表达式,包括刚提及的通道的接收数据操作,可能会表示可变数量 的值。 根据不同的场景,这样的表达式可能呈现为单值表达式,也可能呈现为 多值表达式。 我们将在以后的文章中了解到这样的表达式。0 码力 | 608 页 | 1.08 MB | 1 年前3
共 79 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8