Golang大规模云原生应用管理实践
Golang⼤规模云原⽣应⽤管理实践 刘洋(炎寻) 关于我 • 毕业于中国科学技术大学,定居杭州 • 就职于阿里云-云原生应用平台团队 • Problem Solver,聚焦中间件,容器,Kubernetes,PaaS平台… • OAM社区成员 开局一张图 规模化应用交付效率对比去年 每万笔峰值交易的IT成本对比4年前 提升1倍 下降80% 云原生 技术 稳定 成本 效率 策略与机制随着层次的变化而变化; 应用管理的策略与机制 应用 版本 工作负载 负载均衡 标签 流量 组件 日志 指标 容量 服务 依赖 路由规则 持久卷 部署策略 健康检查 … 灰度 发布 定时弹性 事件 指标弹性 分批发布 重启 回滚 日志管理 事件中心 指标监控 存储挂载 服务绑定 手动弹性 回退历史 负载均衡 报警 诊断 组件管理 服务治理 … 级以维持安全,高可用,高性能的状态; • … 能力复用 自动化 可观测 稳定 安全 开发者真正想要的是策略:大象无形的基础设施,坚如磐石的中间件,丰富高效的应用PaaS平台 基础设施 云原生PaaS平台提供应用管理策略 基础设施 K8s 云原生生态(CNCF) 云原生应用 4 6 7 2 3 5 1 1 Kubectl plugins 2 Apiserver extension 3 4 50 码力 | 23 页 | 7.70 MB | 1 年前3Go Module在又拍云的实践
0 码力 | 28 页 | 12.85 MB | 1 年前3Go Web编程
Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合初学者,可根据自 己的系统位数下载好相应的安装包,一路next就可以轻松安装了。 第三方工具安装:目前有很多方便的第三方软件包工具,例如Ubuntu的apt-get、Mac的homebrew等。这种安 装方式适合那些熟悉相应系统的用户。 最后,如果你想在同一个系统中安装多个版本的Go,你可以参考第三方工具GVM,这是目前在这方面做得最好的工 install gcc libc6-dev来安装编译工具。 在Windows系统中,你需要安装MinGW,然后通过MinGW安装gcc,并设置相应的环境变量。 Go使用Mercurial进行版本管理,首先你必须安装了Mercurial,然后才能下载。假设你已经安装好Mercurial,执行 如下代码: 假设已经位于Go的安装目录 $GO_INSTALL_DIR下 hg clone -u o已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境 变中是否包含了Go的安装目录。 第三方工具安装 第三方工具安装 GVM GVM gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具。使用起来相当的方便,安装gvm使用如下命令: bash < <(curl -s https://raw.github.com/moovweb/gvm/mast0 码力 | 295 页 | 5.91 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
链安装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序 安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用 来管理项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默 认支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的 HOME目录下的名为go文件夹对应的目录路径。 fmt子命令来用同一种代码风格格式化Go 代码。 我们可以使用go test子命令来运行单元和基准测试用例。 我们可以使用go doc子命令来(在终端中)查看Go代码库包的文档。 强烈推荐让你的Go项目支持Go模块特性来简化依赖管理。对一个支持Go模块 特性的项目: go mod init example.com/myproject命令可以用来在当前目录中生成一个 go.mod文件。 当前目录将被视为一个名为example (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101 ? 获取本书最新版) 代码包和包引入 和很多现代编程语言一样,Go代码包(package)来组织管理代码。 我们必须 先引入一个代码包(除了builtin标准库包)才能使用其中导出的代码要素 (比如函数、类型、变量和具名常量等)。 此篇文章将讲解Go代码包和代码 包引入(import)。 包引入0 码力 | 821 页 | 956.82 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
链安装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序 安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用来 管理项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默认 支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的 HOME目录下的名为go文件夹对应的目录路径。 fmt子命令来用同一种代码风格格式化Go代 码。 我们可以使用go test子命令来运行单元和基准测试用例。 我们可以使用go doc子命令来(在终端中)查看Go代码库包的文档。 强烈推荐让你的Go项目支持Go模块特性来简化依赖管理。对一个支持Go模块 特性的项目: go mod init example.com/myproject命令可以用来在当前目录中生成一个 go.mod文件。 当前目录将被视为一个名为example (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101 获 取本书最新版) 代码包和包引入 和很多现代编程语言一样,Go代码包(package)来组织管理代码。 我们必须 先引入一个代码包(除了builtin标准库包)才能使用其中导出的代码要素(比 如函数、类型、变量和具名常量等)。 此篇文章将讲解Go代码包和代码包引入 (import)。 包引入0 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序安装Go 官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用来管理 项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默认支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的HOME目 录下的名为go文件夹对应的目录路径。 fmt子命令来用同一种代码风格格式化Go代码。 我们可以使用go test子命令来运行单元和基准测试用例。 我们可以使用go doc子命令来(在终端中)查看Go代码库包的文档。 强烈推荐让你的Go项目支持Go模块特性来简化依赖管理。对一个支持Go模块特性的 项目: go mod init example.com/myproject命令可以用来在当前目录中生成一 个go.mod文件。 当前目录将被视为一个名为example 101”或者访问github.com/golang101/golang101获 取本书最新版) 第10章:代码包和包引入 68 代码包和包引入 和很多现代编程语言一样,Go代码包(package)来组织管理代码。 我们必须先引 入一个代码包(除了builtin标准库包)才能使用其中导出的代码要素(比如函 数、类型、变量和具名常量等)。 此篇文章将讲解Go代码包和代码包引入 (import)。 包引入0 码力 | 591 页 | 21.40 MB | 1 年前31.2 基于 Golang 构建高可扩展的云原生 PaaS 平台
业务 数据 业务系统 C 业务 数据 业务系统 A 业务 数据 业务系统 B 资源管理在统⼀平台 应⽤运⾏在统⼀平台 构建标准的交付环境 交付产物标准化 - 业务配置 - 资源配置 - 依赖配置 - 流⽔线配置 配置即代码 : 实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 APM 监控:应⽤诊断,链路追踪,⽇志分析 微服务治理组件 诊断 ⾃定义告警 APM 微服务管理 资源管理 标签管理 系统监控 集群管理 服务⽬录 埋点 数据库 ⽇志 画像 标签 报表 推荐 … 代码管理 持续集成 编排部署 应⽤运维 测试管理 协同管理 数据源管理 数据集成 数据开发 数据资产 数据服务 数据应⽤ 资源统计 运维报告 审计⽇志 K8S 管理 数据监控 多云管理平台 MySQL Redis Kafka 中间件 通⽤服务 ⾃定义服务 服务市场 Kubernetes Rancher Openshift 私有云 公共 物理机 虚拟机 微服务治理平台 DevOps 平台 边缘监控 边缘站点管理 制品 快速分发部署 边缘⽇志 边缘计算平台 边缘数据收集 边缘算⼒调度 ⽹络⾃动容错 平台产品 核⼼引擎 容器服务 基础设施 数仓设计 数据智能平台 智能预测 智能客服0 码力 | 40 页 | 8.60 MB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 ⼯业物联⽹ 智慧城市 ... 不同于 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 ⼯业物联⽹ 智慧城市 ... 不同于 业务分区而治 • 通过Namespace进行业务划分 • 业务数据对其他分区不可见 分区性能优异 运维灵活便捷 • 单次部署节点、灵活配置分区,降低运维成本 • 支持分区及分区成员的动态管理,快速适应业 务场景变化 • 不同分区交易并行执行,分区性能不随分区 数据增加而下降 分区机制 节点1 节点2 节点3 节点4 节点5 节点6 分区B 分区A 数据块 区块链平台关键技术-分区机制0 码力 | 39 页 | 56.58 MB | 1 年前33.云原生边云协同AI框架实践
保护数据隐私 SIG成员近年发表分 布式协同AI顶会论文 10+ SIG成员在AI顶会IJCAI 上分享分布式协同AI论文 Sedna斩获中国信通院云边协 同应用创新大赛最佳创新奖 ✓ 数据集管理 ✓ 模型管理 ✓ …… 基础框架 ✓ 协同推理 ✓ 增量学习 ✓ 联邦学习 ✓ 终身学习 训练推理框架 ✓ 主流AI框架 ✓ 模块算法 ✓ 可扩展算法接口 ✓ …… 兼容性 项目地址:https://github com/kubeedge/sedna 开源分布式协同AI框架KubeEdge-Sedna 1. GlobalCoordinator ⚫ 统一边云协同AI任务管理 ⚫ 跨边云协同管理与协同 ⚫ 中心配置管理 2. LocalController ⚫ 特性本地流程控制 ⚫ 本地通用管理: 模型, 数据集等 3. Worker ⚫ 执行训练或推理任务, 训练/推理程序, 基于现有AI框 架开 ⚫ 按需启动, docker容器或function 增量训练 管理 数据集管理, 模型管理, 状态同步 协同推理 管理 联邦学习 管理 Local Controller Worker Worker Worker 边侧推理 Lib 边侧训练 Model Worker 云侧 推理 Lib 参数 聚合 云侧 训练 Model Global Manager AI任务协调 AI任务管理 模型/数据集管理 Cloud0 码力 | 37 页 | 2.36 MB | 1 年前32.4 Go 1.4 runtime
核心:自主管理,缓存复用,无锁分配。 page, span. 内存管理以页为基本单位,多个地址连续 页构成内存块。 VA 8K 8K 8K 8K 8K span1 span2 small, large. 以 32KB 为界,将对象分成大小两类。 span page object object object small large object 切分 管理 分配 size [1] [2] ... class heap, central, cache. 三级管理机构。 heap central[1] cache cache 向 OS 申请内存。 管理空闲 span。 每个对应⼀一种 sizeclass。 从 heap 获取 span,切分。 管理未全部回收的 span。 从 central 获取 span。 与线程绑定,⽆无锁分配。 cache span/objects span ref != 0 ref = 0 相邻合并 OS X fixalloc. 为管理对象分配内存,不占用预留地址。 arena mem cache span span ... span: 管理内存块的元数据。 allspans: 垃圾回收遍历。 2. Garbage Collector 垃圾回收器 gc. 阈值触发,并行标记,并发清理。0 码力 | 29 页 | 608.57 KB | 1 年前3
共 53 条
- 1
- 2
- 3
- 4
- 5
- 6