[Dr.Lib]Minecraft 服务器资源控制策略:AI 抑制而非数量限制

转载自 Minecraft 服务器资源控制策略:AI 抑制而非数量限制 · Phoenix’s island

Minecraft 的 lag 问题已经司空见惯,各种控制资源消耗和卡顿的插件也层出不穷。但是它们几乎都非常用力地在一个点上:控制实体数量。

这并不无道理,因为 Minecraft 中最消耗资源的部分就是实体。但是暴力控制实体数量会导致刷怪塔无法正常工作、掉落物清理速度过快等问题,在生存服务器中可能引发玩家的强烈不满。

所以,喵窝开发组从另一个角度做出了一些尝试。

启发

生物实体的数量巨大,主要集中的地区显然不是野外的自然刷怪区,而是玩家聚集的刷怪场、村民工程、动物养殖场等。如果不限制生物的数量和密度同时降低资源消耗,那么只能从生物实体的特性入手了。

Minecraft 最近的版本中引用了 NoAI  的 NBT Tag,带有此标签的生物将不会进行 AI 计算。换句话说,除了占用服务器内存中的一点数据,几乎不会对这个生物实体有任何其他的 CPU 算力消耗。

也就是说,实体消耗的算力资源,绝大部分都是 AI 计算的消耗。

方案

抓上一票人做了一些测试,结果证实生物失去 AI 后大幅降低了 CPU 的算力消耗。这是个 positive 的信号,但是接下来的测试则遇到了问题。

对于养殖场,等生物数量变化不大(或者说只是定期来清理并重新养殖一次)的设施,生物失去 AI 的影响很小,只有在重新繁殖时需要恢复 AI。但是刷怪塔则因为生物没有 AI,同时也被强制不受重力影响而几乎无法使用,即便同时设置 NoGravity 为 false 也无效。

开发组中 @Librazy 提到了 Spigot 的一个参数 nerf-spawner-mobs ,开启时刷怪笼生成的生物将不会拥有 AI,但是会被外界影响(例如水流和火球等)而移动。这个选项是全局的,因此不需要开启,只需要反射 spigot 中设置该功能的方法即可。

经过 @Cylin 查阅Spigot的代码,这个参数会给刷怪笼生成的实体设置 fromMobSpawner = true ,导致实体的 doTick()中跳过实体的AI处理。

于是整个方案的流程便是当服务器卡顿时抑制生物密集区的生物 AI 从而降低资源占用,同时最大程度上保证玩家对生物的需求。「服务器卡顿」的考量以服务器 TPS 而非实体数量为准,当服务器 TPS 高于一定值时即认为服务器没有超负荷,不会有任何操作,最大程度上利用硬件的性能。

实现

插件主要由开发组的 @Cylin 编写,源代码以 MIT 协议发布在 GitHub 上。

插件每隔一段时间扫描服务器的 TPS 确认运行状况,如果 TPS 低于阈值则触发 AI 控制,TPS 高于一定值且持续一段时间即认为服务器已恢复正常运行状态,自动恢复被抑制的实体 AI 减少对生存体验的影响。

实现过程中额外添加了一些额外可能被生存服务器用到的功能:

  • per-world 控制,如果玩家需要建造以仇恨为基础的小黑塔,可以关闭对末地的控制。
  • 实体总量和单区块实体密度在 AI 抑制时纳入考虑,更加精准抑制资源消耗较高的区块。

测试

yasui 插件在 毛玉線圈物語 服务器中应用测试。由于近期玩家数量爆炸式增长(日常在线 5 人到 ~30 人甚至 50 人),各种实体控制插件均告无效。yasui 插件应用后被证实数次发挥作用,没有任何实体数量限制的前提下将服务器 TPS 稳定在 19 以上,服务器实体承载数量从 ~2500 提到至接近 5000,并且还有继续提高的可能(数次触发中最高一次单世界实体记录是 4808,其他世界中仍有大约 2000 实体未被计入)。

