/ 微游技术部

微游技术部一周分享 20210925期

minigame.vip

关于微游互娱技术部

微游互娱,立足中国,面向全世界,致力于全球游戏发行。

作为一个小地方的小型初创团队的小技术部门,我们一直努力提高自己的专业能力,希望能够用自己的专业能力提高游戏发行的效率,提高游戏研发团队的合作满意度。

以此为目的,技术部内每周都有内部技术分享,希望通过学习、总结、分享,建立团队的技术氛围,提高团队和个人的专业素养。

我们都是一些普通的程序员,曾经很多人都没有自信,觉得自己分享的内容太普通了。不过,我一直觉得,分享,其实首先是写给自己的看的,其次才是写给别人看的。经过一段时间的实践,发现团队内每个人都有明显的成长。

以下是第20210925期的微游技术部一周技术分享内容,如果对你有所帮助,是我们的荣幸,如果你能帮助指出其中的错误,那是我们的荣耀。谢谢。

1. 后端开发

1.1. OpenTelemetry

上期介绍了分布式链路的标准 OpenTracing,这期介绍一下OpenTracing的后继版本OpenTelemetry。

目前,OpenTelemetry已经正式成为 CNCF 的孵化项目,OpenTracing 和 OpenCensus 不再维护, OpenTracing 目前是 CNCF 的存档项目。

详情请看: 分布式链路追踪初探2

2. JavaScript/TypeScript

本周分享一些JS/TS开发的工具:

2.1. 根据需要动态加载脚本并设置自定义参数

https://xmanyou.com/javascript-dynamically-load-script-and-set-parameters/

包括CocosCreator在内的很多游戏引擎,在打包成H5游戏包时,会使用动态加载js脚本的做法。

我们在开发自己的JS SDK时,考虑到需要为不同的平台加载不同的第三方平台SDK,借鉴了他们的实现,并加入了自己所需的功能:为js脚本添加自定义参数,满足特定平台SDK的接入需求。

几个要点:

  • 1). 使用document.createElement("script")来创建script标签,也就是HTMLScriptElement元素,然后添加到DOM树中。
  • 2). script标签的参数,动态加载时的属性名,不一定与script标签中的一致,建议查询文档,或者直接用setAttribute。
  • 3). 对于某些SDK所需的自定义参数,由于是非标准的参数,所以必须使用setAttribute的方法来设置。

2.2. 代码 xxx === void 0是什么意思?

https://xmanyou.com/javascript-what-does-void-0-mean/

一言以蔽之,就是用来判断是否为undefined

2.3. 异步等待方法waitUntil的实现

https://xmanyou.com/javascript-wait-until-condition-meet-or-timeout/

原理:利用setTimeout方法来轮询等待条件是否满足。

3. 运维

3.1. 使用ApiSix替换Nginx作为路由网关的一些经验

1). 如何备份设置

ApiSix 热更新配置,搭配ApiSix Dashboard可视化配置,都是很实用的功能,比较可惜的是,在数据备份上,虽然提供了Admin接口,缺没有一个完整的备份方案,需要自行开发。

目前版本,在ApiSix Dashboard中,仅在路由页面可以使用导出和导入OpenApi的方法来备份和恢复路由设置,而没有备份其他设置。

2). ApiSix Docker部署后无法启动

使用官方ApiSix Docker项目的示例docker-compose.yml文件直接部署,发现启动后一直重启,无法正常使用。
检查了一下,发现是etcd服务启动时报错了:

etcdmain: cannot access data directory

简单的解决方法是:将etcd_data目录设置为777权限:

sudo chmod 777 etcd_data

4.学习与调研

4.1. 一个高性能且低损耗的 goroutine 池

https://github.com/panjf2000/ants

国人开发一个高性能goroutine池。

4.2. Grafana全家桶

Grafana是Grafana Lab开源的一个数据可视化工具。但是除了Grafana之外,围绕着监控功能,Grafana Lab开发并且开源了一整套监控工具全家桶:

  • Prometheus: 数据监控 Metrics Monitoring
  • Loki: 日志监控 Logging
  • Tempo: 链路追踪 Tracing

另外,Grafana Lab还开源了一个压力测试工具:k6。

grafana-lab-products

4.3. 国内团队开源的k8s管理工具

  • KubeSphere: 青云团队开源
  • KubeOperator: 有开发了JumpServer的飞致云团队开源

这两个产品的功能与上周介绍的Rancher有一定的重合度,但又不完全相同,可以根据需要选择。