/ 微游技术部

微游技术部一周分享 20220619期

minigame.vip

大家好,以下是微游互娱技术部本周的分享:

1. [Android开发] Google支付接入

https://juejin.cn/post/7110434269155033118

上架Google Play的应用,如果提供支付功能,需要接入谷歌的支付Billing API。
特别注意的是,Billing库最近升级了5.0.0,但是,这个版本似乎并不支持低版本的Google Play,导致无法正常获取商品信息。
所以,本文特别介绍了4.x和5.x版本支付Billing Api的接入方法,以及接入完毕后,如何进行测试。

2. [Go开发] Singleflight介绍

https://overstarry.vip/posts/singleflight介绍/

在编写对外服务时,经常会使用缓存,来减少对底层数据库的压力。但是,引入了缓存,在减少了压力的同时,也引入了新的问题,例如缓存击穿。

关于缓存击穿,引用另一篇博客的说法(Leo_wlCnBlogs):

缓存击穿是这样一种情况:由于缓存系统中的热点数据都有过期时间,如果没有过期时间就造成了主存和缓存的数据不一致,因此过期时间一般都不会太长,设想某时刻一批热点数据同时在缓存系统中过期失效,那么这部分数据就都将请求磁盘数据库系统。
来源:https://www.cnblogs.com/Leo_wl/p/12294093.html

这种情况在并发环境中并不少见。本文介绍了处理这种情况使用的一种方法(也go-redis库中使用的方法):Singleflight,它可以将相同的请求合并为一个请求,从而大大减少了缓存击穿带来的负面影响。

3. [TypeScript] 用模版字面量类型,来减少Typescript项目中的重复代码

https://gitee.com/dony1122/note/blob/master/用模版字面量类型,来减少Typescript项目中的重复代码.md

TypeScript 4.1中引入了一个功能:Template Literal Types,直译是模板字面量类型。它有点像C语言里的宏,可以在一个字面类型定义里,使用另一个字面类型定义。
举个例子:

type Direction = "left" | "right" | "top" | "bottom";

type CssPadding = `padding-${Direction}`;
type MarginPadding = `margin-${Direction}`;

等价于

type CssPadding =
  | "padding-left"
  | "padding-right"
  | "padding-top"
  | "padding-bottom";
  
type MarginPadding =
  | "margin-left"
  | "margin-right"
  | "margin-top"
  | "margin-bottom";

本文对Template Literal Types的使用方法和原理进行了介绍。

4. [Web开发] 手动实现pc端横向滚动

https://juejin.cn/post/7110836209852612638

在Web页面中,容器隐藏了横向滚动条后,移动端横向滚动效果不受影响,但是pc端是无法通过鼠标进行横向滚动,因此需要自己手动实现效果。

本文介绍了如何在pc上实现一个横向滚动的功能。

5. [Go开发] 性能测试平台(locust+boomer)之一

https://luckytking.github.io/2022/06/性能测试平台locust-boomer之一/

最近公司打算对后端服务进行压力测试,本文介绍如何使用locust + boomer搭建性能测试平台。

关于locust

Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。开发者可以使用普通的Python来编写用户行为,从而实现了无限的可能性。
https://github.com/locustio/locust

关于boomer

boomer是用golang实现的locust压测客户端,让go开发人员可以使用go来编写压测用例,并将结果上传给locust。
它完整地实现了 locust 的通讯协议,运行在 slave 模式下,用goroutine 来执行用户提供的测试函数,然后将测试结果上报给运行在 master 模式下的 locust。
https://github.com/myzhan/boomer

与 locust 原生的实现相比,解决了两个问题:一是单台施压机上,能充分利用多个 CPU 核心来施压, 二是再也不用提防阻塞 IO 操作导致 gevent 阻塞。

以上。