antsmallant

游戏服务器工程实践四:可观测之prometheus+grafana+日志mcp

用 prometheus 做观测是大家都在做的事,关键是要对什么做观测,以及怎么做观测,以下总结一些实践。 1. 常见数据的观测 1.1 请求延迟数据的观测 可以统计几个项:延迟分布,avg延迟,最近请求量(总/成功/失败),请求QPS。 大致效果: 图1:请求延迟grafana展示 1、延迟分布 需要的指标(分桶统计各个延迟区间的请求量): xx_latent_stat...

工作笔记:避免资源泄漏

资源的有效释放始终是个艰难的问题。特别是在具体的业务逻辑中,由于逻辑的多变和复杂,导致出错的可能性大大增加。 举个例子,游戏服务器,一个房间等到所有人都不在的时候就被销毁。而当房主退出的时候,要踢出所有人。假设所有人退出都走同样的 exit 逻辑,并且在 exit 逻辑里面判断人数为 0 时销毁房间,就会变得很糟糕,因为 exit 调用其他 exit,如果中间有个环节出错,就会出现房间不释...

2025 年终总结

AI 善用 AI 近些年出现的最大变量就是 AI,它开始影响整个人类世界,影响我们每一个人。作为码农,受到的冲击和震撼是最大的。你可以抱怨 AI 经常把事情搞砸,但不得不承认,它比你聪明太多太多了。唯一的问题就在于,你能不能用好它?为什么大神们说要2000个小时的使用才算熟练呢?因为这个阶段,它还没法完全替代人类,所以它还是个工具,只要是工具,就有个熟悉的过程,你精通它的各种特性并熟练的...

游戏开发笔记:理解四元数

以下是 gemini 给的,很简洁清晰。 一、关于四元数 理解四元数(Quaternion)确实是一个挑战,因为它们涉及到四维空间的数学,不仅难以在脑海中通过图像直观构想,而且其运算法则也比较反直觉。 为了让你真正理解它,我们不能只看公式。我们需要从你已经熟悉的知识出发,一步步搭建通往四元数的桥梁。 我们将分四个步骤来拆解: 类比: 从复数(2D 旋转)推导到四元数(3D ...

工作笔记:游戏中的断线重连

简单记录一下吧。 以前做的时候,针对 tcp 连接,想要玩家闪退闪连的时候,可以无缝的重连,所以用了消息 cache 的方案。这种方案的优点是短时间内重连的话,体验会比较好,比如下发一个奖励通知,必然是可以被前端收到的,运营很喜欢这种体验。 但基于 cache 的方案有个明显的缺陷是 cache 消息量不能太大,否则对于后端是个比较大的负担。特别是我现在做的游戏,会一直推一些增量的 ao...

工作笔记:追求精确

什么是追求精确呢? 简单讲,就是要把事情搞清楚,不要模棱两可,A 就是 A,B 就是 B,说出来的东西要经得起推敲,不要靠猜测,要自己去考证、验证。 什么时候开始变得追求精确的呢,回忆起来大致是这么一个过程。 萌牙期 2016年,在给鹅厂做一款独代游戏的时候,那时我是服务端主程,需要做出一个能支撑百万以上同时在线的架构,并且还要能横向扩容,快速扩容,能在 30 分钟内再扩容百万在...

工作笔记:转正及其他

周四的时候,正式转正了。试用期有点长,半年。其实要到3月10号才满半年,提前了一点点。转正还有个稍正式的转正述职,正经写了文档,大佬们也正经对我进行了提问。 整个述职的过程,表达的最多的一个观点就是要保持清晰,要做充分的量化,只有这样,才能解决遇到的各种问题,包括性能问题。一切都要量化,分析清楚,而不是靠各种猜测,猜测只能找到找到线头,没法实际解决问题,反而还可能浪费时间。 近期,a...

游戏服务器工程实践三:C++ 与 lua 传递 64 位整数 ID 的问题

工作遇到的问题,记录一下。正常情况下,这些都是很basic的,但有些祖传代码过于久远,过去没触发的问题,在当下的使用情形下就会出问题。所以,不是先人的锅,也不是后人的锅:)。 我们服务器的代码是 C++ & lua (lua 版本是 5.4.6),会用 64 位大整数(其实只用到63位)来构造用户的 ID,其中高 17 位是区域 ID(AID),低46位是自增 ID,即 UID =...

2024 年终总结

生活 去年国庆辞的职,休息了一段时间,去年 12 月底也迎来了一些好结果,人生总是会有些起伏。 今年上半年,基本上都是在做一些 ai 落地相关的东西,其实没啥技术含量,纯粹是帮帮忙。7,8 月的时候,感觉事情做完了,就准备重新找工作,写了一些文章,做了一些总结,然后在 8 月底的时候开始投简历,花了大概 2 个星期的时间找了份新工作。 其实就业市场还好,预期不要太高,总是可以找到工作的...

