非常幸运能参加亚马逊云科技带来的系列学习。
李君老师的课让我收益颇深!
首先老师讲一下亚马逊的noSQL概况,接着讲了NoSQL数据建模的基础知识,第三项是Amazon DynameDB在游戏中的常见用例,第四项是使用Amazon DynameDB对游戏玩家数据建模。
亚马逊的NoSQL之旅要从2004年亚马逊官网在零售高峰期出现数小时中断开始谈起,当时是因为超过了后端关系型数据库的能力,工程师团队通过反向工作法,退一步思考,考虑新的方法,通过对数据调用的梳理,发现70%的调用是对单行进行操作20%的调用,返回单个表中的行的集合,通过这样的梳理,我们发现需要一个高性能的key value store来满足大部分的数据检索需求,所以2007年基于这样的研究发现,以及工程实践发布了论文,是一个如何构建高性能系统的一个分布式数据存储论文,而这个论文也启发了其他的NoSQL项Ga目。2012年DynameoDB正式发布,2016年DynameDB Forrester Wave 的Garner MQ中位居领导者象限。而今天,Tier 0级服务助力大多数亚马逊服务。
对于这些互联网,规模级的应用程序,他们有下面的一些特征,就是规模高并发、用户量非常大、数值量非常多,而且需要全球部署,而对性能要求又非常的高,需要微秒到毫秒级别,那每秒有数百万的并发请求,对于接入端,可能是移动端物联网设备端,而这上面有大幅度的这个业务的规模,会随着业务周期的变化而波动,而且我们往往需要按实际的使用量来付费,那我们为什么要选择NoSQL,那实际上对于SQL诞生当时的存储非常昂贵,所以说我们NoSQL存储已经比较便宜,而我们需要为计算而优化,就是要满足你的刚才说到的要微秒级甚至毫秒级的性能响应,而对SQL里面对于数据的关系,它有严格的Schema的定义,而NoSQL我们希望是反范式的,我们是松散结构的,这样可以满足我们快速灵活的数据访问检索需求,而且我们NoSQL希望做数据的横向扩展,对于大规模高并发单击没有办法承受,我们需要一个舰队来完成工作,所以说NoSQL是为大规模的oltp而构建的。
对于亚马逊等那么DB就是为了满足现代互联网应用大规模的需求,提供了极致弹性和性能。它是自动伸缩的吞吐量,因为我们的业务负载是随着时间或者随着用户量的变化而变化的,那我们看没有自动扩展的情况下,我们就需要按照业务的峰值做超配,就存在大量的浪费,而我们有自动扩展就可以让后端资源随着请求的需求的变化而变化。
那我们对于真正的按需使用的这样的方式就可以做到,从零开始,按业务请求按照调用然后来去产生费用,没有请求就没有产生费用,真正地消除了超配,或者配置不足需要做的这种权衡的考虑,而随着流量的上升和下降,立即适用我们的工作负担,那这是DynameDB后端的自动扩展。
DynameDB可以支持任意规模下的高性能,我们可以看到这是关于表的监控图,那在左边当你的请求量每秒百万个请求的时候,他的这个请求的方差是在毫秒级别的方差,我们可以看到它都是在监控图上是不超过4.5毫秒,这样呢平均响应保持一致性的低延迟。
在这里插入图片描述
在这里插入图片描述
我们再来看一下弹性以及成为新常态,这是AWS的一个用户,他在做超级碗,也就是美国的橄榄球大赛,Super Bow的晚会当天在做全球直播的时候,后端支撑DynameDB表的监控图,那在这儿我们可以看到他的请求在峰值的时候有一个斗增,这样的峰值非常高,而这样的斗增的峰值还支持到这种斗增的流量满足到业务损失的流量。
同时,他还支持全局表–多区域复制。构建高性能、全球分布的应用程序,低延迟读取和写入本地表,易于设置,无需重写应用程序。
在这里插入图片描述
实际上这是一张NoSQL的表,对于每一行我们都是一个条目,那对于列我们都叫做一个属性,对于第1列是非常重要的叫分区键,对于第2列是可选的排序键,你可以选择有也可以选择没有,那提供了一对多的查询的能力,在这儿我们可以看相同分区键,可以基于排序键做大于等于小于之类的检索数据检索,那这就是它的一个数据的组合,基本的最基本的表结构。分区键唯一标识了一条记录。
我们用这些数据结构在游戏场景中通常用来存储游戏的状态,库存和玩家的数据,还有玩家的历史数据,还有做一些欺诈检测,预防跟踪机器人登录,尝试这样的场景,还有典型的做游戏排行榜。
直播中还提到的几款数据库产品链接:每个都有免费的使用额度

Amazon Aurora:https://aws.amazon.com/cn/rds/aurora/
Amazon Dynamo DB:https://aws.amazon.com/cn/dynamodb/
Amazon ElastiCache:https://aws.amazon.com/cn/elasticache/
Amazon MemoryDB:https://aws.amazon.com/cn/memorydb/
Amazon DocumentDB:https://aws.amazon.com/cn/documentdb/

李君老师提到的动手实验链接:
使用 Amazon DynamoDB 对游戏玩家数据建模:
https://aws.amazon.com/cn/getting-started/hands-on/data-modeling-gaming-app-with-dynamodb/

有兴趣的同学一起实验啦~

更多推荐