当前位置:首页 > 数码 > 解锁网络-的弱小性能构建社区-基于Discord-从-Discord-的成功中汲取教训 (解锁网络的软件)

解锁网络-的弱小性能构建社区-基于Discord-从-Discord-的成功中汲取教训 (解锁网络的软件)

admin8个月前 (05-12)数码31

正如你或许之前看到的,Discord去年颁布了一篇有价值的文章,讨论了他们成功存储了数万亿条信息。只管有很多对于这篇文章的视频和文章,但我以为这篇文章中一个名为数据服务为数据服务的局部没有失掉足够的关注。在这篇文章中,咱们将讨论Discord对数据服务的方法,并讨论如何应用Golang的并发个性来缩小特定状况下的数据库负载。

数据服务挽救热分区

如你所知,信息和频道是Discord中最罕用的组件。让咱们构想一个场景:一个领有50万成员的频道的治理员提到@everyone。会出现什么?不可胜数个同时的恳求间接指向那个数据库分区,一切恳求的指标都是检索相反的信息。这种形式重复出现,直到该分区无法回应其余恳求。

Discord引入了一个位于/target=_blankclass=infotextkey>PythonAPI和数据库集群之间的两边服务—他们称之为数据服务。这个服务大抵蕴含每个查问一个gRPC端点,没有任何业务逻辑。对Discord来说,这个服务的关键个性就是恳求兼并。

Golang

恳求兼并

正如咱们之前讨论过的,每当在一个宏大的频道中有提及时,就会有少量相似的恳求间接指向数据库分区。经过兼并这些恳求,假设多个用户恳求相反的数据库行,咱们可以将这些恳求兼并成一个选用查问,并口头该查问。

经过经常使用数据服务而不是间接衔接到数据库,咱们可以成功许多令人兴奋的性能,比如批量查问,这些性能可以清楚缩小数据库开支,并改善查问的平均值,特意是第99百分位数。

经常使用Golang成功便捷的恳求兼并

与许多其余公司一样,Discord经常使用Python作为其关键的后端言语。无论是微服务还是单体架构,后端服务通常间接衔接到数据源启动查问。只管Python确实是一种多性能言语,但在并发性方面存在一些无余。经常使用Python成功并发和高吞吐量的服务或许有些应战,而性能与用C++、和Golang等编译言语编写的相似服务相比,往往会较低。

在启动任何操作之前,让咱们模拟一下提到的状况。假定服务总共收到了5,000个恳求,其中并发数为1,000。