吐槽:你们贼能刷

基于bigCatAndroid主题的早期版本制作,采用GPL协议。

外观:如你所见

也正如他的名字,HoloDark。简约又不失炫酷,轻巧又不失强大。深色背景,蓝色和灰色线条,Holo风的界面,绝对如你所愿。

正在调试HoloDark主题

一点一滴的努力~

 

​特色:

  1. 标准HTML5*
  2. 主题设置功能
  3. 自动推送更新(unofficial)
  4. 自动识别文章内H2并生成侧边索引
  5. 索引和侧边栏滚动固定
  6. AJAX搜索结果提示
  7. AJAX评论集成(动画状态效果喔~)
  8. 评论自动邮件通知被@的同学
  9. 快捷键 / 开启搜索
  10. 文章底部作者介绍+二维码
  11. 响应式布局(Beta
  12. 全格式文章支持
  13. ​微格式+微数据​+SEO优化

*由于使用了x-webkit-speech,暂时验证HTML5会有一个error

下载:

im.librazy.org/holodark/HoloDark.zip

Github:

https://github.com/Librazy/HoloDark

继续阅读 “WordPress主题:HoloDark” »

继续折腾

2b86b947是我feedsky的验证码

自己做的Responsive UI,感觉不错,以后就不用手机版了

换了一堆插件,比如说Kindeditor就被我换成了CKEditor,以及WP Super Cache换成W3 Total Cache

可恶的Old IE,害得我都不能开JS和CSS cache,代价是Old IE会看到一个报复社会的主题。

博客例行维护,效果不错

1.夏令营把博客首页弄得多都是图……so Lazyload+Slideshow

2.清理一些没用的插件

3.优化图片,没啥效果

4.WP Super Cache,感觉良好

5.修复一些前后台前端JS加载错误导致的BUG

jQuery 2.0不再支持IE6/7/8

Via http://liulanmi.com/news/5239.html

JQuery 2.0的发布象征着jQuery JavaScript库到了一个重要里程碑。2.0版本比前任版本在大小上缩减了12%,但是更值得注意的是,jQuery 2.0不再对IE6/7/8三个版本进行支持。

jQuery 2.0不再支持IE6/7/8

七年前jQuery的诞生,开始让开发者更简单的操作HTML和编写JavaScript,jQuery的跨浏览器特性,更是很快受到了广大开发者的青睐。根据去年的一项调查显示,粗略估计,网络上一半的站点都在使用jQuery。

停止对旧版IE的支持,是否会改变jQuery的使用率?答案也许是不会。如果你的网站需要维护对IE8或者低版本(或者是IE9和IE10在兼容模式下运行),你只需要沿用jQuery1.9或者以下版本。

“jQuery2.0主要用于现代网络,”jQuery的Dave Methvin在Query Foundation网站上写道,“我们有jQuery1.x版本处理旧版浏览器,并且期望他可以支持好几年。”

如果你想要同时兼容新旧版浏览器,你可以使用条件注释,让2.0在新浏览器上使用,而旧版本使用1.9,但是更简单的方法则是沿用jQuery1.x版本。至少目前2.0的主要用例,对IE的支持是不再考虑范围内了,而是Chrome或者Firefox的附加组件,PhoneGap应用程序或是node.js。

PS:你看看代码就知道我为了一个JQ2.0弄得多纠结。。

主题小改了一下……

侧边栏多有爱啊!

http://ooxx.me/theme-android.orz 大猫的安卓主题还是相当不错的,改了颜色风格,加了支持小工具的侧边栏,固定显示作者信息并加一个二维码,调整显示细节。。这么好用的主题@白色箱子居然把它给换了太可恶了。

爪机杂记

现在咱也算有博客的人了。
android主题整体不错,有空撸一个右侧边栏试试。
真心要一个顶级域名啊啊。
Todolist还是长长的怎么破。
到底要友言or多说?
IE6怎么破。。
什么时候blog才能算建好了呢。。

发自 WordPress for Android