GoFrame框架介绍及设计
GoFrame是一款模块化、高性能、企业级的Go基础开发框架。 • 模块化、松耦合 • 模块丰富、开箱即用 • 简洁易用、快速接入 • 文档详尽、易于维护 • 自顶向下、体系化设计 • 统一框架、统一组件、降低选择成本 • 开发规范、设计模式、代码分层模型 • 强大便捷的开发工具链 • 完善的本地中文化支持 • 设计为团队及企业使用 特点 框架介绍-框架架构 • 发布方式:Docker、二级制、源码模块 跨平台性:基于Golang开发语言强大跨平台特性 框架介绍-项目初心 工程化建设 统一框架 核心组件 项目架构 设计模式 开发规范 开发文档 开发工具 …… 模块化设计 第二部分 • 复用原则 • 单仓包设计 • 模块聚合设计 • 常见问题 模块化设计 什么是模块? 模块化的目标? 模块也称作组件,是软件系统中可复用的功能逻辑封装单位。 在不同的软件架构层次,模块的概念会有些不太一样。 编译型语言: 发布文件往往很小 源代码 解释器 输出 每次执行都需要解释 打包发布 解释型语言: 发布文件往往较大 统一框架设计 第三部分 • 技术体系化 • 开发规范化 • 组件统一化 • 形成技术沉淀 • 避免资源浪费 统一框架设计 统一框架设计-技术体系化 Container Converting Errors I18N Cache Validater0 码力 | 37 页 | 8.84 MB | 1 年前3Go在工程实践的错误处理
第二部分 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 gRPC错误日志:param error 哪个Client 调用? 哪一行代码 调用? 我的 参数问题? 对方的问题? ... 遇到一个问题,我们就追加一个日志字段,排查错误效率非常低 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 对端信息 请求方法 请求参数 响应数据 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 • 在调试阶段,日志用红色高亮错误 • 肉眼才能最快的定位到error日志 • 利用IDE规则,直接点开代码执行行号,跳到指定的代码位置 • 一堆info日志中藏着error日志 • 你能一眼找到error日志吗? 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 框架封装错误信息 gRPC HTTP HTTP MySQL Redis Kafka ... • 脏活累活交给框架 • 组件要全面统一 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 • 没有调试信息和错误信息 • 对接起来会非常麻烦 优雅处理错误信息 第三部分 为什么定位慢?-- 错误处理 不要透传错误 错误码唯一性 记录一次错误 假设用户反馈了无法打开一个文件 我们的程序员非常认真 记录了文件不存在的错误日志0 码力 | 30 页 | 3.11 MB | 1 年前3Golang大规模云原生应用管理实践
应用管理的策略与机制 应用 版本 工作负载 负载均衡 标签 流量 组件 日志 指标 容量 服务 依赖 路由规则 持久卷 部署策略 健康检查 … 灰度 发布 定时弹性 事件 指标弹性 分批发布 重启 回滚 日志管理 事件中心 指标监控 存储挂载 服务绑定 手动弹性 回退历史 负载均衡 报警 诊断 组件管理 服务治理 … 权限 K8s Istio Envoy 扩展效率低:需要负责安装,升级丰富的云原生插件,无法解决插件的依赖,冲突和资源浪费问题; • 运维成本高:Apiserver, etcd, Controller-Manager, Kubelet,等组件都具有一定复杂度,无法做到定期升 级以维持安全,高可用,高性能的状态; • … 能力复用 自动化 可观测 稳定 安全 开发者真正想要的是策略:大象无形的基础设施,坚如磐石的中间件,丰富高效的应用PaaS平台 EDAS的平台构建策略-OAM应用模型 https://github.com/oam-dev/spec • 应用 • 组件1(工作负载) • 运维特征1 • 运维特征2 • … • 组件2 (工作负载) • 运维特征1 • 运维特征2 • … • … 作用域 能力定义 依赖编排 组件版本 服务绑定 OAM应用模型 apiVersion: core.oam.dev/v1alpha2 kind:0 码力 | 23 页 | 7.70 MB | 1 年前3Go可观测性实践
数据并传输到所选择的后端,最终在2019年,两个组织共同组建OTel项目, 并由CNCF负责。 OTel目前已经成为可观测性方案开源标准,标准的好处就是有了很多选择。 OpenTelemetry OTel 组件 • API • SDK • Exporter • Collector OTel Collector • Receiver • Processor • Exporter 微服务业务架构图 将不同系统孤立的调用日志和异常信息串联一起,通过 spanid 和 parentid 表达节点 的父子关系 链路追踪 在分布式系统中请求的路径经常很凌乱且无法预测,为了构建我们想要的任何路 径的视图,无论多么复杂,每个组件都需要五段数据: • TraceID:请求唯一标识符,由根span产生,贯穿请求的各个阶段。 • SpanID:span包含单一链路中一个工作单元收到的信息。 • ParentID:区别请求链 Go工程插桩(Instrument) 需要对业务开发者几乎零成本的接入链路追踪,几乎完全依赖于少量通用组件库的改造。 当一个请求在处理跟踪控制路径的过程中,需要把跟踪的上下文存储在ThreadLocal中,在Go中 就是存储在Context中,一般约定每个方法第一个参数为Context(上下文)。 覆盖组件不限于:数据库、缓存、消息队列、RPC、HTTP等。 插桩(拦截器) 创建并命名上下文(HTTP请0 码力 | 35 页 | 2.88 MB | 1 年前304. GraphQL in Chaos Mesh 2.0 - 李晨曦
Chaos Mesh 是什么 我们的目标 ● 建立一个完全闭环的云原生混沌工程平台 ● 让混沌工程变得更易用 问题与解决方案 集群中的状态 Chaos Mesh 本身的运行和注入的故障会 给各组件以及目标 Pod 带来各种状态。 cluster status Components Controller Daemon Dashboard Dns Server Pods Status 地获取各种状态则决定了故障诊断的效率。 集群状态大致可以分为两类,主要分类依据是能否通过 kubernetes API 直接查询。 k8s 可直接查询的状态 Kubernetes 和 Chaos Mesh 组件运行的状态均可直接通过 k8s API 查询。 cluster status Components Controller Daemon Dashboard Dns Server Pods 对于所有的状态查询都存在的一大问题是,各级状态之间很难进行关联查询。 人脑关联查询示例: 状态查询的解决方案 首先我们考虑障碍1,要避免查询客户端所需权限过高,最简单的办法就是在一个拥有创建 pod/exec 权限的组件上运行一个 API server 来运行查询命令,而查询客户端仅创建 pod/forward 权限即可与 API server 通信。 Query Client API Server Target0 码力 | 30 页 | 1.29 MB | 1 年前302. Service Mesh落地之后_为sidecar注入灵魂 - 周群力
网络代理 定位 流量拦截 交互方式 私有协议 通信协议 高 能力丰富度 Http/gRPC 标准协议 19 Dapr Dapr 20 • 提供多种分布式能力 • 对接了丰富的基础组件 • 厂商解绑,跨云部署 21 事情没有那么 简单 Dapr 没解决什么 22 App 怎么落地 方案 1:替换 方案 2:共存 《The ABC of Lock-In》 2012 多语言治理 同一套代码移植到不同组件 • Runtime API:真正的供应商解绑 • WebAssembly in sidecar:让业务逻辑跑在 sidecar 里 • Service Mesh : 通信中间件下沉,sidecar 实现组织架构上 的解耦 • Multi Runtime: 所有中间件下沉: 业务逻辑和基础设施分离 多语言治理 同一套代码移植到不同组件 59 Service https://github.com/mosn/layotto 63 微信扫码进群 与五湖四海的开发者们 进行技术交流,探索技术创新 扫码关注公众号,参与活动抽奖 与 2.8W+ 技术精英 交流技术干货 & 开源组件0 码力 | 63 页 | 880.85 KB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
典型共识算法 新型共识算法 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 ⼯业物联⽹ 智慧城市 典型共识算法 新型共识算法 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 智慧政务 物联⽹ 能源电⼒ 跨境贸易 ⼯业物联⽹ 智慧城市 log-Segment-001 log-Segment-002 log-Segment-00N ... ... index-001 index-002 index-00N 读缓存组件 数据部分 句柄管理组件 ... ... Filelog存储引擎 持久化层 Multicache存储引擎 内存层 memory-table write-ahead log ... ... 异步写入0 码力 | 39 页 | 56.58 MB | 1 年前3基于 mesos 的容器调度框架
com/github.com/huangnauh/slides/upone.slide#3 30/36 组件化 store 组件, 已支持 hashicorp/raft-boltdb (https://github.com/hashicorp/raft-boltdb) , 数据库 drive 组件, upone 可以选择 master-agent 模式, 不依赖于 mesos 独立使用 2017/8/30 码力 | 36 页 | 2.49 MB | 1 年前3Go Web编程
WebSocket原理 WebSocket的协议颇为简单,在第一次handshake通过以后,连接便建立成功,其后的通讯数据都是以”\x00″开头, 以”\xFF”结尾。在客户端,这个是透明的,WebSocket组件会自动将原始数据“掐头去尾”。 浏览器发出WebSocket连接请求,然后服务器发出回应,然后连接建立成功,这个过程通常称为“握手” (handshaking)。请看下面的请求和反馈信息: 会得到通知。此外此请 求可以由任何可用服务器回答,这十分适合云计算之类的环境。因为是无状态的,所以客户端可以缓存数据以改进性 能。 另一个重要的REST原则是系统分层,这表示组件无法了解除了与它直接交互的层次以外的组件。通过将系统知识限制 在单个层,可以限制整个系统的复杂性,从而促进了底层的独立性。 下图即是REST的架构图: 189 图8.5 REST架构图 当REST架 links links 目录 上一章: 构建博客系统 下一节: 自定义路由器设计 256 13.2 自定义路由器设计 13.2 自定义路由器设计 HTTP路由 HTTP路由 HTTP路由组件负责将HTTP请求交到对应的函数处理(或者是一个struct的方法),如前面小节所描述的结构图,路由在 框架中相当于一个事件处理器,而这个事件包括: 用户请求的路径(path)(例如:/user/1230 码力 | 295 页 | 5.91 MB | 1 年前32.6 Go in Linux Desktop Environment
夏彬 武汉深之度 Linux桌面环境 Gnome (Gtk) KDE (Qt) Lxde (Gtk) LxQt(Qt5) Xfce (Gtk) DDE (Gtk) ....... DE组件 Windows Manager Input Method Launcher Panel (dock) Session Manager Appearance Configure Modules 软件商店(各种应用软件才是正常用户需要的,基础设施不应该放到用户面前) 相关实验性项目 Gnome SDK + sandboxed appliations Deepin XX ? 遇到的问题 与其他组件的融合 X11 解决方式 using CGO to get anything Pure golang library CGO Tips Go-C C-Go struct array0 码力 | 36 页 | 414.50 KB | 1 年前3
共 28 条
- 1
- 2
- 3