typeMessagestruct{gorm.ModelTextstringUserstring//somerandompropertiesthatamessagerowmayhave}funcgenerateRandomData(db*gorm.DB){fori:=0;i<100;i++{msg:=&messages.Message{Text:fmt.Sprintf("Message#%d",i)}db.Save(msg)}}

我经常使用Gorm构建了一个便捷的数据库模型来示意Message(信息)表,而后向表中填充了100条虚构信息。

e:=echo.New()e.GET("/randomMessage",func(cecho.Context)error{randomMessageID:=rand.Intn(100)varmsgmessages.Messageiferr:=db.Where("id=?",randomMessageID).First(&msg).Error;err!=nil{returnerr}returnc.JSON(200,msg)})e.Logger.Fatal(e.Start(":1323"))

我创立了一个便捷的端点来模拟对0到100之间的随机ID启动SELECT查问。如今咱们可以对这个端点启动基准测试,模拟在这种状况下会出现什么。

假设咱们有10秒的超时战略,大约有2%的恳求将收不到照应。如今让咱们扭转代码。Golang有一个名为singleflight的内置包。这个包提供了重复函数调用克服机制。普通来说,你给它一个键和一个函数,而不是屡次运转该函数,SingleFlight会临时坚持其余调用,直到第一次性调用成功其恳求并以相反的结果作出照应。

varg=singleflight.Group{}e.GET("/randomMessage",func(cecho.Context)error{randomMessageID:=rand.Intn(100)msg,err,_:=g.Do(fmt.Sprint(randomMessageID),func()(interface{},error){varmsgmessages.Messageiferr:=db.Where("id=?",randomMessageID).First(&msg).Error;err!=nil{returnnil,err}return&msg,nil})iferr!=nil{returnerr}returnc.JSON(200,msg)})

func(g*Group)Do(keystring,fnfunc()(interface{},error))(vinterface{},errerror,sharedbool)

Do口头并前往给定函数的结果,确保同一期间针对给定键只要一个口头环节。假设出现重复,重复的调用者会期待原始调用成功并接纳相反的结果。前往值shared示意能否将v给了多个调用者。

如今让咱们从新运转模拟并比拟结果。

正如你所看到的,仅经常使用了一个便捷的技术就将第99百分位数缩小了14秒,新方法允许的每秒恳求次数提高了7.6倍。

论断

从那时起咱们就留意到,经过优化数据库查问,可以大大提高运行程序的全体性能。只管咱们讨论的方法是情形性的,但Discord曾经经常使用了一年多,对他们有很大协助。

你应该知道,假设你经常使用数据服务,你将面临其余的复杂状况。例如,你或许会有多个数据服务虚例,而你的PythonAPI必定有一种机制将相似的恳求发送到同一个实例。


discord是什么软件

Discord是聊天软件。

Discord是一款适用于游戏玩家一体化语音和文字聊天软件。Discord从游戏语音、IM工具服务起家,随后转向直播平台,进而开设游戏商店的社区平台,成为游戏玩家在游戏中沟通协作的首选工具。目前Discord已经覆盖Windows、MacOS、Android、iOs、WindowsPhone等多种主流平台。

Discord从游戏语音、IM工具服务起家,随后转向直播平台,进而开设游戏商店的社区平台,成为游戏玩家在游戏中沟通协作的首选工具。Discord还吸引了许多非玩家用户,被学习小组、舞蹈班、读书俱乐部和其他虚拟聚会团队广泛使用。

Discord产生背景

Discord的概念由创建了手机游戏社交网络平台OpenFeint的杰森.施特朗(Jason Citron)构思得出,在2011年将OpenFeint卖给了GREE,并用这笔钱在2012年创建了游戏开发工作室Hammer&Chisel。

第一个游戏是于2014年发布的Fates Forever,施特朗预计这款游戏将成为移动平台上的第一个多人在线战斗竞技场游戏,不过由于受欢迎程度较低并没有成功,然而在开发过程中,为了开发出更好的游戏,施特朗注意到他的团队在尝试玩其他热门游戏如最终幻想XIV和英雄联盟时遇到了困难,并特别强调了在网络实时通话方面存在较严重问题。

一些网络实时通话服务要求玩家共享多个IP地址进行通话,而另外一些服务(如Skype或Teamspeak)则占用资源繁重,这使得开发人员想要开发出一种基于现代技术使用起来更友好的聊天软件:Discord。

以上内容参考网络百科-Discord

微软花120亿美金都高攀不起的Discord,到底有什么魔力?

这一届年轻人最喜欢用的社交软件有什么?很多人会首先想到TikTok,接着或许是Snapchat,但很多人却忽视了一个隐藏“王者”——Discord。

对于这款从 游戏 社交起家的“小众”语音聊天软件,去年,微软曾给它抛出了高达120亿美元的橄榄枝,最后却以被Discord拒绝而告终。 Discord拒绝微软的原因很简单:接到的收购Offer太多,业务成长得太好,想要再独立走走看。

的确,从Discord近几年的发展势头来看,它确实有拒绝微软底气。如今,你随手在北美的大中小学校园里抓一个学生,问问他们平时跟朋友用什么软件交流,Discord一定是榜上有名。年轻人们不仅用Discord来玩 游戏 、社交,也用它来做作业、小组讨论,还会在感兴趣的社区中去认识更多志趣相投的朋友。

相较于TikTok、Instagram这种面向大众开放的平台,Discord的社交路径似乎更为封闭和私密,但相对于Messenger、WhatsApp这种点对点的通讯工具,Discord又更加开放且功能丰富。在开放和封闭之间,Discord找到了一个非常舒服的中间地带,并因此吸引了越来越多的用户。

Discord诞生的背景并不复杂,就是两个 游戏 迷为了解决在线 游戏 中玩家的交流问题(俗称“开黑”)而开发的一个语音聊天工具。

两位创始人 Jason Citron 与 Stan Vishnevskiy从小就痴迷于各种 游戏 ,Jack Citron在接受纽约时报采访曾表示,他大学时曾经因为太多时间玩《魔兽世界》而差点没能顺利毕业,而他跟他妻子的第一次约会甚至也选在了一家街机厅。

在当时,其实市场上也存在打 游戏 可以用的语音聊天软件,比如Skype、TeamSpeak等,但这些软件并不是专为 游戏 打造,普遍存在着通话质量不好、延迟、掉线等问题,而且使用起来不仅复杂功能也很单一。 于是,身为资深 游戏 玩家同时也是软件工程师的两位创始人就想,能不能做出一款软件,能够满足 游戏 玩家们的所有需求,同时还能加强他们在 游戏 中形成的关系纽带。

接着,两位创始人就结合自身的使用需求,把过去 游戏 语音中所有以前觉得不满意的地方都进行了重新设计和安排。就这样,一款名为Discord、专为 游戏 语音聊天打造的社交软件就此诞生。

他们把Discord被定为了一个“永远在线的聊天室”,一个专为 游戏 玩家而设计的半开放式线上空间。 玩家可以简单方便地随时加入或者退出某个群聊进行组队、交流等,即使 游戏 断线或闪退依然可以保持顺畅的通话,玩家还可以在小组里分享一些相关的 游戏 图片、视频或是链接,群组成员可以方便地直接点击跳转。在语音技术上Discord也尽力做到了极致——高音质、低延迟、少占用,吊打当时一众语音聊天软件。

而最重要的是,Discord还依托于 游戏 语音开拓出了一个重要功能——社区,一个让玩家们在 游戏 结束之后还能继续深入交流的地方。

在 Discord 上,任何注册用户都可以自行创建服务器(类似于贴吧群),在形式上,它可以是面向所有用户的公开社区,也可以是仅接受特定用户的私人频道。在创建的服务器之下你还可以再创立子菜单,分成不同的群组类别,并指定每个群组的管理员。

比如现在很多 游戏 厂商就会为新 游戏 在Discord上创建服务器,在这个 游戏 的大话题下,可能还会细分出“装备”、“技能”、“故事线”等不同的群组,对这个 游戏 感兴趣的玩家可以自行选择进入任何一个话题房间参与讨论。除了语音聊天外,Discord 也允许用户通过文本或视频的形式进行交流,社交的自由度非常高。

“你可以把Discord看成一个巨大的房子,里边有很多房间,你可以随时在不同的房间里自由地移动。”Discord的两位创始人表示。“ Discord与大多数在线社交工具完全不同,它没有 游戏 化系统,没有追随者人数,没有算法推荐。它就是创造了一个地方,让你感觉就像你的朋友就在身边,你遇到他们并与他们交谈、闲聊。”

Discord的这种以玩家为中心的特性,很快就俘获了一大帮 游戏 迷的心,自2015年正式推出后,在短短一年内,Discord就收获了超过2500万的注册用户,2018年,注册用户已经突破2亿。很多 游戏 迷们认为,Discord精准地捕捉到了 游戏 文化,并为传播这种文化提供了巨大助力。

而很快,Discord影响力就不再只局限于 游戏 圈了。

因Discord所具备的多元化的社交形式、简洁易用的操作界面和强大的集成功能,它逐渐从一个“Chat for Gamer”的 游戏 社区变成了一个“Chat for Communities and Friends”的大广场。

现在在Discord上,你既可以选择建立 游戏 的群组,也可以建立学习小组、俱乐部、艺术社区、本地社区等,成为了各种各样有着不同需求的用户进行交流、消遣和建立关系的地方。

根据Advertising Law的统计数据, 2018年以前,DIscord用户的年龄层集中在25-30岁左右,跟主要 游戏 玩家的平均年龄吻合,但近几年来,随着Discord在学生群体中的流行,它的用户平均年龄已经降至了16-20岁。

年轻人喜欢用Discord有几个原因。一是因为Discord同时支持移动端和网页端,并且所有信息都可以实时保存在云端并同步在各个设备上,免除了其他类似平台需要验证登陆、信息迁移的过程,有利于信息的保留和追溯。二是它对群组设置有精细而便捷的频道分工和权限,通过引导流程能够让新加入者快速上手,找到合适的社群并融入其中。三是包含语音、文字、视频等多元化的交流功能,能够满足不同的社交需求。四是它的半开放性,既可以点对点的私人聊天,也跟朋友建群组,甚至也能到更大的社区。

也就是说, 你既可以把Discord用成Reddit,来发掘和讨论你感兴趣的话题,也可以把它用成Messenger,作为你和朋友家人日常沟通的工具,甚至还可以把它用作Slack、Zoom等,作为远程协同的平台。

如今,虽然相较于Facebook、TikTok的十亿以上的活跃用户数来看,拥有1.5亿月活用户的Disocrd还显得小众,但近年来Discord呈现的用户粘性非常高,平台的每日通话时长高达40 亿分钟。疫情以来,年轻用户的增长数据更是非常亮眼,也让Discord成为了资本的宠儿。

根据Cruchbase的数据,从2015年成立至今,Discord的总融资金额接近10亿美元,最新估值已经来到150亿美元,在投资人列表中,也不乏腾讯、Benchmark等一系列大机构的身影。

近年来,除了微软以外,包括Epic Games、亚马逊、索尼等都曾有意愿收购这个Discord。有消息显示,除了微软高调给出的120亿美元的高价之外,其他有买家曾经出价高达180亿美元。 很多涉足 游戏 领域的公司都希望能将Discord的社区、流量、用户体验收归囊中,而为了不让这个潜在“大杀器”落入竞争对手的手中,各方都在不断抬高价格。

虽然Discord的用户和估值都在节节攀升,但也不代表Discord的前景一片光明,至少,如何实现盈利是Discord首先要解决的问题。

关于Discord为什么会迅速崛起,在前文中还有一个没有提到的重点原因,就是Discord平台上没有任何广告。 对于社交平台来说,广告是其最大的收入来源,无论是Facebook、Twitter、TikTok、Snap等,这些年他们的绝大部分收入都是来自于广告。但在创立Discord 之初,两位创始人就坚持认为Discord是人们聊天谈话的地方,如果出现广告则会让这个过程变味,因此不会在 Discord 中引入任何形式的广告。

这些年来,Discord也不是没有在尝试开拓其他盈利道路,但却并不成功。比如2018年的时候, Discord 曾推出了Discord 商店,提供了一系列 游戏 出售给玩家,风格类似于Steam。但上线之后,由于使用此服务的付费会员太少,所以运行不到一年该项服务就被关闭了。

进军 游戏 市场的失败,也让Discord清醒的认识到,虽然它是依靠 游戏 社区起家,但它并不是一个 游戏 厂商,而是一个社群平台、一个社交工具。 于是最近几年,Discord开始专注于自己的社交和工具属性,开始开拓更多的 游戏 社区之外的功能,从服务于个人开始转向与服务学校、企业等。

疫情期间,很多学校开始支持在Discord开设学习小组,用于学生的日常课程同步、小组作业等,一些小型的初创企业也开始用Discord作为企业内部的办公工具。不久前,Discord还在内部开启了类似于Zoom的视频会议功能,开始从语音社交向视频社交延伸。

回看Discord走过的这6年,它诞生于 游戏 群体,却又超越了 游戏 群体。 它建立了一个不同于互联网上其他任何社交空间的新空间,不是群聊,不是论坛,也不是电话会议,却又囊括了它们所有的功能。 对于这些看似杂乱无章、相差甚远的业务,Discord似乎有一种魔力,让它们紧紧有条又相互补充。

“我感觉Discord是一个真正站在用户的角度去设计的软件,它让我在互联网社交这件事上,找到了一种久违的舒适感。”一位用户在苹果商店Discord的评价区中写道。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Golang

“解锁网络-的弱小性能构建社区-基于Discord-从-Discord-的成功中汲取教训 (解锁网络的软件)” 的相关文章

慢聊Golang协程池Ants实现原理 (音乐慢慢摇我俩慢慢聊)

慢聊Golang协程池Ants实现原理 (音乐慢慢摇我俩慢慢聊)

简介 协程是 Go Lang 中的轻量级线程实现,由 Go 运行时 (runtime) 管理。Go 程序会智能地将协程中的任务合理地分配给每个 CPU。创建一个协程的大小约为 2kb,非常节省机...

中的字符串-Golang-拥抱最佳通常-防止经常出现陷阱 (linux替换文件中的字符串)

中的字符串-Golang-拥抱最佳通常-防止经常出现陷阱 (linux替换文件中的字符串)

在这篇文章中,咱们将讨论Golang中的字符串,并检查一些不同的场景,以防止经常出现失误。让咱们深化讨论! 1.字符串能否可以为nil? 咱们曾经对Golang中的字符串有了基本的了...

使用-Golang-个库-进行自动化的-20 (使用goldwave软件编辑某音频文件)

使用-Golang-个库-进行自动化的-20 (使用goldwave软件编辑某音频文件)

简介 Golang(又名Go)是一种静态类型编译型编程语言,因其在并发编程、废品回收和代码可维护性方面的优势而备受推崇。它凭借卓越的性能、强大的并发支持和简洁的语法,已成为自动化任务的热门选...

优雅组织-Golang-项目结构的指南 (优雅van)

优雅组织-Golang-项目结构的指南 (优雅van)

Go语言社区在系统总结之前,由一些开发者总结了像 cmd 和 internal 这样的目录结构。随后,标准Go项目布局对此进行了进一步的概括,该项目已获得了超过4万个s...

深化探求-中的追加操作-APPEND函数及其外部上班原理来高效地裁减-了解如何经常使用-Golang-Go-容器 (深化要求)

深化探求-中的追加操作-APPEND函数及其外部上班原理来高效地裁减-了解如何经常使用-Golang-Go-容器 (深化要求)

经过实践示例探求Golang中的追加操作 简介 在Golang编程畛域,操作是一种多才多艺的工具,使开发人员能够灵活裁减切片、数组、文件和字符串。在这篇正式的博客文章中,咱们将踏上一段...

Bytes-Golang-包详解之-Bytes.Buffer-中 (byte数据类型)

Bytes-Golang-包详解之-Bytes.Buffer-中 (byte数据类型)

上篇文章具体解说了一次性性明码OTP相关的常识,基于时期的一次性性明码TOTP是OTP的一种成功方式。这种方法的优势是不依赖网络,因此即使在没有网络的状况下,用户也可以生成明码。所以这种方式被许多...

中备受争议的失误处置机制-Golang-深化讨论 (中备受争议的成语)

中备受争议的失误处置机制-Golang-深化讨论 (中备受争议的成语)

一、error是什么? 在C中,前往失误经过errno.h中的失误代码来示意,比如0代表Noerror,也就是没有失误;2代表Nosuchfileordirectory,也就是找不到指定门路...

经常使用-Golang-战略和最佳通常高效处置一百万个恳求 (经常使用硅胶倒模能起到锻炼的作用吗)

经常使用-Golang-战略和最佳通常高效处置一百万个恳求 (经常使用硅胶倒模能起到锻炼的作用吗)

有效处置一百万个恳求的战略与最佳通常 在一直开展的Web运行程序畛域,处置大规模恳求的才干是成功的关键要素。作为一名全栈开发人员,您或许相熟Golang的效率和性能。在本文中,咱们将深化讨...