1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台
Golang 构建⾼可扩展的云原⽣ PaaS 平台 刘浩杨 端点 技术专家 个⼈简介 - 18年加⼊端点,现任微服务和监控团队负责⼈ - 端点开源 PaaS Erda 的核⼼架构师 - 开源爱好者, Apache SkyWalking PMC 成员 ⽬ 录 ⾯向云原⽣的软件交付 01 端点⼀站式 PaaS - Erda 02 Erda 架构的思考 03 模块化开发框架 04 release_id: ${release:id} pipeline.yml 定义 - 屏蔽掉流⽔线定义的复杂度 - 丰富的通⽤Action,开箱即⽤ - Action 扩展规范,任意扩展 Workload 管理 - Create - Update - Delete - Describe - Scale - Restart services: trade-server: 弹性监控架构 模块化开发框架 第四部分 什么是 Erda Infra 开发框架 Erda Infra 是⼀套轻量级 Go 微服务框架,包含⼤量现成的模块和⼯具,能够快速构 建起以模块化驱动的应⽤程序。 • 以模块化设计⽅式来驱动应⽤系统实现,⽀持模块可插拔 • 统⼀配置读取,⽀持默认值、⽀持从⽂件、环境变量、命令⾏参数读取 • 统⼀模块的初始化、启动、关闭 • 统⼀管理模块间的依赖关系0 码力 | 40 页 | 8.60 MB | 1 年前3Go Module在又拍云的实践
0 码力 | 28 页 | 12.85 MB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
共识层 分布式⼀致性算法 典型共识算法 新型共识算法 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 共识层 分布式⼀致性算法 典型共识算法 新型共识算法 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 异构部署问题 性能扩展问题 之困局 ? n 机构间数据难打通,不愿打通 n 公网内网、网关网闸情况复杂 n 业务组织形式不同,异构链/系统难适配 n 数据量、网络复杂度指数上升,架构难扩展 16 趣链科技 版权所有 ©2016-2021 主链 节点 节点 锚节点 锚节点 节点 节点 同构⼦链 同构⼦链 主链 • 存证 • 权限控制 基础⼦链 扩展⼦链 • 同构⼦链直接通过主链互通0 码力 | 39 页 | 56.58 MB | 1 年前3Go Web编程
13.如何设计一个Web框架 13.1 项目规划 13.2 自定义路由器设计 13.3 controller设计 13.4 日志和配置设计 13.5 实现博客的增删改 13.6 小结 14.扩展Web框架 14.1 静态文件支持 14.2 Session支持 14.3 表单支持 14.4 用户认证 14.5 多语言支持 14.6 pprof支持 14.7 小结 附录A 参考资料 5 ,我们调用了一个函数Printf,这个函数来自于fmt包,所以我们在第三行中导入了 系统级别的fmt包:import "fmt"。 包的概念和Python中的package类似,它们都有一些特别的好处:模块化(能够把你的程序分成多个模块)和可重用性 (每个模块都能被其它应用程序反复使用)。我们在这里只是先了解一下包的概念,后面我们将会编写自己的包。 在第五行中,我们通过关键字func定义了一个main函数,函数体被放在{}(大括号)中,就像我们平时写C、C++或 最后大家可以看到我们输出的内容里面包含了很多非ASCII码字符。实际上,Go是天生支持UTF-8的,任何字符都可以 直接输出,你甚至可以用UTF-8中的任何字符作为标识符。 结论 结论 Go使用package(和Python的模块类似)来组织代码。main.main()函数(这个函数主要位于主包)是每一个独立 的可运行程序的入口点。Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者),所以它天生就具有多0 码力 | 295 页 | 5.91 MB | 1 年前3Golang在接入层长连接服务中的实践-黄欣
架构 • 整体架构图 架构—接口设计 • 原则 – 扩展性 – 稳定性(最好不用升级) • 解决方法 – Protobuf(golang) – 接口设计分层 • 框架层:模块间通信协议(类似tcp/udp) • 业务层:bytes(类似应用层)留给业务自己定义就好了 架构—性能 • conn svr 架构—集群扩展 • Proxy本身无限扩容(无状态) • 依赖的存储可无限扩容(状态交给存储) 依赖的存储可无限扩容(状态交给存储) – Redis集群:codis集群方案 – Mysql集群:中间件方案 架构—灾备 • 这里的灾备主要指的是依赖的存储降级方案,涉及到存储 的主要两个模块 – Auth svr:cache(redis) + db(mysql) – Route svr:cache + cache(standy) 架构—异地双活 • 要求 – 正常情况下: • 任何一个机房可推送到所有机房app svr • 常驻内存,内存中有个大连接对象map(资源问题) • 请求都是基于连接的(如果模块间存在资源的互相引用,当资源变更的情况 下,容易发生panic)(竟态问题) • 对象编程 – 封装:conn资源(包括goruntine)作为结构体封装起来,保证所有资源 销毁干净 – 解耦:保证其他模块不直接使用对象中资源 – 同步:竞态需要锁 特点:有状态,存在大量的公共资源并发访问 心得—coding—实现0 码力 | 31 页 | 1.67 MB | 1 年前33.云原生边云协同AI框架实践
同应用创新大赛最佳创新奖 ✓ 数据集管理 ✓ 模型管理 ✓ …… 基础框架 ✓ 协同推理 ✓ 增量学习 ✓ 联邦学习 ✓ 终身学习 训练推理框架 ✓ 主流AI框架 ✓ 模块算法 ✓ 可扩展算法接口 ✓ …… 兼容性 项目地址:https://github.com/kubeedge/sedna 开源分布式协同AI框架KubeEdge-Sedna 1. GlobalCoordinator 卸载,包括卸载到其他边缘或云端,以提升 整体推理效率。 多边协同推理: 联合多边缘信息提升精度,卸载任务到多边缘提升资源利用率 Sedna-GM: 一个K8S Operator 第三部分 Operator:特定应用扩展K8S API的控制器 •API: The data that describes the operand’s configuration. The API includes: • Custom implemented using the operator’s programming language, such as Go. “Kubernetes Operator 是一种特定于应用的控制器,可扩展 Kubernetes API 的功能,来代表 Kubernetes 用 户创建、配置和管理复杂应用的实例。” https://www.redhat.com/zh/topics/container0 码力 | 37 页 | 2.36 MB | 1 年前32.1.7 谈如何构建易于拆分的单体应用
Logic+Data Interface (3) Database (1) User Interface (4) Infrastructure 微服务架构的困境与突破 ➢ 服务拆分难 • 模块职责不清晰,模块之间耦合严重,⾯向数据库交 互,循环依赖等等,导致服务拆分困难:1.0版本, 2.0版本,3.0版本...... (初期缺乏设计) ➢ 服务维护成本⾼ • 看起来不复杂的功能搞了N个服务,花了⼏天的时间 解法:联系⽣活中的类似场景进⾏推演;想想⽣活中什么样的场景跟直播平台很类似? 建模:通过表象看本质 08 动态视图—规则 ➢ 动态视图:通过对象之间的交互来说明⽤例是如何被实现的 ➢ 问题:如何把实体转化为软件架构中的模块/系统 对象? ➢ ⽅案:尽量去映射,采⽤相似的命名,减少理解 上的差异! 建模:通过表象看本质 09 业务架构图 ➢ 分层架构:变与不变 ➢ 实现⽅式:单体架构 vs 微服务架构 directory 房间 directory ⽤户 directory ➢ 告别传统的MVC,⽤服务化/模块化的思想来构建我们的单体应⽤ 1. 同⼀个repo下,不同模块之间按照不同⽬录进⾏隔离; 2. 模块之间的通过service.go中定义的接⼝interface进⾏通信,⾼层模块不应该依赖于低层模块,两者都应该依赖其抽 象—依赖倒置; 实战:基于go-kit构建易于拆分的单体应⽤ 05 如何优雅的使⽤0 码力 | 27 页 | 13.04 MB | 1 年前3Go基础语法宝典
bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:d,e,f,g,h bSlice = aSlice[:] // bSlice包含所有aSlice的元素: d,e,f,g Array_a := [10]byte{'a' 用来导入包文件,经常看到的方式参考如下: 然后代码里面可以通过如下的方式调用 上面这个fmt是Go语言的标准库,其实是去 GOROOT 环境变量指定目录下去加载该模块,当然Go的 import还支持如下两种方式来加载自己写的模块: 1、相对路径 func throwsPanic(f func()) (b bool) { defer func() { if x 代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型称 之 struct 。如下代码所示: import "shorturl/model" //加载gopath/src/shorturl/model模块 import( . "fmt" ) import( f "fmt" ) import ( "database/sql" _ "github0 码力 | 47 页 | 1020.34 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 Go官方工具链安 装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序安装Go 官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用来管理 项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默认支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的HOME目 GOPATH环境变量可以被手动地配置多个路 径。 以后,当GOPATH文件夹被提及的时候,它表示GOPATH环境变量中的第一个 路径对应的文件夹。 GOPATH文件夹中的pkg子文件夹用来缓存被本地项目所依赖的Go模块(一个 Go模块为若干Go库包的集合)的版本。 GOBIN环境变量用来指定go install子命令产生的Go应用程序二进制可执行 文件应该存储在何处。 它的默认值为GOPATH文件夹中的bin子目录所对应的0 码力 | 591 页 | 21.40 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 Go官方工具 链安装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序 安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用 来管理项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默 认支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的 地配置多个路径。 以后,当GOPATH文件夹被提及的时候,它表示GOPATH环境 变量中的第一个路径对应的文件夹。 GOPATH文件夹中的pkg子文件夹用来缓存被本地项目所依赖的Go模块(一 个Go模块为若干Go库包的集合)的版本。 GOBIN环境变量用来指定go install子命令产生的Go应用程序二进制可执 行文件应该存储在何处。 它的默认值为GOPATH文件夹中的bin子目录所对0 码力 | 821 页 | 956.82 KB | 1 年前3
共 57 条
- 1
- 2
- 3
- 4
- 5
- 6