2.1.7 谈如何构建易于拆分的单体应用谈如何构建易于拆分的单体应⽤ 郑渊 腾讯公司 ⾼级⼯程师 ⽬ 录 微服务架构的困境与突破 01 建模:通过表象看本质 02 基于go-kit构建易拆分的单体应⽤ 03 总结 04 微服务架构的困境与突破 第⼀部分 微服务架构的困境与突破 01 Monolith to Microservices To move from Monolithic to Microservices (职责划分和架构选型不 合理,为了微服务⽽微服务) • 监控,告警,CI/CD,服务治理,分布式追踪等基础 设施不完善,维护成本⾼(⾃建—>云原⽣) 02 困境 MVC架构 微服务架构的困境与突破 ➢ 构建合理的业务模型(Monolith or Microservice) 1. 建模⽅法不只有领取驱动设计-DDD,还有⽤例驱动 设计-UDD等; 2. 并不是开始进⾏微服务拆分的时候才⽤到对应的建 ⽅案:尽量去映射,采⽤相似的命名,减少理解 上的差异! 建模:通过表象看本质 09 业务架构图 ➢ 分层架构:变与不变 ➢ 实现⽅式:单体架构 vs 微服务架构 实战:基于go-kit构建易拆分的单体应⽤ 第三部分 实战:基于go-kit构建易于拆分的单体应⽤ 01 Go-kit Instruction https://github.com/go-kit/kit Go-kit is a programming0 码力 | 27 页 | 13.04 MB | 1 年前3
使用Go与redis构建有趣的应用使⽤用 Go 和 Redis 构建有趣的程序 ⻩黄健宏 @ huangz.me 关于我 • ⻩黄健宏,⽹网名 huangz ,⼴广东清远⼈人。 • 计算机技术图书作者和译者,偶尔也写⼀一点⼩小程序⾃自娱⾃自乐。 • 精通 Go、 Python 、 Ruby 、 PHP、 C 等数⼗十种语⾔言……的 Hello World ! • 著作:《Redis 设计与实现》,《Redis 使⽤用教程》(写作中)。 Redis 简介 ⼆二. 使⽤用 Redis 构建锁 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 三. 使⽤用 Redis 构建在线⽤用户统计器器 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 三. 使⽤用 Redis 构建在线⽤用户统计器器 四. 使⽤用 Redis 构建⾃自动补完程序 Redis an open “great” w5, “guide” 输⼊入与候选结果 权重与候选结果 使⽤用有序集合储存权重表 构建权重表 构建权重表 现有的权重表 分值 成员 320 “google” 300 “gmail” 278 “great” 277 “gopher” 210 “guide” 构建权重表 现有的权重表 获得三个新的输⼊入 分值 成员 320 “google” 300 “gmail”0 码力 | 176 页 | 2.34 MB | 1 年前3
1.5 Go 语言构建高并发分布式系统实践对象池 性能优化:通⽤用⽅方案 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 go语⾔言原⽣生提供的各组⼯工具,构建分布式系统配套设施⽅方⾯面,提供了 便利 配套设施= 测试 + 调优 + 监控 + 运维 便利 = 原⽣生profiling⼯工具 + 开协程模拟测试终端+协程协作模拟业务 连接池集中收发 go语⾔言开发追求开销优化的极限,谨慎引⼊入其他语⾔言领域⾼高性能服务的通⽤用⽅方案 内存池+对象池使⽤用 与 代码可读性与整体效率的权衡 go语⾔言原⽣生提供的各组⼯工具,构建分布式系统配套设施⽅方⾯面,提供了便利 ⽣生态圈 = 测试 + 调优 + 监控 + 运维 便利 = 原⽣生profiling⼯工具 + 通信库集成监控+协程协作模拟业务压测0 码力 | 39 页 | 5.23 MB | 1 年前3
1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台基于 Golang 构建⾼可扩展的云原⽣ PaaS 平台 刘浩杨 端点 技术专家 个⼈简介 - 18年加⼊端点,现任微服务和监控团队负责⼈ - 端点开源 PaaS Erda 的核⼼架构师 - 开源爱好者, Apache SkyWalking PMC 成员 ⽬ 录 ⾯向云原⽣的软件交付 01 端点⼀站式 PaaS - Erda 02 Erda 架构的思考 03 模块化开发框架 平台来⽀撑敏捷开发的落地 这⾥需要有⼀个标准的交付平台 运⾏环境 业务 数据 业务系统 C 业务 数据 业务系统 A 业务 数据 业务系统 B 资源管理在统⼀平台 应⽤运⾏在统⼀平台 构建标准的交付环境 交付产物标准化 - 业务配置 - 资源配置 - 依赖配置 - 流⽔线配置 配置即代码 : 实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 • 统⼀模块的初始化、启动、关闭 • 统⼀管理模块间的依赖关系 • ⽀持模块间的依赖注⼊ • 包含⼤量现成的微模块 • ⽀持统⼀ gRPC 和 HTTP 接⼝设计、以及拦截器 • 提供快速构建模块的代码⽣成⼯具 Erda Infra 如何设计 Erda Infra 有什么不同 - 不是重复造轮⼦ - 不仅是web框架 - 不仅是微服务框架 - 为扩展⽽⽣ - 以模块化的开发为核⼼0 码力 | 40 页 | 8.60 MB | 1 年前3
Go 构建大型开源分布式数据库技术内幕Processing) ● 24/7 availability, even in case of datacenter outages ● Open source, of course 如何构建分布式数据库? 原则 ● 分层 ● Make it right and make it fast. ● 测试很重要 ● 简单易用 ● 和社区结合 架构 TiKV TiKV TiKV TiKV0 码力 | 44 页 | 649.68 KB | 1 年前3
Go Web编程Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合初学者,可根据自 己的系统位数下载好相应的安装包,一路next就可以轻松安装了。 第三方工具安装:目前有很多方便的第三方软件包工具,例如Ubuntu的apt-get、Mac的homebrew等。这种安 装方式适合那些熟悉相应系统的用户。 最后,如果你想在同一个系统中安装多个版本的Go,你可以参考第三方工具GVM,这是目前在这方面做得最好的工 执行完上面的命令之后GOPATH、GOROOT等环境变量会自动设置好,这样就可以直接使用了。 apt-get apt-get 10 Ubuntu是目前使用最多的Linux桌面系统,使用apt-get命令来管理软件包,我们可以通过下面的命令来安装Go: sudo add-apt-repository ppa:gophers/go sudo apt-get update sudo apt-get install 如何预防SQL注入 也许你会说攻击者要知道数据库结构的信息才能实施SQL注入攻击。确实如此,但没人能保证攻击者一定拿不到这些 信息,一旦他们拿到了,数据库就存在泄露的危险。如果你在用开放源代码的软件包来访问数据库,比如论坛程序, 攻击者就很容易得到相关的代码。如果这些代码设计不良的话,风险就更大了。目前Discuz、phpwind、phpcms等这 209 攻击者就很容易得到相关的代码。如果0 码力 | 295 页 | 5.91 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a另外也要感谢Bootstrap CSS框架 ? 、jQuery ? /code prettify ? /prism ? JavaSript库、go-epub ? 库和calibre ? 软件的作者。 这些软件用于构建 g101.org网站和《Go语言101》电子书。 感谢Adam Chalkley对电子书制作过程提出的改进建议。 特别感谢Renee French ? 和Rob Pike。 本书电子版和纸质版封面中的生动的图 注意: go run子命令并不推荐在正式的大项目中使用。go run子命令只是一种方 便的方式来运行简单的Go程序。 对于正式的项目,最好使用go build或 者go install子命令构建可执行程序文件来运行Go程序。 支持Go模块特性的Go项目的根目录下需要一个go.mod文件。此文件可以 使用go mod init子命令来生成(见下)。 名称以_和.开头的源代码文件将被Go官方工具链工具忽略掉。 Unshift(插入到开头)。 29 | s = append(elements, s...) 插入若干独立的元素 插入若干独立的元素和插入一个切片中的所有元素类似。 我们可以使用切片 组合字面量构建一个临时切片,然后使用上面的方法插入这些元素。 特殊的插入和删除:前推/后推,前弹出/后弹出 假设被推入和弹出的元素为e并且切片s拥有至少一个元素。 1| // 前弹出(pop front,又称shift)0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a另外也要感谢Bootstrap CSS框架 、jQuery /code prettify /prism JavaSript 库、go-epub 库和calibre 软件的作者。 这些软件用于构建g101.org网站和 《Go语言101》电子书。 感谢Adam Chalkley对电子书制作过程提出的改进建议。 特别感谢Renee French 和Rob Pike。 本书电子版和纸质版封面中的生动的图片 注意: go run子命令并不推荐在正式的大项目中使用。go run子命令只是一种方 便的方式来运行简单的Go程序。 对于正式的项目,最好使用go build或者 go install子命令构建可执行程序文件来运行Go程序。 支持Go模块特性的Go项目的根目录下需要一个go.mod文件。此文件可以使 用go mod init子命令来生成(见下)。 名称以_和.开头的源代码文件将被Go官方工具链工具忽略掉。 // Unshift(插入到开头)。 s = append(elements, s...) 插入若干独立的元素 插入若干独立的元素和插入一个切片中的所有元素类似。 我们可以使用切片组 合字面量构建一个临时切片,然后使用上面的方法插入这些元素。 特殊的插入和删除:前推/后推,前弹出/后弹出 假设被推入和弹出的元素为e并且切片s拥有至少一个元素。 // 前弹出(pop front,又称shift)0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.aJavaSript库、go-epub(https://github.com/bmaupin/go-epub)库和calibre (https://calibre-ebook.com/)软件的作者。 这些软件用于构建g101.org网站和 《Go语言101》电子书。 感谢Adam Chalkley对电子书制作过程提出的改进建议。 特别感谢Renee French(http://reneefrench.blogspot 注意: go run子命令并不推荐在正式的大项目中使用。go run子命令只是一种方 便的方式来运行简单的Go程序。 对于正式的项目,最好使用go build或者 go install子命令构建可执行程序文件来运行Go程序。 支持Go模块特性的Go项目的根目录下需要一个go.mod文件。此文件可以使用 go mod init子命令来生成(见下)。 名称以_和.开头的源代码文件将被Go官方工具链工具忽略掉。 Unshift(插入到开头)。 29| s = append(elements, s...) 插入若干独立的元素 插入若干独立的元素和插入一个切片中的所有元素类似。 我们可以使用切片组合字 面量构建一个临时切片,然后使用上面的方法插入这些元素。 特殊的插入和删除:前推/后推,前弹出/后弹出 假设被推入和弹出的元素为e并且切片s拥有至少一个元素。 1| // 前弹出(pop front,又称shift)0 码力 | 591 页 | 21.40 MB | 1 年前3
Go 入门指南(The way to Go)7 Go 运行时(runtime) 2.8 Go 解释器 第3章:编辑器、集成开发环境与其它工具 3.1 Go 开发环境的基本要求 3.2 编辑器和集成开发环境 3.3 调试器 3.4 构建并运行 Go 程序 3.5 格式化代码 3.6 生成代码文档 3.7 其它工具 3.8 Go 性能说明 3.9 与其它语言进行交互 第4章:基本结构和基本数据类型 4.1 文件名、关键字与标识符 变量 4.5 基本类型和运算符 4.6 字符串 4.7 strings 和 strconv 包 4.8 时间和日期 4.9 指针 - 2 - 本文档使用 书栈(BookStack.CN) 构建 第5章:控制结构 5.1 if-else 结构 5.2 测试多返回值函数的错误 5.3 switch 结构 5.4 for 结构 5.5 Break 与 continue 5.6 标签与 6 将 map 的键值对调 第9章:包(package) 9.1 标准库概述 9.2 regexp 包 9.3 锁和 sync 包 - 3 - 本文档使用 书栈(BookStack.CN) 构建 9.4 精密计算和 big 包 9.5 自定义包和可见性 9.6 为自定义包使用 godoc 9.7 使用 go install 安装自定义包 9.8 自定义包的目录结构、go install0 码力 | 466 页 | 4.44 MB | 1 年前3
共 35 条
- 1
- 2
- 3
- 4













