TarsGo微服务开发实践-利开园TarsGo微服务高效开发 最佳实践 利开园 腾讯高级工程师 2021-08-21 关于我 Docker TarsGo Tars+K8S DevOps 2015至今 腾讯 目录 1. RPC 2. 日志 3. 监控 4. 调用链 5. 网关 6. 错误码 7. 配置 8. 云原生 9. 标准化 背景 • Tars是腾讯开源的微服务解决方案 • 高性能的RPC框架 • 丰富的服务治理能力 丰富的服务治理能力 • 支持Golang/Cpp/Java/PHP/Nodejs • 腾讯内部(TAF)曾经应用最广的开发框架 • Tars应用实践:https://github.com/tarscloud/gopractice RPC:不应该只是RPC • 基本功能:远程函数调用 • 可观测 • 名字服务+SET流量管理 • 熔断与恢复 • 轮询/一致性Hash • 错误码管理 日志:排查问题的利器0 码力 | 15 页 | 4.23 MB | 1 年前3
1.2 Go 在分布式系统开发中的应用0 码力 | 20 页 | 131.34 KB | 1 年前3
2-6-Golang 在 Baidu-FrontEnd 的应用-陶春华–2010年,天津大学,计算机专业博士 • 2013年7月,加入百度 –使用GO开发的项目 • 7层流量代理GO-BFE • 应用层防火墙WAF • 百度GOLANG委员会成员 内容提要 • 后台程序开发的需求和难点 –C, Python and Go对比 • 采用Go语言重构BFE –背景和技术路线 –GC问题 –协议一致性 –分布式架构 后台程序开发的需求(1) • 性能 –C/C++, Java –Python –Process, Thread, Event(编程难度) • 开发效率 –语言的描述效率:代码量 –语言的简洁、易用 –库支持 后台程序开发的需求(2) • 大型程序的组织 –数据封装能力 –Namespace • 可测试能力 –单测,覆盖度测量 • 错误检查能力 –编译 –程序异常的trouble shooting 后台程序开发的需求(3) • 上线和运维 –对运行环境的依赖 –对库(动态库)的依赖 (1) • 性能: – 相差10倍以上 – Python: 解释执行,动态类型 • 并发性能 – C:直接用系统的机制 – Python: 自己实现的thread, 只能使用一个CPU • 开发效率 – 相差5-10倍 – 内存的处理是一个难点 – dict/map, list C vs Python (2) • 大型程序的组织 – C: 无namespace • 可测试能力 –0 码力 | 35 页 | 730.17 KB | 1 年前3
GoFrame框架介绍及设计• 项目初心 框架介绍 GoFrame是一款模块化、高性能、企业级的Go基础开发框架。 • 模块化、松耦合 • 模块丰富、开箱即用 • 简洁易用、快速接入 • 文档详尽、易于维护 • 自顶向下、体系化设计 • 统一框架、统一组件、降低选择成本 • 开发规范、设计模式、代码分层模型 • 强大便捷的开发工具链 • 完善的本地中文化支持 • 设计为团队及企业使用 特点 框架介绍-框架架构 Modules管理方式 • 开发工具链 • 设计模式:MVC、三层架构、工具集 • 应用接口:HTTP/TCP/UDP/RPC Server、终端应用、源码接口 • 数据库类型:通过标准库驱动接口支持多种数据库类型 • 跨平台性:基于Golang开发语言强大跨平台特性 框架介绍-项目初心 工程化建设 统一框架 核心组件 项目架构 设计模式 开发规范 开发文档 开发工具 …… 模块化设计 模块也称作组件,是软件系统中可复用的功能逻辑封装单位。 在不同的软件架构层次,模块的概念会有些不太一样。 在开发框架层面,模块是某一类功能逻辑的最小封装单位。 在Golang代码层面中,我们也可以将package称作模块。 软件进行模块化设计的目的, 是为了使得软件功能逻辑尽可能的解耦和复用, 终极目标也是为了保证软件开发维护的效率和质量。 模块化设计-复用原则 REP 发布等同原则 (Release/Reuse0 码力 | 37 页 | 8.84 MB | 1 年前3
2.游戏战中陪伴助手微服务架构设计与应用如何新增策略 初始方案——Lua 脚本 如何修改策略 初始方案——Lua 方案 显而易见的问题 范畴 问题 需求 - 所有策略需求都需要走开发流程 - 迭代周期长:2周开发、测试、上线 运营 - 变更困难,修改策略 = 修改代码 开发 - 代码低内聚,交接难度大 扩展 - 没有考虑扩展 功能 - 难以实现战略推荐 - 早期:先考虑有无 - 引入推荐系统 系统思考——如何评判方案的好坏? 服务器成本: 每服务千人成本越低越好 - 运营简易度: 设计新运营策略的难度 - 开发迭代: 如需开发介入,那么功能迭代的速度 - 可解释性: 理由是否能否说服玩家遵从建议 - 对用户价值: 提升玩家体验 / 吃鸡率的帮助有多大 推荐系统接入——系统架构 推荐系统: 向量化 方案探索——资源点推荐 针对具体场景开发 - 专利:《一种在游戏中离线挖掘、实时推荐资源点的方案》 - 大数据挖掘资源出现位置 通过特征向量匹配历史玩家 - 策略举例: - 关键帧内容:目标坐标、有资源、有敌人、无开火、无车 - 话术播报:“去小地图标注的地方搜刮,注意避开敌人” 方案探索——关键帧 / 路径推荐 针对具体场景开发 - 优势: - 战略级规划、序列化推荐 - 策略自动生成(除坐标外的特征穷举) - 主要不足: - 特征维度增加后,维度爆炸 - 启发: - 抽象:子状态(特征维度) - 子状态组合成状态,同时子状态也可以组合成策略0 码力 | 47 页 | 11.10 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a是Go的主要卖点。 节省内存、程序启动快、代码执行速度快和编译速度快合在一块儿是Go的另 一个主要卖点。 虽然这三项是C家族语言的共同特征,但是在Web开发领域, 很少有语言同时拥有这四个特征。 事实上,这就是我当初从Java转到Go进行 Web开发的原因。 内置并发编程支持也算是Go的卖点,虽然我个人认为它不是Go的主要卖点。 良好的代码可读性是Go的另一个重要卖点。 我感觉可读性是Go在设计的时候 我感觉可读性是Go在设计的时候 考虑的最重要的一个因素。 良好的跨平台支持也应该算是Go的一个卖点,尽管如今这个卖点并不是很新 鲜。 一个稳定的Go核心设计和开发团队以及一个活跃的社区也可以被视为Go的一 个卖点。 《Go语言101》做了什么来消除Go编程中可能 出现的困惑? 《Go语言101》做了以下这些方面来试图清除很多Go编程中可能遇到的困惑。 1. 着重于基本概念和术语的解释。如果不理解或者不熟悉这些基本概念和术 它语言编程经验的程序员来说,读懂一份Go源码也不是一件难事。 目前,使用最广泛的Go编译器由Go官方设计和开发团队维护。 以后我们将称 此编译器为标准编译器。标准编译器也常常称为gc(是Go compiler的缩写, 不是垃圾回收garbage collection的缩写)。 Go官方设计和开发团队也维护着另 外一个编译器,gccgo。 gccgo是gcc编译器项目的一个子项目。 gccgo的使用0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang大规模云原生应用管理实践• Problem Solver,聚焦中间件,容器,Kubernetes,PaaS平台… • OAM社区成员 开局一张图 规模化应用交付效率对比去年 每万笔峰值交易的IT成本对比4年前 提升1倍 下降80% 云原生 技术 稳定 成本 效率 云原生-程序员视角 基础设施 K8s 云原生生态(CNCF) 云原生应用 云原生是以容器技术为基础围绕着Kubernetes进行的 。通过标准可扩展的调度,网络, 存储,容器运行时接口来提供基础设施;通过标准可扩展的声明式资源和控制器来提供运维能力。两层标 准化推进了细化的社会分工,各领域进一步提升规模化和专业化,全面达到成本,效率,稳定性的优化。 4 6 7 2 3 5 1 1 Kubectl plugins 2 Apiserver extension 3 4 5 6 7 Custom resources extension Custom controller Network plugins Storage plugins 统筹规划, 降低成本 自动化运维, 提升稳定性 非业务逻辑剥离, 提升交付效率 Golang与云原生生态(CNCF) 项目数占比: 214/1512(14.2%) Github star数占比:1265737 / 2458072(51.5%)市值占比: $8.08T/$190 码力 | 23 页 | 7.70 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.aGo的主要卖点。 节省内存、程序启动快、代码执行速度快和编译速度快合在一块儿是Go的另一 个主要卖点。 虽然这三项是C家族语言的共同特征,但是在Web开发领域,很 少有语言同时拥有这四个特征。 事实上,这就是我当初从Java转到Go进行Web 开发的原因。 内置并发编程支持也算是Go的卖点,虽然我个人认为它不是Go的主要卖点。 良好的代码可读性是Go的另一个重要卖点。 我感觉可读性是Go在设计的时候 我感觉可读性是Go在设计的时候 考虑的最重要的一个因素。 良好的跨平台支持也应该算是Go的一个卖点,尽管如今这个卖点并不是很新 鲜。 一个稳定的Go核心设计和开发团队以及一个活跃的社区也可以被视为Go的一个 卖点。 《Go语言101》做了什么来消除Go编程中可能出现的困惑? 《Go语言101》做了以下这些方面来试图清除很多Go编程中可能遇到的困惑。 1. 着重于基本概念和术语的解释。如果不理解或者不熟悉这些基本概念和术 它语言编程经验的程序员来说,读懂一份Go源码也不是一件难事。 目前,使用最广泛的Go编译器由Go官方设计和开发团队维护。 以后我们将称 此编译器为标准编译器。标准编译器也常常称为gc(是Go compiler的缩写,不 是垃圾回收garbage collection的缩写)。 Go官方设计和开发团队也维护着另外 一个编译器,gccgo。 gccgo是gcc编译器项目的一个子项目。 gccgo的使用广泛0 码力 | 608 页 | 1.08 MB | 1 年前3
Go 入门指南(The way to Go)文章以及演讲的资料收集和整理,并结合我自 身在软件工程、编程语言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类 来进行讲解。 随着软件规模的不断扩大,诸多的学者和谷歌的开发者们在公司内部的软件开发过程中开始经历大量的挫 折,在诸多问题上都不能给出令人满意的解决方案,尤其是在使用 C++ 来开发大型的服务端软件时,情 况更是不容乐观。由于二进制文件一般都是非常巨大的 C++ 在软件开发的重 要地位,并在实际开发过程中忍受着它所带来的令人头疼的一些问题。因此学者们坐下来总结出了现在生 产环境与软件开发之间的主要矛盾,并尝试设计一门全新的编程语言来解决这些问题。 以下就是他们讨论得出的对编程语言的设计要求: 能够以更快的速度开发软件 开发出的软件能够很好地在现代的多核计算机上工作 开发出的软件能够很好地在网络环境下工作 使人们能够享受软件开发的过程 Go 语言出现的目的是希望在编程领域创造最实用的方式来进行软件开发。它并不是要用奇怪的语法和晦 涩难懂的概念来从根本上推翻已有的编程语言,而是建立并改善了 C、Java、C# 中的许多语法风格。它提 倡通过接口来针对面向对象编程,通过 goroutine 和 channel 来支持并发和并行编程。 这本书是为那些想要学习 Go 这门全新的,迷人的和充满希望的编程语言的开发者量身定做的。当然,你 在学习 Go 语0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)Go 2.5 在 Windows 上安装 Go 2.6 安装目录清单 2.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 与其它语言进行交互 关文章以及演讲的资料收集和整理,并结合我自身在软件工程、编程语 言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类来进行讲解。 随着软件规模的不断扩大,诸多的学者和谷歌的开发者们在公司内部的软件开发过程中开始经历大量的挫折,在诸多 问题上都不能给出令人满意的解决方案,尤其是在使用 C++ 来开发大型的服务端软件时,情况更是不容乐观。由于 二进制文件一般都是非常巨大的, C++ 在软件开发的重要地位,并在实际开发过程中忍受着它所带来的令人头疼 的一些问题。因此学者们坐下来总结出了现在生产环境与软件开发之间的主要矛盾,并尝试设计一门全新的编程语言 来解决这些问题。 以下就是他们讨论得出的对编程语言的设计要求: 能够以更快的速度开发软件 开发出的软件能够很好地在现代的多核计算机上工作 开发出的软件能够很好地在网络环境下工作 使人们能够享受软件开发的过程 Go0 码力 | 466 页 | 4.44 MB | 1 年前3
共 71 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8