腾讯云 cos 流量防盗刷:自动监测流量并自动修改桶的读写权限

1. 概述 博客的图床用的是腾讯云的 cos,我的桶设置为了公有读私有写,因为私有读写太麻烦了,用起来不方便。而公有读私有写又有盗刷问题,我的 cos 是后付费的,而腾讯云又没法设置消费金额上限,那么当盗刷发生的时候,系统会把我的账户扣费成负数,除非我以后都不用腾讯云了,总需要把欠费补上的。 于是,为了防止被盗刷流量,做了一些研究。 方法一:设置防盗链 这种方式是设置 refer...

读书笔记:《海绵阅读法:如何吸收一本书的精华》

作者叫李小墨,非常有经验的阅读者,曾经做过记者,后来做自媒体,很成功。 这本书是对阅读方法非常好的总结,书里很多观点我也有总结出来过,所以有很强的共鸣。 1. 要点 记录一些我觉得重要的,有用的点。 通过笔记去精读 这本书最核心的点,在我看来,就是如何在阅读的时候做好笔记,这是最重要的阅读法。 这也是我最有共鸣的一点,其实无论是学习还是阅读,我认为做笔记都是最最重要的,超...

游戏服务器研究四:用全区全服的方式做分区分服的游戏

本文记录用全区全服的方式实现分区分服类型的游戏的一些思路。 持续更新,想到什么写什么。 1. 问题与挑战 今天跟一个大哥聊了用全区全服的架构做分区分服游戏的问题。这个让我想起了之前看过的一篇文章:《天美J3工作室服务器主程:我们怎么避免上线即炸服?》 。 用全区全服的方式来做分区分服,好处是: 合服或转服的场景,可以不用做数据迁移; 共用服务器、数据库,可以提高整体的...

游戏服务器研究三:bigworld 的 load balance 算法

1. 前言 bigworld 的 load balance 算法的大致思路是知道的,即 动态区域分割 + 动态边界调整。但具体是怎么实现的,不清楚,网上也不找到相关的文章介绍,所以只能自己看代码进行分析。 本文大致记录我所分析到的算法实现,基于 bigworld 的这个开源版本:2014 BigWorld Open-Source Edition Code,更具体的信息可在我另一篇文章找到...

游戏服务器研究二:大世界的 scale 问题

单服大世界的 scale 是游戏服务器的经典难题,已经被很多人研究过了。我对 scale 类的问题很感兴趣,所以研究得也比较多。 本文不会探讨 MMO 类的网游提升单服承载人数有没有意义,只单纯讨论技术上如何实现。 像 moba、fps、棋牌、体育竞技等 “开房间类型的游戏”,scale 起来比较简单。此类游戏的 pvp 一般是相对较少的玩家在一个小场景里进行对战,以这种小场景为单位去做...

游戏服务器研究一:bigworld 开源代码的编译与运行

1. 前言 bigworld 已经开源了它的代码,而我对于大世界的 scale 很感兴趣,所以就尝试把代码跑起来研究。但是,整个过程比我预想的复杂得多。 虽然能找到一些官方的帮助文档,但这些文档要么过旧,要么过于详尽,并且写的大多是一些自动化的操作,依赖的工具链很多,所以对于手动搭建没啥帮助,反而带来了不少困惑。 而网上,搜索不到其他人写的关于 bigworld 搭建的文章,所以只能结...

游戏服务器工程实践一:百万级同时在线的全区全服游戏

我应该有资格写这篇文章,因为亲手设计过可以支撑百万级同时在线的全区全服类型的游戏服务器架构。 但这并不代表我有多牛,实际做过之后就会发现,这类游戏的架构设计很简单,做对几件事情就够了。 若干年前我在某公司任职时,参与研发过一款休闲类型的游戏,由 penguin 厂独代。研发的时候,p 厂要求我们的游戏服务器要能支撑百万以上的同时在线,并且要能在 30 分钟内扩容 100 万在线。 在经...

数据库事务一:ACID 中的 C 是多余的

本文打算探讨 ACID 中的 C,因为它的定位有些模糊。 1. 正文 学得比较杂的朋友都知道,数据库事务模型的 ACID 里有个 C,分布式的 CAP 理论里也有个 C,刚好中文又都翻译成 “一致性”,就让人很头大了。 这个在《数据密集型应用系统设计》里有详细的介绍[1],读完后就很清晰了: CAP理论中,一致性一词用来表示线性化。 而在ACID中,一致性主要指数据库处...