从 Discord 的做法中学习 — 使用 Golang 进行请求合并( 二 )

func (g *Group) Do(key string, fn func() (interface{}, error)) (v interface{}, err error, shared bool)
Do 执行并返回给定函数的结果,确保同一时间针对给定键只有一个执行过程 。如果出现重复,重复的调用者会等待原始调用完成并接收相同的结果 。返回值 shared 表示是否将 v 给了多个调用者 。
 
现在让我们重新运行模拟并比较结果 。

从 Discord 的做法中学习 — 使用 Golang 进行请求合并

文章插图

从 Discord 的做法中学习 — 使用 Golang 进行请求合并

文章插图
  • 平均每秒请求数 (RPS): 2309
  • 平均响应时间: 433毫秒
  • 50% 响应时间: 389毫秒
  • 99% 响应时间: 777毫秒
正如你所看到的,仅使用了一个简单的技术就将第99百分位数减少了14秒,新方法支持的每秒请求次数提高了7.6倍 。
结论从那时起我们就注意到,通过优化数据库查询,可以大大提高应用程序的整体性能 。虽然我们讨论的方法是情景性的,但Discord已经使用了一年多,对他们有很大帮助 。
你应该知道,如果你使用数据服务 , 你将面临其他的复杂情况 。例如 , 你可能会有多个数据服务实例,而你的Python API必须有一种机制将类似的请求发送到同一个实例 。




推荐阅读