本文主要是介绍互联网架构(高性能 高可用 高可扩展) 之“存储层”技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
针对互联网架构模板,先来聊聊互联网架构模板的“存储层”技术。
一、SQL
SQL即我们通常所说的关系数据。互联网行业也必须依赖关系数据,考虑到Oracle太贵,还需要专业维护,一般情况下互联网行业都是用MySQL、PostgreSQL这类开源数据库。这类数据库的特点是开源免费,拿来就用;但缺点是性能相比商业数据库要差一些。随着互联 网业务的发展,性能要求越来越高,必然要面对一个问题:将数据拆分到多个数据库实例才能满足业务的性能需求(其实 Oracle也一样,只是时间早晚的问题)。
数据库拆分满足了性能的要求,但带来了复杂度的问题:数据如何拆分、数据如何组合?这个复杂度的问题解决起来并不容 易,如果每个业务都去实现一遍,重复造轮子将导致投入浪费、效率降低,业务开发想快都快不起来。
所以互联网公司流行的做法是业务发展到一定阶段后,就会将这部分功能独立成中间件,例如百度的DBProxy、淘宝的 TDDL。不过这部分的技术要求很高,将分库分表做到自动化和平台化,不是一件容易的事情,所以一般是规模很大的公司才 会自己做。中型公司建议使用开源方案,例如MySQL官方推荐的MySQL Router、360开源的数据库中间件Atlas。
假如公司业务继续发展,规模继续扩大,SQL服务器越来越多,如果每个业务都基于统一的数据库中间件独立部署自己的SQL 集群,就会导致新的复杂度问题,具体表现在:
- 数据库资源使用率不高,比较浪费。
- 各SQL集群分开维护,投入的维护成本越来越高。
因此,实力雄厚的大公司此时一般都会在SQL集群上构建SQL存储平台,以对业务透明的形式提供资源分配、数据备份、迁 移、容灾、读写分离、分库分表等一系列服务,例如淘宝的UMP(Unifified MySQL Platform)系统。
二、NoSQL
确切的理解应该是 Not only SQL,是SQL的补充
首先NoSQL在数据结构上与传统的SQL的不同,例如典型的Memcache的key-value结构、Redis的复杂数据结构、MongoDB 的文档数据结构;其次,NoSQL无一例外地都会将性能作为的一大卖点。NoSQL的这两个特点很好地弥补了关系数据库 的不足,因此在互联网行业NoSQL的应用基本上是基础要求。
由于NoSQL方案一般自己本身就提供集群的功能,例如Memcache的一致性Hash集群、Redis 3.0的集群,因此NoSQL在刚开 始应用时很方便,不像SQL分库分表那么复杂。一般公司也不会在开始时就考虑将NoSQL包装成存储平台,但如果公司发展 很快,例如Memcache的节点有上千甚至几千时,NoSQL存储平台就很有意义了。首先是存储平台通过集中管理能够大大提 升运维效率;其次是存储平台可以大大提升资源利用效率,2000台机器,如果利用率能提升10%,就可以减少200台机器,一年上百万元就节省出来了。
所以,NoSQL发展到一定规模后,通常都会在NoSQL集群的基础之上再实现统一存储平台,统一存储平台主要实现这几个功能:
- 资源动态按需动态分配:例如同⼀台Memcache服务器,可以根据内存利⽤率,分配给多个业务使用。
- 资源⾃动化管理:例如新业务只需要申请多少Memcache缓存空间就可以了,无需关注具体是哪些Memcache服务器在为自己提供服务。
- 故障自动化处理:例如某台Memcache服务器挂掉后,有另外一台备份Memcache服务器能立刻接管缓存请求,不会导致丢失很多缓存数据
当然要发展到这个阶段,一般也是大公司才会这么做,简单来说就是如果只有几十台NoSQL服务器,做存储平台收益不大;
三、小文件存储

四、大文件存储

这篇关于互联网架构(高性能 高可用 高可扩展) 之“存储层”技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!