 基于 mesos 的容器调度框架2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 1/36 基于 mesos 的容器调度框架 Gopher 杭州 meetup 5 August 2017 黄励博(huangnauh) 又拍云 2017/8/3 基于 mesos 的容器调度框架 http://go-talks http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 2/36 What's Upone 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 3/36 Mesos 介绍 Image credit: apache.org (http://mesos.apache.org/) 官方称之为分布式系统内核, 它把数据中心的 CPU、内存、磁盘等抽象成一个资源池 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 4/36 Mesos 调度 各个 Agent0 码力 | 36 页 | 2.49 MB | 1 年前3 基于 mesos 的容器调度框架2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 1/36 基于 mesos 的容器调度框架 Gopher 杭州 meetup 5 August 2017 黄励博(huangnauh) 又拍云 2017/8/3 基于 mesos 的容器调度框架 http://go-talks http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 2/36 What's Upone 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 3/36 Mesos 介绍 Image credit: apache.org (http://mesos.apache.org/) 官方称之为分布式系统内核, 它把数据中心的 CPU、内存、磁盘等抽象成一个资源池 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 4/36 Mesos 调度 各个 Agent0 码力 | 36 页 | 2.49 MB | 1 年前3
 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台- Erda 02 Erda 架构的思考 03 模块化开发框架 04 开源新时代的挑战 05 ⾯向云原⽣的软件交付 第⼀部分 ⾯向云原⽣的企业软件产品 - 敏捷开发 - 微服务化和容器化 - 交付标准化 - 可观察性 特点: 敏捷的⽬标是提升研发效能 需要⼀个 DevOps 平台来⽀撑敏捷开发的落地 这⾥需要有⼀个标准的交付平台 运⾏环境 业务 数据 业务系统 C 应⽤运⾏在统⼀平台 构建标准的交付环境 交付产物标准化 - 业务配置 - 资源配置 - 依赖配置 - 流⽔线配置 配置即代码 : 实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 APM 监控:应⽤诊断,链路追踪,⽇志分析 微服务治理组件 可靠的业务 贴身护航 基础⽀撑 持续保障系统稳定性 只需很少的运维投⼊即可保证系统稳定性 端点⼀站式 虚拟机 微服务治理平台 DevOps 平台 边缘监控 边缘站点管理 制品 快速分发部署 边缘⽇志 边缘计算平台 边缘数据收集 边缘算⼒调度 ⽹络⾃动容错 平台产品 核⼼引擎 容器服务 基础设施 数仓设计 数据智能平台 智能预测 智能客服 智能仓储 智能推荐 流程⾃动化 智能营销 快数据平台 Linux OS, Kernel >= 3.10 ⼀站式 PaaS0 码力 | 40 页 | 8.60 MB | 1 年前3 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台- Erda 02 Erda 架构的思考 03 模块化开发框架 04 开源新时代的挑战 05 ⾯向云原⽣的软件交付 第⼀部分 ⾯向云原⽣的企业软件产品 - 敏捷开发 - 微服务化和容器化 - 交付标准化 - 可观察性 特点: 敏捷的⽬标是提升研发效能 需要⼀个 DevOps 平台来⽀撑敏捷开发的落地 这⾥需要有⼀个标准的交付平台 运⾏环境 业务 数据 业务系统 C 应⽤运⾏在统⼀平台 构建标准的交付环境 交付产物标准化 - 业务配置 - 资源配置 - 依赖配置 - 流⽔线配置 配置即代码 : 实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 APM 监控:应⽤诊断,链路追踪,⽇志分析 微服务治理组件 可靠的业务 贴身护航 基础⽀撑 持续保障系统稳定性 只需很少的运维投⼊即可保证系统稳定性 端点⼀站式 虚拟机 微服务治理平台 DevOps 平台 边缘监控 边缘站点管理 制品 快速分发部署 边缘⽇志 边缘计算平台 边缘数据收集 边缘算⼒调度 ⽹络⾃动容错 平台产品 核⼼引擎 容器服务 基础设施 数仓设计 数据智能平台 智能预测 智能客服 智能仓储 智能推荐 流程⾃动化 智能营销 快数据平台 Linux OS, Kernel >= 3.10 ⼀站式 PaaS0 码力 | 40 页 | 8.60 MB | 1 年前3
 Go Web编程struct类型 61 2.4 struct类型 2.4 struct类型 struct struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以 创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如 下代码所示: type person struct { 使用SQLite数据库 SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。其特点是高度便携、使 用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下, 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决 方案,SQLite是绝对值得考虑。SQLite可以是说开源的Access。0 码力 | 295 页 | 5.91 MB | 1 年前3 Go Web编程struct类型 61 2.4 struct类型 2.4 struct类型 struct struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以 创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如 下代码所示: type person struct { 使用SQLite数据库 SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。其特点是高度便携、使 用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下, 只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决 方案,SQLite是绝对值得考虑。SQLite可以是说开源的Access。0 码力 | 295 页 | 5.91 MB | 1 年前3
 Golang 微服务在腾讯游戏用户运营领域的探索及实践Thread overhead cLua/cLuaJIT • Performance / API friendly GopherLua 交互开销 线程 安全 VM线程开 销 学习 成本 嵌入式Lua虚拟机 Gopherlua VM Pool Closure 隔离 即写即用 One VM One Service, Write Once Run Anywhere 微服务划分 Intervene0 码力 | 34 页 | 1.22 MB | 1 年前3 Golang 微服务在腾讯游戏用户运营领域的探索及实践Thread overhead cLua/cLuaJIT • Performance / API friendly GopherLua 交互开销 线程 安全 VM线程开 销 学习 成本 嵌入式Lua虚拟机 Gopherlua VM Pool Closure 隔离 即写即用 One VM One Service, Write Once Run Anywhere 微服务划分 Intervene0 码力 | 34 页 | 1.22 MB | 1 年前3
 Go vs. GoPlus(Go+)(Intelligent Application) • 典型代表:抖音、快手 -Big Data (大规模数据) -Any Where (随处): 云 (Cloud)、智能手机 (Smart Phone)、嵌入式设备 (IoT) 数据科学的大爆发时期:DT 时代 • 互联网平民化 -Internet Application (互联网应用) -诞生了 BAT • 数据科学平民化 -Intelligent0 码力 | 54 页 | 1.82 MB | 1 年前3 Go vs. GoPlus(Go+)(Intelligent Application) • 典型代表:抖音、快手 -Big Data (大规模数据) -Any Where (随处): 云 (Cloud)、智能手机 (Smart Phone)、嵌入式设备 (IoT) 数据科学的大爆发时期:DT 时代 • 互联网平民化 -Internet Application (互联网应用) -诞生了 BAT • 数据科学平民化 -Intelligent0 码力 | 54 页 | 1.82 MB | 1 年前3
 如何使用 docker 部署一个 beego 项目帮助你为应用程序创建一个单独的可部署单元。这个单元,也被称为容器,包含该应用 序需要的所有东西。它包括代码(或者二进制文件)、runtime(运行环境)、系统工具盒系统库。 所有必需的资源打包成一个单元将确保无论应用程序部署到哪里都有完全相同的环境。这也有助于维 一个完全相同的开发和生产配置,这在以前是很难追踪的。 如何使用 docker 部署一个 beego 项目帮助你为应用程序创建一个单独的可部署单元。这个单元,也被称为容器,包含该应用 序需要的所有东西。它包括代码(或者二进制文件)、runtime(运行环境)、系统工具盒系统库。 所有必需的资源打包成一个单元将确保无论应用程序部署到哪里都有完全相同的环境。这也有助于维 一个完全相同的开发和生产配置,这在以前是很难追踪的。- 一旦开始,容器的创建和部署将自动完成。它消除了一大类问题。这些问题主要是由于文件没有 id="相比于虚拟机的优势">相比于虚拟机的优势 - 容器提供了与虚拟机相似的资源分配和隔离优势。然而,相同之处仅此而已。 - 一个虚拟机需要它自己的客户操作系统而容器共享主机操作系统的内核。这意味着容器更加轻量 且需要更少的资源。从本质上讲,一个虚拟机是操作系统中的一个操作系统。而另一方面的容器则更 是操作系统中的其它应用程序。基本上,容器需要的资源(内存、磁盘空间等等)比虚拟机少很多, 在开发阶段的优势 - 在开发中使用 Docker 的优势包括: - 一个用于所有团队成员的标准开发环境
- 更新的依赖性集中化以及在任何地方都能使用相同的容器
- 在开发和生产中完全相同的环境
- 修复了可能只会出现在生产环境中的潜在问题
 
 Golang 101(Go语言101 中文版)  v1.21.aGo类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 必须都为新声明的变 量。 注意,相对于纯赋值语句,目前短声明语句有一个限制:出现在一个短声明左 侧的项必须都为纯标识符。 以后我们将学习到在纯赋值语句的左边可以出现结 构体值的字段,指针的解引用和容器类型值的元素索引项等。 但是这些项不能 出现在一个变量短声明语句的左边。 关于“赋值”这个术语 以后,当“赋值”这个术语被提到的时候,它可以指一个纯赋值、一个短变量声 明或者一个初始值未省略的标准变量声明。 Go语言中有三种基本的流程控制代码块: if-else条件分支代码块; for循环代码块; switch-case多条件分支代码块。 Go中另外还有几种和特定种类的类型相关的流程控制代码块: 容器类型(第18章)相关的for-range循环代码块。 接口类型(第23章)相关的type-switch多条件分支代码块。 通道类型(第21章)相关的select-case多分支代码块。 和很多其它0 码力 | 608 页 | 1.08 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.aGo类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 必须都为新声明的变 量。 注意,相对于纯赋值语句,目前短声明语句有一个限制:出现在一个短声明左 侧的项必须都为纯标识符。 以后我们将学习到在纯赋值语句的左边可以出现结 构体值的字段,指针的解引用和容器类型值的元素索引项等。 但是这些项不能 出现在一个变量短声明语句的左边。 关于“赋值”这个术语 以后,当“赋值”这个术语被提到的时候,它可以指一个纯赋值、一个短变量声 明或者一个初始值未省略的标准变量声明。 Go语言中有三种基本的流程控制代码块: if-else条件分支代码块; for循环代码块; switch-case多条件分支代码块。 Go中另外还有几种和特定种类的类型相关的流程控制代码块: 容器类型(第18章)相关的for-range循环代码块。 接口类型(第23章)相关的type-switch多条件分支代码块。 通道类型(第21章)相关的select-case多分支代码块。 和很多其它0 码力 | 608 页 | 1.08 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.aGo类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 必须都为新声明的变 量。 注意,相对于纯赋值语句,目前短声明语句有一个限制:出现在一个短声明左 侧的项必须都为纯标识符。 以后我们将学习到在纯赋值语句的左边可以出现 结构体值的字段,指针的解引用和容器类型值的元素索引项等。 但是这些项 不能出现在一个变量短声明语句的左边。 关于“赋值”这个术语 以后,当“赋值”这个术语被提到的时候,它可以指一个纯赋值、一个短变量声 明或者一个初始值未省略的标准变量声明。 Go语言中有三种基本的流程控制代码块: if-else条件分支代码块; for循环代码块; switch-case多条件分支代码块。 Go中另外还有几种和特定种类的类型相关的流程控制代码块: 容器类型(第18章)相关的for-range循环代码块。 接口类型(第23章)相关的type-switch多条件分支代码块。 通道类型(第21章)相关的select-case多分支代码块。 和很多0 码力 | 821 页 | 956.82 KB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.aGo类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 必须都为新声明的变 量。 注意,相对于纯赋值语句,目前短声明语句有一个限制:出现在一个短声明左 侧的项必须都为纯标识符。 以后我们将学习到在纯赋值语句的左边可以出现 结构体值的字段,指针的解引用和容器类型值的元素索引项等。 但是这些项 不能出现在一个变量短声明语句的左边。 关于“赋值”这个术语 以后,当“赋值”这个术语被提到的时候,它可以指一个纯赋值、一个短变量声 明或者一个初始值未省略的标准变量声明。 Go语言中有三种基本的流程控制代码块: if-else条件分支代码块; for循环代码块; switch-case多条件分支代码块。 Go中另外还有几种和特定种类的类型相关的流程控制代码块: 容器类型(第18章)相关的for-range循环代码块。 接口类型(第23章)相关的type-switch多条件分支代码块。 通道类型(第21章)相关的select-case多分支代码块。 和很多0 码力 | 821 页 | 956.82 KB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.aGo类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第7章:常量和变量 44 注意,相对于纯赋值语句,目前短声明语句有一个限制:出现在一个短声明左侧的 项必须都为纯标识符。 以后我们将学习到在纯赋值语句的左边可以出现结构体值的 字段,指针的解引用和容器类型值的元素索引项等。 但是这些项不能出现在一个变 量短声明语句的左边。 关于“赋值”这个术语 以后,当“赋值”这个术语被提到的时候,它可以指一个纯赋值、一个短变量声明 或者一个初始值未省略的标准变量声明。 Go语言中有三种基本的流程控制代码块: if-else条件分支代码块; for循环代码块; switch-case多条件分支代码块。 Go中另外还有几种和特定种类的类型相关的流程控制代码块: 容器类型(第18章)相关的for-range循环代码块。 接口类型(第23章)相关的type-switch多条件分支代码块。 通道类型(第21章)相关的select-case多分支代码块。 和很多0 码力 | 591 页 | 21.40 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.aGo类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第7章:常量和变量 44 注意,相对于纯赋值语句,目前短声明语句有一个限制:出现在一个短声明左侧的 项必须都为纯标识符。 以后我们将学习到在纯赋值语句的左边可以出现结构体值的 字段,指针的解引用和容器类型值的元素索引项等。 但是这些项不能出现在一个变 量短声明语句的左边。 关于“赋值”这个术语 以后,当“赋值”这个术语被提到的时候,它可以指一个纯赋值、一个短变量声明 或者一个初始值未省略的标准变量声明。 Go语言中有三种基本的流程控制代码块: if-else条件分支代码块; for循环代码块; switch-case多条件分支代码块。 Go中另外还有几种和特定种类的类型相关的流程控制代码块: 容器类型(第18章)相关的for-range循环代码块。 接口类型(第23章)相关的type-switch多条件分支代码块。 通道类型(第21章)相关的select-case多分支代码块。 和很多0 码力 | 591 页 | 21.40 MB | 1 年前3
 微服务容灾治理benchmarkCPU-103303600743ns/op 从 benchmark 结果可以看出单个请求的逻辑处理需要3.6msCPU资源(不包括服务端中间件处理 消耗)。对于两核的容器来说,qps上限约为550(2000/3.6)。但是我们是⼀个HTTPserver,肯定 还有接受请求、解析请求、返回结果等开销,实际上是达不到550qps的。 这个模拟CPU的代码本⾝不重要,就不做介绍了。 1场景⼀(不开启过载保护) Timeout:1000 Middlewares: Breaker:false Shedding:false • 服务跑在两核的容器内 • 不开启过载保护 • 超时1s • loops 2 hey -c 200 -z 60m "http://localhost:8888/ping" ◦ loops 是我的⼀个 alias 们怎么检测CPU使⽤率呢? ⾸先,我们要明确需要覆盖的场景,当前⽆外乎虚机和容器两⼤类了。⽽容器⾥⼜分为 cgroup v1 和 cgroup v2 ,所以总的有三类需要处理: • 虚机(不同云⼚商有不同的叫法,⽐如ECS,EC2等) • 容器cgroupv1 • 容器cgroupv2 这⾥有个特别需要关注的点是:容器是否设置了 cpu limit ,如果没设,就只能⽤可以调度的cpu0 码力 | 13 页 | 1.68 MB | 1 年前3 微服务容灾治理benchmarkCPU-103303600743ns/op 从 benchmark 结果可以看出单个请求的逻辑处理需要3.6msCPU资源(不包括服务端中间件处理 消耗)。对于两核的容器来说,qps上限约为550(2000/3.6)。但是我们是⼀个HTTPserver,肯定 还有接受请求、解析请求、返回结果等开销,实际上是达不到550qps的。 这个模拟CPU的代码本⾝不重要,就不做介绍了。 1场景⼀(不开启过载保护) Timeout:1000 Middlewares: Breaker:false Shedding:false • 服务跑在两核的容器内 • 不开启过载保护 • 超时1s • loops 2 hey -c 200 -z 60m "http://localhost:8888/ping" ◦ loops 是我的⼀个 alias 们怎么检测CPU使⽤率呢? ⾸先,我们要明确需要覆盖的场景,当前⽆外乎虚机和容器两⼤类了。⽽容器⾥⼜分为 cgroup v1 和 cgroup v2 ,所以总的有三类需要处理: • 虚机(不同云⼚商有不同的叫法,⽐如ECS,EC2等) • 容器cgroupv1 • 容器cgroupv2 这⾥有个特别需要关注的点是:容器是否设置了 cpu limit ,如果没设,就只能⽤可以调度的cpu0 码力 | 13 页 | 1.68 MB | 1 年前3
共 31 条
- 1
- 2
- 3
- 4














