2.游戏战中陪伴助手微服务架构设计与应用游戏战中陪伴助手微服务架构设计与应用 张敏 - AndruZhang 腾讯 - 高级后台工程师 目 录 功能介绍 01 早期探索 02 方案设计和工程实现 03 性能和成本优化 04 DevOps 建设 05 总结 & QA 06 功能介绍 第一部分 战中陪伴助手介绍——和平精英最佳第五人 战中陪伴助手介绍——和平精英最佳第五人 • 游戏战斗中指导 / 建议 • 敌人在附近 取得战绩,赞赏一波 毫不留情! 三杀收下! 早期探索 第二部分 需求思考 • 我们的输入是什么? • 游戏对局事件 • Snapshot • Diffs • 玩家位置 • 安全区 • 航线 • …… • 掉血10点 • 开枪3发 • 敌人方位 • …… • 我们要怎么做? • 我们的输出是什么? • 策略:语音 / 标记 • 娱乐:三杀收下! • 攻略:AKM 不适合新手 指导:我们去资源点搜刮吧 • 有理有据: • 去哪里 • 做什么 • 为什么 黑盒系统,输入输出 初始方案——Lua 脚本 符合直觉的第一个方案 初始方案——Lua 脚本 如何新增策略 初始方案——Lua 脚本 如何修改策略 初始方案——Lua 方案 显而易见的问题 范畴 问题 需求 - 所有策略需求都需要走开发流程 - 迭代周期长:2周开发、测试、上线 运营 - 变更困难,修改策略0 码力 | 47 页 | 11.10 MB | 1 年前3
2.1 gofmt 的文化演变4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 1/34 gofmt 的文化演变 The Cultural Evolution of gofmt Robert Griesemer Google, Inc. 4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 golang.org代码库中所有提交的Go代码都必须通过gofmt格式化过 除了gofmt之外,相同功能可以通过go/format库获得 不需要设置! 4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 3/34 初衷 代码审查是软件工程的最佳实践 代码审查是基于代码规范和正规格式的 太多时间浪费在审查格式上而不是代码本身了 太多时间浪费在审查格式上而不是代码本身了 但是这工作对机器来说是最好不过了的 第一个决定就是要写一个好的格式美化器 4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 4/34 历史 格式美化器和代码美化工具在计算机发展的早期就已出现 对于产生可读的Lisp代码很重要的: GRINDEF (Bill Gosper, 1967)0 码力 | 34 页 | 9.97 MB | 1 年前3
大规模高性能区块链架构设计模式与测试框架-李世敬大规模高性能区块链架构 设计模式与测试框架 Gopher Meetup 深圳站 2021 年 8 ⽉ 21 号 趣�科技 李世敬 目录 区块链概述 01 大规模高性能区块链架构设计介绍 02 基于Go插件的区块链性能测试工具 03 写在最后 04 区块链概述 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 ©2016-2021 4 区块链诞生 区块链是互联网发展到一 定阶段的必然产物,是在 低成本、高效、快捷的基 础上对其安全可信及多元 价值传递与贡献分配体系 的完善。 物理世界 价值互联网 移动互联网 互联网 数据可信 资产可信 合作可信 可信 普适 信息 数字世界 5 趣链科技 版权所有 ©2016-2021 5 趣链科技 版权所有 ©2016-2021 5 趣链科技 2009 • 中本聪发表了比特币的创世论文 《比特币: 一种点对点的电子现 金系统》,标志着区块链作为一 项完整的集成创新技术正式诞生 • 比特币诞生,是世界上首个区 块链应用系统。发展至今有力 地证明了区块链技术的创新性、 颠覆性和顽强的生存能力 中本聪 比特币Bitcoin 2013 • 以太坊发布以太坊白皮书, 引入智能合约,推出首个 图灵完备的区块链平台, 进入区块链2.0时代0 码力 | 39 页 | 56.58 MB | 1 年前3
Go 1.18 中的泛型Go 1.18 中的泛型 欧长坤 changkun.de/s/generics118 2022/03/30 1 语法和使用 2 什么时候需要泛型? 3 当使用接口作为函数的形参类型时,函数调用方传递的实际参数可以是完全不同的 类型: type T interface { Add(T) T } func Sum(elems ...T) (sum T) { // T 可以是任何实现 可以是任何实现 Add() 的类型 if len(elems) == 0 { return } sum = elems[0] for _, v := range elems[1:] { sum = sum.Add(v) } return } 当使用类型参数作为函数的形参类型时,函数调用方传递的实际参数必须是满足类型参数所约束的类型: func GenericSum[S ~int](elems ...S) (sum S) { // S 的底层类型必须底层类型为 int 约束的类型 for i := range elems { sum += elems[i] } return } 使用泛型的根本目的是: 类型安全的参数传递,以及对实现的类型进行抽象 具有类型参数 (Type Parameter) 的签名 4 func F[T C](v T) (T, error)0 码力 | 45 页 | 501.50 KB | 1 年前3
基于 mesos 的容器调度框架2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 1/36 基于 mesos 的容器调度框架 Gopher 杭州 meetup 5 August 2017 黄励博(huangnauh) 又拍云 2017/8/3 基于 mesos 的容器调度框架 http://go-talks 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 3/36 Mesos 介绍 Image credit: mesos.apache.org (http://mesos.apache.org/) 官方称之为分布式系统内核, 它把数据中心的 CPU、内存、磁盘等抽象成一个资源池 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 4/36 Mesos 调度 各个 Agent 启动后, 向 Master 注册,携带统计资源, 由 Master 决定给每个框架多少资源, 默认 采用分级主导资源公平算法 每个框架收到资源后, 根据自身任务需求, 调度任务的资源分配0 码力 | 36 页 | 2.49 MB | 1 年前3
2.5 Go在猎豹移动的应用 网络模型&并发同步模型; 标准库、内置工具强大支持; 开源&社区活跃; 我们做了啥? 业务 猎豹移动全球passport体系; 游戏开放平台; 游戏支付体系; 平台 基于gopush的推送平台&goim; 基于redis sentinel的smart client; rpc框架; gosnowflake发号器集群; Web站点是PHP开发的,通过RPC交互; rpc和api都是基于Go开发的服务; 国内DNS->VIP->lvs->tengine->Go; 海外DNS->ELB DNS->ELB->Go; Service之间通过Thrift或者net/rpc通讯; 依赖redis sdk访问redis; 直连mysql; 用户的所有业务逻辑基于Go处理; 服务应该是无状态的; api服务出现瓶颈的时候,直接scale out; graceful restart依赖健康检测; api质量监控,使用日志来追踪,通过本 地日志+flume+hdfs+hive; 实时监控可以考虑flume sink到kafka,再 依赖Spark计算; RPC 协议&远程调用的选型; net/rpc,thrift,grpc等;0 码力 | 24 页 | 4.26 MB | 1 年前3
2.2.3 Go语言的抢占式调度Go 语⾔的抢占式调度 曹春晖 资深 Gopher ⽬ 录 Go 程序的启动 01 GMP 的本质 02 调度循环的实现 03 ⽼版本的抢占实现 04 新版本的抢占实现 05 当前的 Go 语⾔还有哪些问题 06 Go 程序的启动 第⼀部分 编译过程 Go 程序 hello.go 的编译过程: ⽂本 -> 编译 -> ⼆进制可执⾏⽂件 编译过程 编译:⽂本代码 -> go build -x 可以观察这个过程 可以⼿动分步骤执⾏: 1. go tool compile hello.go 2. go tool link hello.o 可执⾏⽂件 Linux 的可执⾏⽂件 ELF(Executable and Linkable Format) 为例, ELF 由⼏部分构成: ELF header Section header Sections https://github 可执⾏⽂件在不同的操作系统上规范不⼀样 Linux Windows MacOS ELF PE Mach-O Entry point 操作系统执⾏可执⾏⽂件的步骤(以 linux 为例): 解析 ELF Header 加载⽂件内容 ⾄内存 从 entry point 开始 执⾏代码 寻找 entry point 通过 entry point 找到 Go 进程的执⾏⼊⼝,使⽤ readelf0 码力 | 44 页 | 7.43 MB | 1 年前3
1.8 Go 在持续交付中的实践0 码力 | 33 页 | 7.85 MB | 1 年前3
对 Go 程序进行可靠的性能测试对 Go 程序进行可靠的性能测试 Changkun Ou https://changkun.de/s/gobench/ Go 夜读系列 |talkgo.org|Talk Go|第 83 期 March 26, 2020 # Go 1.13 / 1.14 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 主要内容 ● 可靠的测试环境 ● benchstat ○ 例2: Benchmark 的正确性分析 ○ 例3: 其他的影响因素 ● 假设检验的原理 ● 局限与应对措施 ● 总结 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 教科书式的性能测试方法论 3 在《Software Testing: Principles and Practices》一书中归纳的性能测试方法论: 1. 搜集需求 8. 向客户推荐合适的配置 可靠的测试环境 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 什么是可靠的性能基准测试环境 5 影响测试环境的软硬件因素 ● 硬件:CPU 型号、温度、IO 等 ● 软件:操作系统版本、当前系统调度的负载等 指导思想 ● 单次测量结果毫无意义,统计意义下可对比的结果是关键 ○ 分析测试的场景、多次测量、决定统计检验的类型0 码力 | 37 页 | 1.23 MB | 1 年前3
基于amqp实现的golang消息队列MaxQ7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 1/22 基于amqp实现的golang消息队列 MaxQ 2017-07-01 张培培 饿了么-基础框架组 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 IPC消息队列 3. AMQP协议 4. MaxQ架构模型 5. MaxQ相关特性 6. 使用场景和案例 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 3/22 1. 队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192 堆积能力 消息可靠性 生产消费关系 Pull/Push 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 5/22 2. IPC消息队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq0 码力 | 22 页 | 1.45 MB | 1 年前3
共 98 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10













