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 年前3
2.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 年前3
1.每秒百万数据点 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 年前3
Golang在接入层长连接服务中的实践-黄欣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
GoFrame框架介绍及设计GoFrame框架介绍及设计 郭强 成都医联科技 架构师 目 录 框架介绍 01 模块化设计 02 统一框架设计 03 代码分层设计 04 对象封装设计 05 DAO封装设计 06 未来发展规划 07 框架介绍 第一部分 • 框架介绍 • 框架架构 • 项目初心 框架介绍 GoFrame是一款模块化、高性能、企业级的Go基础开发框架。 • 模块化、松耦合 • 模块丰富、开箱即用 强大便捷的开发工具链 • 完善的本地中文化支持 • 设计为团队及企业使用 特点 框架介绍-框架架构 • 发布方式:Docker、二级制、源码模块 • 模块管理: • 核心模块、社区模块、三方模块 • Go Modules管理方式 • 开发工具链 • 设计模式:MVC、三层架构、工具集 • 应用接口:HTTP/TCP/UDP/RPC Server、终端应用、源码接口 • 数据 框架介绍-项目初心 工程化建设 统一框架 核心组件 项目架构 设计模式 开发规范 开发文档 开发工具 …… 模块化设计 第二部分 • 复用原则 • 单仓包设计 • 模块聚合设计 • 常见问题 模块化设计 什么是模块? 模块化的目标? 模块也称作组件,是软件系统中可复用的功能逻辑封装单位。 在不同的软件架构层次,模块的概念会有些不太一样。 在开发框架层面,模块是某一类功能逻辑的最小封装单位。0 码力 | 37 页 | 8.84 MB | 1 年前3
如何用GO支撑海外电商的快速发展-吕梦楼如何用GO支撑海外电商的快速发展 吕梦楼 小米科技(武汉)有限公司 海外电商基础服务负责人 目 录 业务背景 01 架构演变 02 场景落地 03 总结 04 Q&A 05 业务背景 第一部分 业务背景 01. 海外电商业务 1 ShareSave 11 Mi.com B2C 23 Community 10 POCO B2C 26 Mi.com B2B 03. 国际小米社区 业务背景 10 个B2C站点 今年新增 6 个站点 全新国际POCO站 04. 国际POCO站 业务背景 05. 面临挑战 架构演变 第二部分 架构演变 01. 海外电商架构 电商 服务 交易服务 购物车 下单服务 支付网关 地址服务 BFF 中台 商品中心 营销中心 交易中心 订单中台 库存中心 结算中心 发票中心 Mobile MICOM 架构演变 02. 架构演变过程 架构演变 03. 单体应用 演变 仅PC站,页面通过服务端渲染 新增M站,核心服务抽离到Core 架构演变 04. 为什么用GO? 架构演变 05. 混合模式 新增GO商城服务,迁移下单流程中的订单结算、收银台等功能 PC和M站相关功能,请求下发到GO商城服务,页面仍通过PHP服务端渲染 架构演变 06. 前后端分离0 码力 | 33 页 | 3.80 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a8个比特。所以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 年前3
Golang 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 年前3
Golang 101(Go语言101 中文版) v1.21.aint32值占用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 年前3
共 52 条
- 1
- 2
- 3
- 4
- 5
- 6













