<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Skynet on 积极向上</title>
    <link>https://www.keyboard-man.com/tags/skynet/</link>
    <description>Recent content in Skynet on 积极向上</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Thu, 27 Oct 2022 11:08:40 +0800</lastBuildDate>
    <atom:link href="https://www.keyboard-man.com/tags/skynet/index.xml" rel="self" type="application/rss+xml" />
    <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>
    <item>
      <title>后端服务动态转发</title>
      <link>https://www.keyboard-man.com/post/dynamic-redirect/</link>
      <pubDate>Tue, 25 Oct 2022 16:01:34 +0800</pubDate>
      <guid>https://www.keyboard-man.com/post/dynamic-redirect/</guid>
      <description>&lt;h4 id=&#34;一背景&#34;&gt;一、背景&lt;/h4&gt;&#xA;&lt;p&gt;当前我们游戏架构通过水平扩展wgame节点(和区服无关只处理玩家连接和玩家服务数据)来承载在线玩家的。通过一直扩展减轻单个wgame节点负载和承载更多在线玩家。&lt;/p&gt;&#xA;&lt;p&gt;在wgame节点前面增加一层nginx以实现wss(客户端和服务端通过websocket连接，但是微信等小程序要求wss)。以前单个渠道不用太多wgame节点就能满足线上需求，随着业务增长和游戏类型决定同时在线玩家数较以前出现较大增长，每次增加线上新机器或者机器上面新增wgame节点(wgame监听客户端连接端口)就需要重新生成nginx配置并reload一次，导致nginx配置越来越难维护。后期统一入口即在nginx前面加入SLB之后每次还需要在SLB增加新的端口监听和转发。&lt;/p&gt;</description>
    </item>
    <item>
      <title>etcd lualib for skynet</title>
      <link>https://www.keyboard-man.com/post/etcd-service/</link>
      <pubDate>Mon, 24 Oct 2022 18:30:00 +0800</pubDate>
      <guid>https://www.keyboard-man.com/post/etcd-service/</guid>
      <description>&lt;h4 id=&#34;一背景&#34;&gt;一、背景&lt;/h4&gt;&#xA;&lt;p&gt;以前项目配置都是放在skynet的启动配置里面，当线上项目进程节点变多后需要加新配置内容的时候需要全部重新生成启动配置，不统一的配置内容(mongo数据库地址、mysql数据库地址、进程节点ip和进程监听端口等)会导致配置管理变得非常麻烦，而且不能比较方便实时更改配置。为了解决这个问题我们引入&lt;a href=&#34;https://github.com/etcd-io/etcd&#34;&gt;etcd&lt;/a&gt;来管理所有业务配置，现在skynet启动配置只需要传入etcd所需要必要参数即可。现在的配置内容大体示例为：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
