3、当今的企业架构分析
3、分库分表+水平拆分(MySQL集群)
因为一个数据库装不下了,需要分库分表,读写分离,主从复制,主节点M与从节点s组成了一个数据库的集群,组成了一个小的单元,前端通过缓存连接到集群上,此时的后端架构越来越大,后端安稳了前端运行就非常方便,比如查询一个用户信息,一名用户查询网站的一个信息,需要到数据库查询,首先回到缓存中去看是否有这条数据,缓存中没有就到后面的数据库集群中查询,在下面的实例中,有三个数据库集群,各放三分之一的数据,通过一定的机制就能让用户查询到对应数据。如此以来就能提高效率。
技术和业务在发展的同时,对人的要求也越来越高!
数据库的本质主要就在于读和写,计算机发展到现在始终都在解决这两个问题
早期的MySQL使用的是MyISAM引擎,现在使用的是innodb引擎,MyISAM引擎使用的是表锁,也就是查询一条数据把整个数据表都锁住了,如此以来就十分的影响效率,高并发下就会出现严重的锁问题,于是就开始转战innodb引擎,这个引擎使用的是行锁,也就是每次查询就锁这一行。行锁和表锁问题解决了写的问题
通过换引擎的方式是进行了物理治疗,我们也可以做一些精神治疗,比如做一些主从复制,然后再做一些分库分表来解决一些写的压力。比如我们合计数据表可以把一个user表按照不同的字段进行拆分,包括数据库,之前的一个数据库要管理很多表,发展到现在已经把不同的业务拆分,比如订单业务,用户业务、支付业务等,每一个不同的业务使用单独的数据库进行管理,到后来又使用了微服务。
也就是最开始分库分表解决读的问题,读的问题解决之后再读写分离解决写的问题。
中间MySQL还推出了表分区,但并没有很多人使用。后来MySQL有了集群,很好的满足了当时的大部分需求,发展到现在,数据已经不再像之前那样单一了
4、现在的时代
现在的时代被称之为技术爆炸的时代,纵观世界上下五千年,真正的技术在之前发展的是非常缓慢的,而从电发明以来,整个技术都在加速演进,从2010年到现在才是真正的技术爆炸的年代,比如说定位(定位,也是一种数据)、音乐、热榜,这些数据都是一些**实时更新**的数据,这些数据很显然MySQL的数据库集群也无法满足。也就是MySQL为代表的关系型数据库无法满足这样的需求。因为数据量很大,而且变化很快。
于是乎出现了一些新型的数据库,这些数据库专门用来存放一些定位信息、图片信息等,比如图型数据库,JSON数据库如BSON,比如微信中的热点数据通过Redis后,用一个JSON字符串就能保存,一篇文章的浏览量,有些文章爆款10万浏览量,这个浏览量的更新是如何做到的呢?难道直接写到MySQL中么?其实他就是先把这个浏览量放在缓存中,过一段时间一个小时或者两个小时再持久化一下,保证效率和安全。否则全国人刷个微信就把腾讯宕机了。
MySQL有人用它来存储一些比较大的文件,比如一篇博客有几十万字,包括一些图片,这样的话,数据库表很大,此时如果作查询效率就比较低,对于这样的情况我们应该把非结构化的数据剥离出去,比如可以放在一个文件数据库等专业管理的数据库,也就是用一种数据库来专门处理这些数据,MySQL的压力就非常小了。
于是人们就开始研究如何处理这些问题。因为这些问题使用关系型数据库已经无法解决了。大数据的IO压力下,不断地读取,这种情况下,数据库的表的结构是不会改变的,比如现在又一亿条数据,随便的添加一列都是及其卡顿的。
目前一个基本的互联网项目
在现在的项目中,广大的用户是不可能直接访问我们的MySQL数据库的,用户最先访问的一定是企业的防火墙,或者路由网关,或者负载均衡,经过负载均衡访问主机和备机,现实中,负载均衡也不可能是单机,通过负载均衡访问服务器集群,集群中的每个网站服务器又有对应的MySQL实例,这里的后台数据库也只是一些关系型数据库,除了以上这些服务器之外还会有一些独立的服务器,比如做一些缓存服务器、移动信息服务器用于发送短信、Hadoop集群,实时通信服务器比如客服在线接待、流媒体服务器用于存放播放视频、图片服务器、文件服务器(现在的文件服务器大部分都用的阿里云的oss)、群发服务器
为什么要用Nosql
比如一些社交网络的用户的个人信息,这些信息都是上千万条甚至上亿条数据,地理位置、用户自己产生的数据,用户日志等爆发式增长,此时就无法使用关系型数据库来解决了,这个时候就需要使用Nosql数据库了,Nosql数据库可以很好的处理以上的情况。