业务系统数据库设计经验总结-实时记录与历史记录

Posted 长江同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了业务系统数据库设计经验总结-实时记录与历史记录相关的知识,希望对你有一定的参考价值。

考虑如下表结构:
table: device
columns: id, create_time, user_id
这是一张设备表,设备是每一行的id都唯一对应一个用户user_id,而这个user_id是会随着系统的变化而变化的。

------------------------------------------------------------------------------

这种场景在我们设计系统时是很常见的,一般有可能如上所示,是一个固定内容的字段对应其它随时会发生变化的其它字段。这里其实有两种设计方法,一种是,这一张表里,id唯一对应一个设备,user_id变化了就更新(如果需要了解之前存过哪些user_id,那就单独再存到历史记录表中);另一种是,这张表的id就对应关系,而不是具体的设备,当user_id+mac发生了变化,那么insert一对新的user_id+mac,之前的数据不动。

------------------------------------------------------------------------------

对于后一种,只创建一张表,但如果这里面的内容频繁变化,那么这张表的数据量将会呈指数级增加,对于频繁修改和查询,这种设计会导致数据量增大或者变化频次增高后系统无法承受的查询延迟。只有当这张表的内容在整个系统运行期间不变或者极少变化时可以考虑采用这种一张表的做法。更多情况下,我们适宜采用前一种模式,即变化表/最新状态表内容存到一起,方便应对快速的增删改查,而历史状态记录到另一张表中,历史数据表的存放与查询其实不如前者那么重要,如果数据量较大,我们可以采用异步、或者进一步将表拆分等手段进行处理。

游戏开发经验总结:分布式架构数据库与进程设计

如果把游戏看成一辆赛车,那么,游戏开发在其中扮演着至关重要的发动机角色,控制着玩家所感知到的剧情、关卡、实时社交沟通、版本更新、兼容和性能等问题;而运维则充当了决定赛车生死的安全刹车,不管是端游、页游还是手游,能否扛住卡顿、宕机与 DDoS 攻击等都离不开运维的支持。但开发者往往在突破核心玩法、保障运维质量、抵御恶意攻击等方面,会遇到诸多挑战。

腾讯云,基于自身业务与海量用户,在如何打造一款爆款游戏上摸索出了一系列完整的解决方案。1 月 12 日腾讯云联合 InfoQ 举办的游戏主题沙龙,来自腾讯云、腾讯游戏和三七互娱的专家们,就游戏的云端开发与运维展开了深入探讨,本文整理了部分精彩内容,感兴趣的读者可以点击文末【阅读原文】下载讲师完整 PDF。

提供云端技术支持 腾讯云游戏解决方案概述

来自腾讯云的腾讯游戏云解决方案架构副总监王璋,从游戏业务云上最佳实践和案例入手,深度剖析了游戏开发面临的技术挑战,以及腾讯云在游戏行业提供的各种解决方案,与一众参会者探讨如何寻找适合自身业务的游戏云方案。

游戏开发面临的技术挑战?

腾讯云游戏行业技术解决方案
网络加速

玩家到服务端的加速,尤其是跨国加速更多的还是由玩家去购买迅游、网易等提供的加速器产品,为降低玩家体验游戏的门槛,提升玩家的体验,腾讯云提供两套方案来实现服务端解决跨域长距离传输网络质量问题。

游戏开发经验总结:分布式架构、数据库与进程设计游戏开发经验总结:分布式架构、数据库与进程设计

游戏开发经验总结:分布式架构、数据库与进程设计

安全防护

除了加速解决方案,腾讯云在网络攻击的安全防护上也提供了多套方案来对抗不同特点的攻击,包括超大流量攻击对抗方案、精细化攻击对抗方案、棋牌游戏攻击对抗方案等等。以超大流量攻击对抗为例,业务遭受攻击时长占业务在线时长其实不大,所以业务的常态服务可以通过体验较好的 BGP 网络提供,并且 BGP 可以提供百 G 规模攻击流量的清洗,超出百 G 的攻击 BGP 的清洗成本会直线上升,因此会通过腾讯云提供的中间域名将流量自动调度到三网出口进行超大攻击流量的清洗。

游戏开发经验总结:分布式架构、数据库与进程设计

其他场景的应用探索

