goim

一对多直播系统开发,百万用户在线,直播弹幕系统是如何实现的?

为君一笑 提交于 2020-08-14 12:19:12
2020年因为受到疫情的影响,各种电商直播纷纷涌入大家的视野,很多商家都通过直播的方式来售卖自己的产品。直播弹幕是直播系统的核心功能之一。如何迅速作出一个有很好扩展性的弹幕系统?如何应对业务迅速发展?相信很多工程师/架构师都有自己的想法。哔哩哔哩作为国内首屈一指的弹幕视频网站,今天我们就一起来看看他们是如何做的。 一对多直播系统开发,重点是这些 高并发实时弹幕是一种互动的体验。对于互动来说,考虑最多的地方就是:高稳定性、高可用性以及低延迟这三个方面。 高稳定性,为了保证互动的实时性,所以要求连接状态稳定。 高可用性,相当于提供一种备用方案,比如,互动时如果一台机器挂了,此时必须保证可以和另外一台机器连接,这样就从侧面解决了用户连接不中断的问题。 对于低延迟,弹幕的延迟周期控制在 1 秒以内,响应是比较快的,所以可以满足互动的需求。 一对多直播系统开发,GOIM 系统的优化之路 一、内存优化 内存优化主要分为以下三个方面: 1.一个消息一定只有一块内存 使用 Job 聚合消息,Comet 指针引用。 2.一个用户的内存尽量放到栈上 内存创建在对应的用户 Goroutine(Go 程)中。 3.内存由自己控制 主要是针对 Comet 模块所做的优化,可以查看模块中各个分配内存的地方,使用内存池。 二、模块优化 1.消息分发一定是并行的并且互不干扰 要保证到每一个 Comet

bilibili技术总监毛剑:B站高可用架构实践

一个人想着一个人 提交于 2020-07-28 20:11:01
流量洪峰下要做好高服务质量的架构是一件具备挑战的事情,本文是B站技术总监毛剑老师在「云加社区沙龙online」的分享整理,详细阐述了从Google SRE的系统方法论以及实际业务的应对过程中出发,一些体系化的可用性设计。对我们了解系统的全貌、上下游的联防有更进一步的帮助。 点击视频,查看完整直播回放 一、负载均衡 负载均衡具体分成两个方向,一个是前端负载均衡,另一个是数据中心内部的负载均衡。 前端负载均衡方面,一般而言用户流量访问层面主要依据DNS,希望做到最小化用户请求延迟。将用户流量最优地分布在多个网络链路上、多个数据中心、多台服务器上,通过动态CDN的方案达到最小延迟。 以上图为例,用户流量会先流入BFE的前端接入层,第一层的BFE实际上起到一个路由的作用,尽可能选择跟接入节点比较近的一个机房,用来加速用户请求。然后通过API网关转发到下游的服务层,可能是内部的一些微服务或者业务的聚合层等,最终构成一个完整的流量模式。 基于此,前端服务器的负载均衡主要考虑几个逻辑: 第一,尽量选择最近节点; 第二,基于带宽策略调度选择API进入机房; 第三,基于可用服务容量平衡流量。 数据中心内部的负载均衡方面,理想情况下会像上图右边显示那样,最忙和最不忙的节点所消耗的CPU相差幅度较小。但如果负载均衡没做好,情况可能就像上图左边一样相差甚远。由此可能导致资源调度、编排的困难

Go - 项目收藏

痴心易碎 提交于 2020-02-16 03:46:52
1、谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 2、[知乎网] 有哪些值得学习的 Go 语言开源项目? 3、[知乎用户:hack stoic] 看过 awesome-go 项目, 汇总了很多 go 开源项目。 但是 awesome-go 收集了太全了, 而且每个项目没有描述。 因此我自己根据 go 语言中文社区提供的资料,还有互联网企业架构设计中的常见组件分类, 共精心挑选了100多个开源项目(项目不限于在github开源的项目), 分成以下十几个大类。 这个项目可以理解为互联网IT人打造的中文版 awesome-go。这个项目初衷是帮助到那些想学习和借鉴优秀golang开源项目, 和在互联网架构设计时期望快速寻找合适轮子的人。 项目地址: https:// github.com/hackstoic/go lang-open-source-projects -> 监控系统 - 容器技术 - PaaS工具 - 大数据 - 数据库技术 - 存储技术 - 分布式系统 - 消息系统 - 服务器管理 - 安全工具 - 网络工具 - Web工具 - Web框架 - 区块链技术 - 其它 4、[开源中国] 优秀的 Go 存储开源项目和库 下面推荐几款适合学习的项目: 1、cache2go: https:/