39-互联网架构模板:“存储层”技术
互联网的标准技术架构如图:
该篇主要了解存储层技术
SQL
SQL即指我们通常说的关系数据。之前很多人认为NOSQL可以完全替代SQL,但是这几年的试验发现,NOSQL不是NO SQL,而是NOT ONLY SQL,即NOSQL是SQL的补充。
所以,互联网行业必然依靠关系数据。由于ORACLE的昂贵,一般会使用开源数据库,如MySQL,PostgreSQL。优点是开源免费,缺点是性能比商业数据库差一点。随着业务的发展,性能要求越来越高,必然面对一个问题:将数据拆分成多个实例才能满足业务对性能的要求。
数据库拆分满足了性能的要求,但带来了复杂度:数据如何拆分、数据如何组合?这个问题解决起来并不容易,并且如果每个业务都去实现一遍,重复造轮子将导致投入浪费,效率降低,业务开发想快也快不起来。
所以一般当业务发展到一定阶段后,就会将这部分功能做成独立的中间件,例如百度的DBProxy,淘宝的TDDL。但这部分技术要求比较高,将分库分表做到自动化和平台化,不是一件简单的事,一般大公司才会自己做。对于中小型公司一般采用开源的方案:例如Mysql官方推荐的MYSQL ROUTER,360的atlas。
公司业务继续发展,SQL服务器越来越多,如果每一个业务都基于统一的数据库中间件独立部署自己的SQL集群,会导致新的复杂度问题:
- 数据库资源使用率不高,比较浪费。
- 各SQL集群分开独立维护,投入的维护成本越来越高。
因此实力雄厚的公司此时一般会在SQL集群上构建SQL的存储平台,以对业务透明的形式提供资源分配、数据备份、迁移、容灾、读写分离、分库分表等一系列服务,例如淘宝的UMP系统。
NOSQL
NOSQL在数据结构上与传统的SQL不一样。例如:Memcache的key-value结构、Redis的复杂结构、MongoDB的文档数据结构。另外,NoSQL都会把性能作为自己的一个卖点。NoSQL的这二个特点弥补了关系型数据库的不足,因此NoSQL的应用是基本要求。
由于NoSQL一般自己提供集群方案,因此在一开始使用的时候比较简单,不像SQL分库分表那么复杂。一般公司也不会在开始的时候就考虑NoSQL存储平台。但如果业务发展很快,节点非常的多,NoSQL存储平台就很有意义了,可以节省很多的成本。
所以,NoSQL发展到一定的时候,就会考虑构建NoSQL统一存储平台,统一存储平台主要实现以下几个功能:
- 资源动态按需分配:例如一台Memcache服务器,可以根据内存利用率,分配给多个业务。
- 资源自动化管理:例如新的业务只需要申请多少Memcache缓存空间即可,无需关注具体是哪些Memcache服务器为自己服务。
- 故障自动化管理:例如某台Memcache服务器宕机后,有另外的备份memcache服务器立刻接管缓存请求,不会导致丢失很多的缓存数据。
这个一般也只有大公司才会做。如果只有几十台NOSQL服务器,做存储平台收益不大,但如果有几千台NoSQL服务器,NoSQL存储平台就能够产生很大的收益。
小文件存储
除了关系型的业务数据,互联网业务还有很多用于展示的数据。例如淘宝的图片、新浪的微博等。这类数据的特点是:数据文件小、数据多、访问量大。
互联网行业基本每个业务都会有大量的小数据,如果每个业务都自己去考虑如何设计海量存储和海量访问,效率低,重复造轮子也会投入浪费,所以自然而然就要将小文件存储做成统一的和业务无关的平台。
和SQL和NOSQL不同的是:小文件存储不一定需要公司或者业务规模很大,基本上认为业务在起步阶段就可以考虑做小文件统一存储。在开源方案的基础上封装一个小文件存储平台并不是一件太难的事情。如:Hadoop、hbase作为小文件存储平台的底层平台,只需要将这些开源方案再包装一下基本上就可以使用了。
大文件存储
互联网行业的大文件主要分成二类:一类是业务上的大文件,如视频。另一类是海量的日志,如各种访问日志、操作日志、用户轨迹日志等。和小文件的特点相反,大文件的数量比较少,但是每个文件都很大。
大文件的存储可以使用开源的方案:如Hadoop、Hbase、Storm、Hive等。实力雄厚的公司会基于这些开源项目结合自己的业务特点,封装成大数据平台,如淘宝的云梯系统和腾讯的TDW系统。