我对AI Vibe-coding 的看法

AI是一种进步,虽然还远不能完全依赖,但利用好AI,能让你成为更好的自己。

vibe coding 看法

vibe coding,简单来说,就是开发者通过自然语言指导 AI 完成编码。

AI完成需求,基本是模仿项目已有代码风格和写法,基于既定约束,按要求完成功能。跟人的行为很像,能替代人的大部分编码工作。

AI 编码存在非确定问题。
通俗的说法就是,100个人用AI写代码,就会有100种结果。不同AI模型,不同模型版本,也会有不同的结果。

只是在相同的提示词下,结果趋于相似。
继续阅读我对AI Vibe-coding 的看法

游戏服务端使用容器化部署

最近一年,线上游戏服务端使用了容器化部署,效果可圈可点,适当做下总结。

特别说一下,容器化部署是指 使用 k8s/docker 形式部署游戏服,需要在游戏开发过程中做各种必要的适配。

结论

先说结论,说明其中的利弊。

优势:
1. 使用 k8s 容器部署,自动扩缩容,秒级部署
2. 使用容器迭代更新
3. 故障隔离和容错:节点故障自动恢复,流量自动切到正常节点

劣势:
1. 容器重启状态会丢失,不大适合长时间任务,功能开发更复杂
2. 文件热更新实现复杂
3. 故障排查比较困难:容器众多,环境难以保留
4. 成本比较高:k8s 组件消耗资源,通常还要搭配EKS托管
继续阅读游戏服务端使用容器化部署

浮点数精度丢失问题

浮点数问题,我在早前的文章聊过这个问题,感兴趣的同学点下《lua 开发防坑指南》。最近项目刚好又遇到这个问题,再细致讲下。这里以lua做说明,其他语言道理也是一样的。

在计算机中,二进制表示数字的核心是整数除 2 取余,小数乘 2 取整。小数转换为二进制时,由于精度限制,许多小数无法被精确表示,而是会变成循环二进制小数。以下是0.1的二进制表示(基于小数部分乘2取整法):

0.1 的二进制表示
整数部分1的二进制是 1。
小数部分0.1的二进制转换过程:
0.1 × 2 = 0.2 → 整数部分0
0.2 × 2 = 0.4 → 整数部分0
0.4 × 2 = 0.8 → 整数部分0
0.8 × 2 = 1.6 → 整数部分1
0.6 × 2 = 1.2 → 整数部分1
0.2 × 2 = 0.4 → 整数部分0(从此开始循环)
继续阅读浮点数精度丢失问题

skynet项目内存使用优化

Skynet/Lua 凭借其轻量易用、灵活热更、Actor并发模型的特性被广泛应用于游戏开发等场景,但 Lua 动态内存管理机制也带来了内存占用过高的挑战。

本文结合我最近对一个 skynet 项目做的内存优化分析经验,做一下分享。

1、lua 内存使用优化

1.1. 减少 lua 函数调用层数

服务端收到协议后,要经过很多次函数调用才到真正的执行函数。以手头的项目举例,服务 A 函数负责接收协议数据,收到数据后,会将协议和参数传给 B 函数处理,B 函数根据定义找到对应的模块和方法,再由 C 函数排队(一个玩家一个队列)调用 D 目录下对应的模块和函数, D 目录的模块再 require 对应的目标模块,才调用到真正的执行函数 E。最后,E 函数还会调用其他模块来完成业务逻辑。

调用层数过深的问题是,lua 要为每个过程保留过程数据,如函数地址、参数等,也就是调用栈信息(CallInfo)

建议:减少调用层级,可以使用注册回调机制
继续阅读skynet项目内存使用优化

skynet lua生成火焰图

最近在搞skynet生成火焰图, github 上刚好有解决方案 https://github.com/rangercyh/skynet_systemtap_set,但代码比较老旧,不支持新版的 skynet 及 lua5.4

生成火焰图的原理是,利用 systemtap 抓取 lua栈,分析函数代码的热路径。

所以,我在他的基础上,主要处理以下两个问题:
1. lua5.4 内部数据结构做了调整,取代码文件地址、代码行数也有改动。
2. skynet shareproto 结构调整

我修改完的代码也放在github分享,有兴趣的小伙伴可以围观 skynet_systemtap_set
继续阅读skynet lua生成火焰图

游戏服务端架构的思考

我从业游戏服务端有10年了,阶段性做个小结,总结我对游戏服务端的理解,这次就谈下服务端架构以及如何优化。文章就以我的经历作为开头。

写在开头

10年前,我加入了一家pc端的游戏公司,那时候国内端游已经是走向没落的时候了,公司正在开发的游戏是mmorpg,玩法比较像魔兽世界,这款游戏他们在此之前已经开发5年了,导致美术资源在当时看来比较落后了,不像同期火热的页游美术那么精致。

但是我觉得,像魔兽世界这种游戏,玩家大地图的游走和打怪,不同职业的配合和牵制,玩家与玩家之间亲密的合作、激烈的对抗是能补足美术这点不足的,特别是巡游boss,一个肉盾抗几下就挂了,基本需要10-20人通力合作才能把 boss 打死。

很快,大量玩家来玩这个游戏,以及客服收集到的评价验证了我的想法。可令人没想到的是,开发问题很大,这个游戏上线期间每天都有1-2次进程崩溃,玩家数据回档。

很可惜,我不是这个项目的开发,我不了解这个游戏的架构,只是这件事在我的心里埋下了种子,让我萌生想要解决问题的想法。
继续阅读游戏服务端架构的思考