除了上述解决方案,腾讯云针对游戏业务的痛点,还在尝试其他解决方案的探索,比如全球支付、游戏智能客服、游戏营销安全等。以游戏智能客服为例,玩家在游戏中遇到的问题大多是相似的,通过对知识库数据的分析,实现在线自动应答,依靠腾讯海量的用户标签数据,和优秀的算法,训练出真正智能的客服,游戏都可以通过智能客服解答玩家的疑问,提升玩家问题的处理效率和游戏本身的体验。

腾讯游戏海量服务架构构建之路

网络游戏和其他互联网服务一样,需要面对承载海量服务的压力,同时还需要满足游戏所要求的低延迟、高业务逻辑复杂度特性。来自腾讯游戏研发部资深架构师韩伟,基于腾讯游戏的海量架构构建经验,为大家分享了游戏海量服务的架构特征、核心模块以及弹性能力的实现手段等技术内容,为游戏开发者在面对海量用户时提供了一些借鉴思路。

分布式进程框架构建

现在的腾讯游戏,包括业界其他很多游戏,如魔兽世界等大多使用的是跨服务器,所以现在游戏服务器端的趋势是全面的分布式系统。相较于古老的游戏架构,分布式系统,具有方便部署到不同机器、更精细的负载均衡单位以及便于监控和问题定位等优势,更加符合闲杂用户对游戏系统的体验要求。

下图是腾讯云的分布式集群架构图,主要包括接入进程和逻辑进程。左边是客户端,腾讯有一些接入进程,主要是处理网络连接,把这些网络连接的数据做初步处理之后,再放到逻辑进程进行分析。有可能这个逻辑进程并不是自己的进程,因此可能还会转发到别的逻辑请求,最后给客户端回应,也有一种情况是游戏需要多个回应,即一对多的请求,这个时候整个过程需要由多个进程同时满足,不同的客户端可能连接在不同的进程上面。

游戏开发经验总结:分布式架构、数据库与进程设计

不管是接入进程还是逻辑进程,都需要统一的集群中心来管理,集群中心是所有集群管理的最核心的节点,用来管理多进程的模型。可以看到,如果将整个集群看成一个单位的话,每一个进程其实都可以方便的部署到不同的机器上去,通过集群中心,进程之间也可以知道对方的信息、收发数据,然后合理的将进程分布到不同的机器上,提高整个集群的容量。

那么,腾讯云是如何构建这样一个分布式的集群系统的?韩伟提到了两个关键点:分布式通信和缓存系统。

游戏开发经验总结:分布式架构、数据库与进程设计

分布式存储:分布式存储的核心要点为持久化和缓存两大块。接入代理在接到请求后,会带上一个数据片,包含数据来源等相关信息,用以做数据的追踪和留存;在缓存方面,逻辑进程负责承载玩家所要读写的数据缓存,按照腾讯游戏运营标准,玩家丢失数据的时间不能超过十分钟,因此,腾讯云会做一个定时自动回写的代码,每十分钟自动回写一次,防止数据丢失。

游戏开发经验总结:分布式架构、数据库与进程设计

这套系统每个进程之间的链接看起来比较复杂,但是实际上这个复杂性被一套通用的分布式通信消息队列所接管,开发者只需要了解这个集群里面有什么样的服务,并不需要自己管理这个复杂性进程,因此,这一整套系统的开发和维护上并不困难。

海量服务器运维实践

那么,这套分布式系统是如何做运维的呢?首先腾讯云会从部署角度搭建一个云服务平台,做整个集群的进程部署、进程监管等工作这个平台软件会把所有的功能划分成一个个集群,这个里面的节点数量非常多;因此,腾讯云也配套搭建了一套计算能力伸缩平台,根据需求进行自动的扩容和缩容的操作;对于服务接口的定义,系统有服务的绑定、服务的发现才能做服务对接,所以在分布式开发框架之外,也会配置服务管理系统;最后是基础运营服务平台,包含一些非功能性的能力,比如可以输出标准的日志,输入标准的监控指标等,这个平台主要是支持一些运维的操作。

游戏开发经验总结:分布式架构、数据库与进程设计

韩伟最后向现场观众透露道,腾讯研发部已经将部分跟游戏逻辑关系不是特别紧密的服务都做成了云平台,比如储存方面,王者荣耀采用这套云平台的储存的同时,全民突击也会用这个存储系统,这样能够极大的提升运营效率以及运维效率。

“吃鸡”类游戏架构分析

