从技术演变的角度看互联网后台架构
其实DAG的形态重点强调的就是数据本身是immutable(不可修改),只能transform后成为新的数据进入下一环。这个思维其实可以贯穿到现代后台系统设计的每个环节,比如trakcing、analytics、数据表设计、microservice等等,但具体实施还是要case by case了。 无论如何,数据,数据的跟踪tracking,数据的流向,是现代后台系统的核心问题,只有data flow和data pipeline清晰了,整个后台架构才会清楚。 数据库是个非常复杂的领域,在下面对几个基本常用的概念做一些介绍。注意一点是graph database在这里没有提到,因为日常使用较少,相对来说facebook提出的GraphQL倒是个有趣的概念,但也只是在传统db上的一个概念封装。 上图是2018年12月初热门数据库的排名,我们可以看到关系数据库RDBMS和NOSQL数据库基本上平分秋色。而NOSQL中实际上又可以分为key-value storage(包括文档型)及column based DB. mysql这个没啥好讲,大概提一下就是。有趣的是曾经看到一篇文章是aws CTO谈的一些内容,其中印象深刻是:如果你的用户还不到100万,就别折腾了,无脑使用mysql吧) 在2015年之前的一个趋势是不少公司使用mysql作为数据存储,但是把indexing放在外部去做。这个思路最早似乎是friendster提出的,后来uber也模仿这种做法设计了自己的数据库schemaless。然而随着postgreSQL的普及(postgreSQL支持对json的索引),这种做法是否还有意义就值得商榷了。 nosql最早的使用就是key-value的查找,典型的就是redis。实际上后来的像mongo这些documentbased db也是类似的key value,只是它对document中的内容又做了一次index (inverted index),用空间换时间来提供查找数据,这也是cs不变的思维。 mongo/elasticsearch收到热捧主要是因为它们的schemaless属性,也就是不需要提前定义数据格式,只要是json就存,还都能根据每个field搜索,这非常方便程序员快速出demo。但是实际上数据量大之后还是要规范数据结构,定义需要indexing的field的。 这里提一个比较好玩的开源project nodebb, 这是个node.js开发的论坛系统。在我前几年看到这个的时候它其实只支持redis,然后当时因为一个项目把它改造了让他支持mysql。去年再看的时候发现它同时支持了redis/postres/mongo,如果对比一下同样的功能他如何在这三种db实现的,相信会很有帮助。 稍微谈谈列存储。常见mysql你在select的时候其实往往会把整行都读出来,再在其中挑那么一两个你需要的属性,非常浪费。而mongo这些文件型db,又不支持常见SQL。而列存储DB的好处就是快,不用把一行所有信息读出来,只是按列读取你需要的,对现在的大数据分析特别是OLAP(Online Analytical Processing)来说特别重要。然而据另外的说法,实际上像casssandra/hbase这些并不是真正的列存储,而只是借用了一些概念。这个我也没深入去了解,有兴趣的同学可以自己研究研究。 列存储的一个重要领域是时序数据库,物联网用得多。其特色是大量写入,只增不改(不修改数据),但是读的次数相对于很少(想想物联网的特点,随时有数据写入,但是你不会随时都在看你家小米电器的状态。。。) 注意说write/read是正交的。这意思是每次写入是一次一行,而读是按列,加上又不会修改数据,因此各自都能保持极快的速度 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |