2.游戏战中陪伴助手微服务架构设计与应用
游戏战中陪伴助手微服务架构设计与应用 张敏 - AndruZhang 腾讯 - 高级后台工程师 目 录 功能介绍 01 早期探索 02 方案设计和工程实现 03 性能和成本优化 04 DevOps 建设 05 总结 & QA 06 功能介绍 第一部分 战中陪伴助手介绍——和平精英最佳第五人 战中陪伴助手介绍——和平精英最佳第五人 • 游戏战斗中指导 / 建议 • 敌人在附近 设计新运营策略的难度 - 开发迭代: 如需开发介入,那么功能迭代的速度 - 可解释性: 理由是否能否说服玩家遵从建议 - 对用户价值: 提升玩家体验 / 吃鸡率的帮助有多大 推荐系统接入——系统架构 推荐系统: 向量化 方案探索——资源点推荐 针对具体场景开发 - 专利:《一种在游戏中离线挖掘、实时推荐资源点的方案》 - 大数据挖掘资源出现位置 - 左:配置文件 - 右:大数据挖掘 报方案 》 运营迭代 更合理的开发迭代流程 - 项目各角色成员密切配合,深度参与 - Token / 策略的设计开发可并行 - 运营可闭环策略设计,开发无需介入 方案详述——完整架构 先对整个架构有一个大概的认识 - 消息队列消费:解耦 MQ - Token 清洗:事件翻译和 token 计算 - 推荐系统:策略召回和推荐 - 数据分析:离线策略挖掘和模型训练 - 管理平台:开发、运营、运维辅助0 码力 | 47 页 | 11.10 MB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
大规模高性能区块链架构 设计模式与测试框架 Gopher Meetup 深圳站 2021 年 8 ⽉ 21 号 趣�科技 李世敬 目录 区块链概述 01 大规模高性能区块链架构设计介绍 02 基于Go插件的区块链性能测试工具 03 写在最后 04 区块链概述 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 『非许可链』公有链 私有链『许可链』 联盟链『许可链』 区块链发展的主力军 不同的组织形态分别对应不同的“区块链产品架构” 11 趣链科技 版权所有 ©2016-2021 11 趣链科技 版权所有 ©2016-2021 11 趣链科技 版权所有 ©2016-2021 11 公有�架构(⾮�可�架构) 应⽤层 数据层 块链式结构 账户模型 时间戳 ⽹络层 共识层 激励层 发⾏机制 分配机制 PoW 公路、越野等具体场景 公有链基础架构⾃下⽽上分为六层:数据层、⽹络层、共识层、激励层、合约层与应⽤层。如果将区块链⽐作⼀ 辆汽车,那么各层分别对应汽车的各个组成部分(下图所⽰),各层之间协同合作,形成多中⼼化可信系统 12 趣链科技 版权所有 ©2016-2021 12 趣链科技 版权所有 ©2016-2021 12 趣链科技 版权所有 ©2016-2021 12 �盟�(�可�架构) 基 础 层 数据层0 码力 | 39 页 | 56.58 MB | 1 年前3Golang 微服务在腾讯游戏用户运营领域的探索及实践
腾讯游戏用户运营介绍 服务化架构演进 DSL加速敏捷 基准数据 总结及展望 腾讯游戏用户运营 关于腾讯游戏用户运营 Intervene 干预 Measure 评估 User 用户 核心 用户 特权 服务 忠诚度 技术体系 服务化架构演进 演进历程 MVC Middleware Gateway MicroServic e 经典LNMPA架构 先抗住再优化 业务混合部署0 码力 | 34 页 | 1.22 MB | 1 年前3IPC性能极致优化方案-RPAL落地实践
为例分析性能瓶颈: 注:方案 github 地址:https://github.com/cloudwego/shmipc-go 方案诞生的背景 方案诞生的背景 IPC 的性能瓶颈有哪些: 1. 系统特权级切换; 2. 异步线程唤醒/休眠(事件通知); 3. 数据拷贝(序列化/反序列化); 方案诞生的背景 能不能把库函数调用的高性能优势做到 IPC 里面,降低进程间的事件通知和数据拷贝开销? 请求/响应 Zero Copy; 2. 业务进程与服务网格 IPC 性能优化: 结合用户态协议栈,实现网络 IO 绕过内核 CloudWeGo 是一套由字节跳动基础架构服务框架团队开源的、 可快速构建企业级云原生微服务架构 的中间件集合。 CloudWeGo 项目共同的特点是高性能、高扩展性、高可靠,专 注于微服务通信与治理。 CloudWeGo 包括 Kitex、Hertz、Volo、0 码力 | 39 页 | 2.98 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
8个比特。所以uint32类型的尺寸为4,即每个uint32值占用4个字节。 uintptr、int以及uint类型的值的尺寸依赖于具体编译器实现。 通常地,在 64位的架构上,int和uint类型的值是64位的;在32位的架构上,它们是32位 的。 编译器必须保证uintptr类型的值的尺寸能够存下任意一个内存地址。 一个complex64复数值的实部和虚部都是float32类型的值。 一个complex128 这条规则的主 要目的是为了防止一些移位运算在32位架构和64位架构的机器上的运算结果出 现不一致但不一致却没有被及时发现的情况。 比如如果上面一段代码中第10 行(或第9行)的1的类型被推断为它的默认类型int, 则在32位架构的机器 上,x的取值在运行时刻将被截断为0,而在64位架构的机器上,x的取值在运 行时刻将为232。 因为m是一个变量,在32位架构的机器上,第9行和第10行并 不会在编译时刻报错。 这三个函数的返回值的类型均为内置类型uintptr。下面我们将了解到 uintptr类型的值可以转换为非类型安全指针(反之亦然)。 尽管这三个函数之一的任何调用的返回结果在同一个编译好的程序中总是 一致的,但是这样的一个调用在不同架构的操作系统中(或者使用不同的 编译器编译时)的返回值可能是不一样的。 这三个函数的调用总是在编译时刻被估值,估值结果为类型为uintptr的 常量。 传递给Offsetof函数的实参必须为一个字段选择器形式value0 码力 | 821 页 | 956.82 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
个比特。所以uint32类型的尺寸为4,即每个uint32值占用4个字节。 uintptr、int以及uint类型的值的尺寸依赖于具体编译器实现。 通常地,在64 位的架构上,int和uint类型的值是64位的;在32位的架构上,它们是32位的。 编译器必须保证uintptr类型的值的尺寸能够存下任意一个内存地址。 一个complex64复数值的实部和虚部都是float32类型的值。 一个complex128复 这条规则的主要 目的是为了防止一些移位运算在32位架构和64位架构的机器上的运算结果出现 不一致但不一致却没有被及时发现的情况。 比如如果上面一段代码中第10行 (或第9行)的1的类型被推断为它的默认类型int, 则在32位架构的机器上,x 的取值在运行时刻将被截断为0,而在64位架构的机器上,x的取值在运行时刻 将为232。 因为m是一个变量,在32位架构的机器上,第9行和第10行并不会在编 译时刻报错。 这三个函数的返回值的类型均为内置类型uintptr。下面我们将了解到 uintptr类型的值可以转换为非类型安全指针(反之亦然)。 尽管这三个函数之一的任何调用的返回结果在同一个编译好的程序中总是 一致的,但是这样的一个调用在不同架构的操作系统中(或者使用不同的 编译器编译时)的返回值可能是不一样的。 这三个函数的调用总是在编译时刻被估值,估值结果为类型为uintptr的常 量。 传递给Offsetof函数的实参必须为一个字段选择器形式value0 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
int32值占用4个字节。 第6章:基本类型和它们的字面量表示 24 uintptr、int以及uint类型的值的尺寸依赖于具体编译器实现。 通常地,在64 位的架构上,int和uint类型的值是64位的;在32位的架构上,它们是32位的。 编译器必须保证uintptr类型的值的尺寸能够存下任意一个内存地址。 一个complex64复数值的实部和虚部都是float32类型的值。 一个complex128 是为了防止一些移位运算在32位架构和64位架构的机器上的运算结果出现不一致但 不一致却没有被及时发现的情况。 比如如果上面一段代码中第10行(或第9行)的 1的类型被推断为它的默认类型int, 则在32位架构的机器上,x的取值在运行时 刻将被截断为0,而在64位架构的机器上,x的取值在运行时刻将为232。 因为m是 第8章:运算操作符 56 一个变量,在32位架构的机器上,第9行和第10行并不会在编译时刻报错。 这三个函数的返回值的类型均为内置类型uintptr。下面我们将了解到 uintptr类型的值可以转换为非类型安全指针(反之亦然)。 尽管这三个函数之一的任何调用的返回结果在同一个编译好的程序中总是一致 的,但是这样的一个调用在不同架构的操作系统中(或者使用不同的编译器编 译时)的返回值可能是不一样的。 这三个函数的调用总是在编译时刻被估值,估值结果为类型为uintptr的常 量。 传递给Offsetof函数的实参必须为一个字段选择器形式value0 码力 | 591 页 | 21.40 MB | 1 年前32.1.7 谈如何构建易于拆分的单体应用
谈如何构建易于拆分的单体应⽤ 郑渊 腾讯公司 ⾼级⼯程师 ⽬ 录 微服务架构的困境与突破 01 建模:通过表象看本质 02 基于go-kit构建易拆分的单体应⽤ 03 总结 04 微服务架构的困境与突破 第⼀部分 微服务架构的困境与突破 01 Monolith to Microservices To move from Monolithic to Microservices consider ? (2) Business Logic+Data Interface (3) Database (1) User Interface (4) Infrastructure 微服务架构的困境与突破 ➢ 服务拆分难 • 模块职责不清晰,模块之间耦合严重,⾯向数据库交 互,循环依赖等等,导致服务拆分困难:1.0版本, 2.0版本,3.0版本...... (初期缺乏设计) ➢ 服务维护成本⾼ N个开发⼯具窗⼝来回切,⼀会⼉⾃⼰都蒙圈了;⼀ 个代码仓库有效代码只有⼏百⾏,⼀个脚本搞定的事 情硬是搞出来 n 个服务......(职责划分和架构选型不 合理,为了微服务⽽微服务) • 监控,告警,CI/CD,服务治理,分布式追踪等基础 设施不完善,维护成本⾼(⾃建—>云原⽣) 02 困境 MVC架构 微服务架构的困境与突破 ➢ 构建合理的业务模型(Monolith or Microservice) 1. 建模⽅法不只有领取驱动设计-DDD,还有⽤例驱动0 码力 | 27 页 | 13.04 MB | 1 年前31.每秒百万数据点 Go 应用监控系统演进
AfterShip 拥抱云原生和开源系统 目 录 监控架构概览 01 如何监控 Go 应用? 02 Metrics 系统架构演进 03 Why VictoriaMetrics so good? 04 总结与展望 05 监控架构概览 第一部分 监控系统架构概览 -- 数据源 监控系统架构概览 -- 告警配置 监控系统架构概览 -- 告警通道 如何监控 Go 应用? 第二部分 Tracking 创建速率 ○ 某个 ENT 客户的 Tracking 查询失败率 Metrics 系统架构演进 第三部分 2018-2020 2K+ 40K 1Mil+ 2020 年指标数据 业务指标数量 每秒写入数据点 Active Time Series 2018-2020 年架构 2020 年底面临的问题 ● 无法查询超过 30 天的数据 ● 查询慢,平均时间超过 2 分钟 扩展性强 无侵入性 Why Thanos VS VS 架构 S3 Thanos 架构 Querier Query-Frontend Store Gateway S3 2022 年中指标数据 14K+ 0.6Mil 30Mil+ 业务指标数量 每秒写入数据点 Active Time Series Thanos 架构优化 Querier Query-Frontend Store0 码力 | 42 页 | 2.32 MB | 1 年前3Golang在接入层长连接服务中的实践-黄欣
Golang 在接入层长连接服务中的实践 黄欣 基础平台-架构部 目录 • 背景 • 架构 • 心得 目录 • 架构 • 心得 背景—why 长连接? • 业务场景 – 大量实时计算 • 司机乘客撮合 • 实时计价 – 高频度的数据交互 • 坐标数据 • 计价数据 – App和服务端双向可达 • 上行(抢单) • 下行(派单) 背景—why golang? • 开发效率 Golang成功的使用案例 目录 • 背景 • 心得 架构 • 整体架构图 架构—接口设计 • 原则 – 扩展性 – 稳定性(最好不用升级) • 解决方法 – Protobuf(golang) – 接口设计分层 • 框架层:模块间通信协议(类似tcp/udp) • 业务层:bytes(类似应用层)留给业务自己定义就好了 架构—性能 • conn svr 架构—集群扩展 • Proxy本身无限扩容(无状态) Mysql集群:中间件方案 架构—灾备 • 这里的灾备主要指的是依赖的存储降级方案,涉及到存储 的主要两个模块 – Auth svr:cache(redis) + db(mysql) – Route svr:cache + cache(standy) 架构—异地双活 • 要求 – 正常情况下: • 任何一个机房可推送到所有机房app – 异常情况下: • 本机房内推送可达 • 架构图如下 (核心解决路由共享问题)0 码力 | 31 页 | 1.67 MB | 1 年前3
共 52 条
- 1
- 2
- 3
- 4
- 5
- 6