今年从 3 月份开始吃鸡游戏一直占据游戏话题排行榜首位,随后,国内的厂商也开始进行这类游戏的开发,据统计,吃鸡“”类游戏的全球销量超过 3000 万份,同时在线超过 240 万,连续 43 周蝉联 Steam 周销量榜冠军。那么,这样一个火爆游戏的背后,其游戏架构是怎样的呢?并针对“吃鸡”类游戏在反外挂、加速、安全等方面的需求,有什么样的解决方案?来自腾讯游戏云资深架构师贺广平,就“吃鸡”类游戏架构和相关解决方案做了详尽的分析。

“吃鸡”类游戏的架构分析

下图为一个“吃鸡”类游戏完整的架构图,这里,lobby 和 DS 服务架构用作全球部署;安全方面有 DDOS 防护和 TP 反外挂方案,其中,TSS(tencent security system)  是腾讯的反外挂系统;XMMP 是即时通讯系统,负责信息的传递;TC 为腾讯充值系统 -IDIP。

游戏开发经验总结:分布式架构、数据库与进程设计

整个系统看起来比较复杂,但开发者实际上只要关注两块,左边的游戏登陆模块和右边游戏服相关模块。

相关性能解决方案介绍

整体来看,“吃鸡” 类游戏是多人同时在先游戏,兼之全球同服的特点,整个架构有四大要求和特点:高并发、低延迟、反外挂以及游戏语音,腾讯云在这四方面也提供了相应的解决方案。

高并发解决方案:吃鸡” 类游戏的特点是同一地图会有 100 人以上同场竞技,需要服务端有高并发包量的处理能力和大流量吞吐能力。腾讯云采用的解决方案是高主频 +SSD 云盘 + 多队列 + 智能网卡的方式,提供高 IO 云服务器以及高可用云数据库,应对激增、高并发、海量访问需求。

游戏开发经验总结:分布式架构、数据库与进程设计

低延迟解决方案:多人实时竞技,需要保证每个玩家的网络延时和稳定性要求,腾讯云在全球共用 Lobby,统一管理和调度全球各地区服务器,如下图,在网络堵塞的情况下,A 地域玩家可以通过加速代理直接访问 C 地域 lobby 服务。

游戏开发经验总结:分布式架构、数据库与进程设计

反外挂解决方案:外挂已经严重影响到游戏的平衡,尤其在“吃鸡”类游戏中更加泛滥,一套强大反外挂系统保证游戏稳定运营,TP 反外挂系统是腾讯自主研发的一套安全系统,通过增加客户端代码加密、外挂特征扫描、动态代码验证等措施,实时保障游戏不受外挂、木马侵害。其系统框架如下图所示:

游戏开发经验总结:分布式架构、数据库与进程设计

游戏语音解决方案:竞技类游戏需要通过语音来指挥组内其他同伴的战斗,陌生玩家可以语音直接互动,也通过声音判断其他玩家的位置。下图为腾讯云的 TMG 游戏语音框架图,其 3D 音效技术,利用“头部关联传输函数”(HRTF 算法),对双耳之间的时间差异和频谱差异进行建模,形成有声源方位感的声音。同时使用采样混响方式填补 HRIR 缺失的环境反射声,从而构建完整的声场模型。比如在一个小房间里,不仅可以听到两个人之间的对话,还可以听到声音从墙壁中反射的效果,增加沉浸感。

游戏开发经验总结:分布式架构、数据库与进程设计

目前,基于游戏开发引擎(例如 Unreal、Unity)实现的 3D 音效在游戏中的应用已经非常普遍了,通过游戏引擎模拟重现空间中声源方位,例如 CS 中射击的枪声、中弹时的音效、附近敌人轻微的脚步声,可以显著提高游戏的沉浸感,造就身临其境的游戏体验。

三七互娱游戏上云的现状与未来

三七互娱开发和运营了多款成功的游戏,从《永恒纪元》到《大天使之剑》等,在游戏开发和运维领域有着丰富的经验和心得,三七互娱运维总监龚宏绩,从三七互娱实际业务情况出发,分享了对游戏现状及未来的一些看法和思考。

龚宏绩认为,未来互联网企业只有两种存在方式:大数据和安全,而云是大数据和安全的完美结合体,也可能当下甚至未来很长一段时间唯一存在的形态。传统游戏企业在做开发和运维的时候,往往会面临区域性或者跨区域网络构建与管理、全面的系统和业务监控告警、安全事件甄别处理、大量日志收集分析处理等问题,而云,恰好能帮助解决这些事情。

游戏开发经验总结:分布式架构、数据库与进程设计

