<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>游戏后端 on 积极向上</title>
    <link>https://www.keyboard-man.com/tags/%E6%B8%B8%E6%88%8F%E5%90%8E%E7%AB%AF/</link>
    <description>Recent content in 游戏后端 on 积极向上</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Wed, 08 Jan 2025 17:19:05 +0800</lastBuildDate>
    <atom:link href="https://www.keyboard-man.com/tags/%E6%B8%B8%E6%88%8F%E5%90%8E%E7%AB%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>解决数据竞争-Valgrind</title>
      <link>https://www.keyboard-man.com/post/valgrind_data_race/</link>
      <pubDate>Wed, 08 Jan 2025 17:19:05 +0800</pubDate>
      <guid>https://www.keyboard-man.com/post/valgrind_data_race/</guid>
      <description>&lt;h4 id=&#34;一背景&#34;&gt;一、背景&lt;/h4&gt;&#xA;&lt;p&gt;数据竞争在多线程编程中容易出现且难以察觉，尤其是项目复杂变量变多之后。靠人力阅读代码心智负担太大，这时候引入&lt;strong&gt;valgrind&lt;/strong&gt;工具就可以帮我们很容易发现数据竞争从而解决问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>skynet伪并发</title>
      <link>https://www.keyboard-man.com/post/skynet_pseudo_concurrent/</link>
      <pubDate>Thu, 27 Oct 2022 11:08:40 +0800</pubDate>
      <guid>https://www.keyboard-man.com/post/skynet_pseudo_concurrent/</guid>
      <description>&lt;h4 id=&#34;一背景&#34;&gt;一、背景&lt;/h4&gt;&#xA;&lt;p&gt;&lt;strong&gt;和 erlang 不同，一个 skynet 服务在某个业务流程被挂起后，即使回应消息尚未收到，它还是可以处理其他的消息的。所以同一个 skynet 服务可以同时拥有多条业务执行线。所以，你尽可以让同一个 skynet 服务处理很多消息，它们会看起来并行，和真正分拆到不同的服务中处理的区别是，这些处理流程永远不会真正的并行，它们只是在轮流工作。一段业务会一直运行到下一个 IO 阻塞点，然后切换到下一段逻辑。你可以利用这一点，让多条业务线在处理时共享同一组数据，这些数据在同一个 lua 虚拟机下时，读写起来都比通过消息交换要廉价的多。&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>skynet火焰图</title>
      <link>https://www.keyboard-man.com/post/skynet_profile/</link>
      <pubDate>Wed, 26 Oct 2022 18:05:37 +0800</pubDate>
      <guid>https://www.keyboard-man.com/post/skynet_profile/</guid>
      <description>&lt;h4 id=&#34;一背景&#34;&gt;一、背景&lt;/h4&gt;&#xA;&lt;p&gt;前面&lt;a href=&#34;../wgame_group/&#34;&gt;腾讯云mongo服务采坑&lt;/a&gt;和&lt;a href=&#34;../mongo_cpu/&#34;&gt;优化Mongo降CPU&lt;/a&gt;两篇文章从两个角度记录了我们解决水晶活动异常所用到的方式。但这些都是外部的，真正是否机器不够用、数据库拖慢服务还是其它问题还是得从代码层面入手。从数据库入库记录和请求日志已经很清晰就是水晶抽卡导致负载上升服务异常的，所以直接压测接口找到代码层面问题是最首先应该做的事，而火焰图就是最好的工具。&lt;/p&gt;</description>
    </item>
    <item>
      <title>优化Mongo降CPU</title>
      <link>https://www.keyboard-man.com/post/mongo_cpu/</link>
      <pubDate>Wed, 26 Oct 2022 10:02:38 +0800</pubDate>
      <guid>https://www.keyboard-man.com/post/mongo_cpu/</guid>
      <description>&lt;h4 id=&#34;一背景&#34;&gt;一、背景&lt;/h4&gt;&#xA;&lt;p&gt;前面&lt;a href=&#34;../wgame_group/&#34;&gt;腾讯云mongo服务采坑&lt;/a&gt;中提到每次水晶活动才开始的时候会吸引大量玩家来抽卡，会导致cpu居高。当然就算没有水晶活动每日凌晨跨天游戏玩法重置等入库外加新的一天较多玩家同时进入也会导致cpu比平时多挺多，如图所示。&#xA;&#xA;        &lt;img class=&#34;mx-auto&#34; alt=&#34;tencent-mongo-cpu-0916&#34; src=&#34;https://storage.keyboard-man.com/site-web/images/tencent-mongo-cpu-0916.png&#34; /&gt;   &#xA;    &lt;/p&gt;&#xA;&lt;h4 id=&#34;二降cpu&#34;&gt;二、降CPU&lt;/h4&gt;&#xA;&lt;h5 id=&#34;加机器&#34;&gt;加机器&lt;/h5&gt;&#xA;&lt;p&gt;避免单实例cpu太高的方法也可以通过加机器(增加mongo服务实例)来解决，但是已经在当前实例的数据库迁移到新实例的话需要关服以及处理一些配置，这不是我们想要的。&lt;/p&gt;&#xA;&lt;h5 id=&#34;加索引&#34;&gt;加索引&lt;/h5&gt;&#xA;&lt;p&gt;如果更新mongo的集合不是以&lt;code&gt;_id&lt;/code&gt;为筛选条件的话，大多时候都需要增加对应的索引，避免更新时遍历全表。事实上我们基本每个表在上线前都已经加上了索引，查看慢查询补上遗漏的几张表的索引后有少许好点，但问题依然很严重。&lt;/p&gt;</description>
    </item>
    <item>
      <title>腾讯云mongo服务采坑</title>
      <link>https://www.keyboard-man.com/post/wgame_group/</link>
      <pubDate>Tue, 25 Oct 2022 16:54:27 +0800</pubDate>
      <guid>https://www.keyboard-man.com/post/wgame_group/</guid>
      <description>&lt;h4 id=&#34;一背景&#34;&gt;一、背景&lt;/h4&gt;&#xA;&lt;p&gt;我们项目存储游戏数据采用的mongo服务，流水等记录数据存储采用的mysql服务。之前是部署到每台业务机器上，开在线上机器的游戏服一般直接连接本机mongo服务。最新的项目由于业务增长运营方要求将我们使用的mongo服务和mysql服务迁移到腾讯的云服务上面去，保障”&lt;strong&gt;数据库的安全可用&lt;/strong&gt;“。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
