从技术演变的角度看互联网后台架构
其实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实现的,相信会很有帮助。 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |