Go Module在又拍云的实践0 码力 | 28 页 | 12.85 MB | 1 年前3
 GoFrame框架介绍及设计成都医联科技 架构师 目 录 框架介绍 01 模块化设计 02 统一框架设计 03 代码分层设计 04 对象封装设计 05 DAO封装设计 06 未来发展规划 07 框架介绍 第一部分 • 框架介绍 • 框架架构 • 项目初心 框架介绍 GoFrame是一款模块化、高性能、企业级的Go基础开发框架。 • 模块化、松耦合 • 模块丰富、开箱即用 • 简洁易用、快速接入 • 开发规范、设计模式、代码分层模型 • 强大便捷的开发工具链 • 完善的本地中文化支持 • 设计为团队及企业使用 特点 框架介绍-框架架构 • 发布方式:Docker、二级制、源码模块 • 模块管理: • 核心模块、社区模块、三方模块 • Go Modules管理方式 • 开发工具链 • 设计模式:MVC、三层架构、工具集 • 应用接口:HTTP/TCP/UDP/RPC Server、终端应用、源码接口 …… 模块化设计 第二部分 • 复用原则 • 单仓包设计 • 模块聚合设计 • 常见问题 模块化设计 什么是模块? 模块化的目标? 模块也称作组件,是软件系统中可复用的功能逻辑封装单位。 在不同的软件架构层次,模块的概念会有些不太一样。 在开发框架层面,模块是某一类功能逻辑的最小封装单位。 在Golang代码层面中,我们也可以将package称作模块。 软件进行模块化设计的目的,0 码力 | 37 页 | 8.84 MB | 1 年前3
 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台的核⼼架构师 - 开源爱好者, Apache SkyWalking PMC 成员 ⽬ 录 ⾯向云原⽣的软件交付 01 端点⼀站式 PaaS - Erda 02 Erda 架构的思考 03 模块化开发框架 04 开源新时代的挑战 05 ⾯向云原⽣的软件交付 第⼀部分 ⾯向云原⽣的企业软件产品 - 敏捷开发 - 微服务化和容器化 - 交付标准化 - 可观察性 特点: 敏捷的⽬标是提升研发效能 弹性监控架构 模块化开发框架 第四部分 什么是 Erda Infra 开发框架 Erda Infra 是⼀套轻量级 Go 微服务框架,包含⼤量现成的模块和⼯具,能够快速构 建起以模块化驱动的应⽤程序。 • 以模块化设计⽅式来驱动应⽤系统实现,⽀持模块可插拔 • 统⼀配置读取,⽀持默认值、⽀持从⽂件、环境变量、命令⾏参数读取 • 统⼀模块的初始化、启动、关闭 • 统⼀管理模块间的依赖关系 统⼀管理模块间的依赖关系 • ⽀持模块间的依赖注⼊ • 包含⼤量现成的微模块 • ⽀持统⼀ gRPC 和 HTTP 接⼝设计、以及拦截器 • 提供快速构建模块的代码⽣成⼯具 Erda Infra 如何设计 Erda Infra 有什么不同 - 不是重复造轮⼦ - 不仅是web框架 - 不仅是微服务框架 - 为扩展⽽⽣ - 以模块化的开发为核⼼ VS 模块化开发原则 - ⾯向接⼝进⾏开发,⽽不是⾯向实现0 码力 | 40 页 | 8.60 MB | 1 年前3
 2.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 年前3
 2.2 龚浩华(月牙寂)p2p缓存系统 基于Golang的Aop设计模式 现实世界的设计模式直接可以拿来借鉴 P2P缓存框架 P2P缓存框架 1、入口监听模块 常驻 功能监听识别连接 2、任务管理模块 常驻 管理任务、分流client P2P缓存框架 3、任务模块 文件缓存度:是否需要下载 文件热点程度:是否热点 文件下载状态:sleep、down、限速 自身存在的必要检查:如超时无client连接 P2P缓存框架 4、文件模块 具体文件的存储,另外再加上内存缓存系统 5、client 对应于与客户端的一个连接,通过协议进行 通信。通过任务模块再来进行文件模块的读 写,将数据发送给客户端 6、下载模块 如何识别热点?群体智能 Golang一些经验 2、共享内存与chan通信 在大的模块之间定义接口的时候。 1、可以用函数对象。(接口只有一个的时 候) 2、可以通过chan通信 3、可以通过interface定义接口(多个接口) 在模块内,可以考虑用读写锁访问变量或用 原子变量 Golang一些经验 3、注意定时器tick0 码力 | 29 页 | 338.20 KB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.aGo官方工具 链安装目录下的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子目录所对 run子命令并不推荐在正式的大项目中使用。go run子命令只是一种方 便的方式来运行简单的Go程序。 对于正式的项目,最好使用go build或 者go install子命令构建可执行程序文件来运行Go程序。 支持Go模块特性的Go项目的根目录下需要一个go.mod文件。此文件可以 使用go mod init子命令来生成(见下)。 名称以_和.开头的源代码文件将被Go官方工具链工具忽略掉。 更多go子命令 上面提到的三个go子命令(go0 码力 | 821 页 | 956.82 KB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.aGo官方工具 链安装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序 安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用来 管理项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默认 支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的 GOPATH环境变量可以被手动地 配置多个路径。 以后,当GOPATH文件夹被提及的时候,它表示GOPATH环境变量 中的第一个路径对应的文件夹。 GOPATH文件夹中的pkg子文件夹用来缓存被本地项目所依赖的Go模块(一 个Go模块为若干Go库包的集合)的版本。 GOBIN环境变量用来指定go install子命令产生的Go应用程序二进制可执行 文件应该存储在何处。 它的默认值为GOPATH文件夹中的bin子目录所对应 run子命令并不推荐在正式的大项目中使用。go run子命令只是一种方 便的方式来运行简单的Go程序。 对于正式的项目,最好使用go build或者 go install子命令构建可执行程序文件来运行Go程序。 支持Go模块特性的Go项目的根目录下需要一个go.mod文件。此文件可以使 用go mod init子命令来生成(见下)。 名称以_和.开头的源代码文件将被Go官方工具链工具忽略掉。 更多go子命令 上面提到的三个go子命令(go0 码力 | 608 页 | 1.08 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.aGo官方工具链安 装目录下的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子目录所对应的 run子命令并不推荐在正式的大项目中使用。go run子命令只是一种方 便的方式来运行简单的Go程序。 对于正式的项目,最好使用go build或者 go install子命令构建可执行程序文件来运行Go程序。 支持Go模块特性的Go项目的根目录下需要一个go.mod文件。此文件可以使用 go mod init子命令来生成(见下)。 名称以_和.开头的源代码文件将被Go官方工具链工具忽略掉。 第3章:Go官方工具链0 码力 | 591 页 | 21.40 MB | 1 年前3
 Golang在接入层长连接服务中的实践-黄欣• 心得 架构 • 整体架构图 架构—接口设计 • 原则 – 扩展性 – 稳定性(最好不用升级) • 解决方法 – 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 年前3
 大规模高性能区块链架构设计模式与测试框架-李世敬(JSON-RPC层) 核⼼模块 (共识、执⾏等) 节点出⼝ 交易拦截 消息分发 带宽限流 客户端 其他节点 节点间⽹络通信 (传递共识消息等) 系统外部 系统内部 交易拦截器限流 在系统最外层及早对交易进⾏拦截,阻⽌交易渗透 到主流程花费不必要的系统开销 消息分发器限流 P2P⽹络层通过消息分发器将消息带权分发给对应 模块处理,降低各模块由于处理能⼒差异⽽相互⼲ 扰,保证核⼼模块正常运⾏ 扰,保证核⼼模块正常运⾏ ⽹络带宽限流 限制节点最⼤出⼝带宽流量,适⽤于对⽹络带宽 有限制需求的场景 功能简介 22 趣链科技 版权所有 ©2016-2021 22 趣链科技 版权所有 ©2016-2021 22 趣链科技 版权所有 ©2016-2021 22 log-Segment-001 log-Segment-002 log-Segment-00N ... ... index-0010 码力 | 39 页 | 56.58 MB | 1 年前3
共 28 条
- 1
 - 2
 - 3
 