云计算包含网络物理的 IaSS 基础设施即服务、系统容器的应用服务的 PaSS 平台即服务,在产品的自动扩容、虚拟化和数据高度集成等方面提供了一套完整的解决方案。在运维方面,传统互联网企业的运维可以分为三个阶段:标准化、自动化和服务化。国内的大多数企业,基本上分都处于前面的标准化和自动化两个阶段,而国内的一些云服务供应商如腾讯云、阿里云等,已经走到了服务化阶段,这些企业基于自身业务的同时,也开发了一套比较成熟的产品做成服务。

现场,龚宏绩也表示,现阶段企业上云并非完美无缺,包括三七互娱在内,大多数的游戏企业在公有云成本的管理、以及用户数据安全保障等方面都遇到了比较大的挑战,这也是现今云厂商一直在需求解决之道的方向,也将是未来云领域的技术趋势之一。

演讲最后,对龚宏绩对云技术的发展给出自己的思考:不管是大数据还是安全,从商业的角度来说,未来的技术和产品发展趋势必然是一个用户为中心的世界、一个数据驱动产品的世界、一个生态协同的世界,这是无可置疑的。

直播 + 游戏  腾讯云线上知识竞技方案详解

最近一段时间,“直播答题”已席卷互联网。王思聪力推《冲顶大会》、周鸿祎的花椒直播上线《百万作战》、今日头条 & 西瓜视频推出《百万英雄》、映客在线答题《芝士超人》、一直播的《黄金十秒》……仿佛一夕之间,众多互联网直播版《开心辞典》冒了出来。在游戏行业竞争如此激烈的背景下,知识为何能竞技异军突起,成为直播行业又一风口。来自腾讯云 P2P 直播解决方案负责崔立鹏,分享了“冲顶大会”背后的商业逻辑和技术实现。

冲顶大会背后的商业逻辑

冲顶大会的规则非常简单,用户参与直播答题,留在最后的用户可以角逐当期奖金。这些直播答题的题目范围涉及很广,每次活动共 12 道题,规则 10 秒中之内未答题和答错题都将被淘汰。

那么,这样一款直播竞技游戏为何如此快速火爆?崔立鹏从拉新促活、 广告分成、以及互联网直播内容升级三个角度给与解答。游戏商可以通过极低的成本获取大量的用户数据和用户画像;其次,问题的设置面非常广泛,涉及天文地理历史科学娱乐影视音乐诗歌礼仪等,游戏商极易通过提问的形式为广告方“悄悄”植入广告;最后,是互联网直播的升级,过往大多直播是以主播为主导,用户通过留言互动,而这类知识竞技直播,更多的以用户为主角,极大的提高用户参与度。

崔立鹏表示,冲顶大会只是直播 + 游戏的一个小小起步,接下来,将有更多类似的游戏以直播的方式,进行转型升级,带来新一波的玩法。

直播竞技的技术痛点和解决方案

之前说到,冲顶大会是多人同时在线游戏,同时,在题目显示 10S 之内,用户必须给出问题的答案,因为,这类竞技节目的最大痛点是高并发和直播延迟。试想在网络卡顿时,主播抛出问题后,而其他地域的终端用户没有及时同步到信息,那么,他极有可能因为网络问题而被 Pass 掉,这对用户来说是一个致命的体验打击。

腾讯云基于上述问题提供了业内首家线上竞技的完整解决方案,如下图所示,出题方,主持人在演播室,将信息通过 IM 系统推到腾讯云平台,加上腾讯云自己的播放器就实现播放,在直播这方面一个链条已经形成了;同时,在导播台,有一个简单的答题后台,后台提前录制好了题目和单,放一个屏幕可以看到这个题目的,主持人说请听题,导播在 SDK 通知时间匹配后显示题目,然后通过腾讯云消息通道向全网下发。

题目虽然下发了,但其实不能排除题目和视频之间是很精准同步的,这方面,腾讯云做了比较精准的时间同步,即在流处理过程中加一个 timestamp,现场发题的时候也加一个标准时间,这两个时间设置同步状态,随后在播放时,将视频的音频和视频时间解析出来,这样能够实现比较好的同步。

以上是关于业务系统数据库设计经验总结-实时记录与历史记录的主要内容,如果未能解决你的问题,请参考以下文章

工作经验:Java 系统记录调用日志,并且记录错误堆栈

数据仓库与元数据

基于面部识别的日志系统的设计与实现

项目实战——高拓展的实时聊天系统

项目实战——高拓展的实时聊天系统

IM系统中聊天记录模块的设计与实现