当前位置:   article > 正文

一起学习Spring Cloud五花八门的分布式组件_分布式组件有哪些

分布式组件有哪些

分布式架构的演进

在软件行业,一个应用服务随着功能越来越复杂,用户量越来越大,尤其是互联网行业流量爆发式的增长,导致我们需要不断的重构应用的结构来支撑庞大的用户量,最终从一个简单的系统主键演变成了一个非常复杂的可以支撑高并发的高可用的分布式架构,但是一个系统再复杂也是不断演变来的,所以从另一方面来说,其实是业务(问题)推动了技术的发展。

传统的单体应用

在早期,我们开发的都是单体应用,也就是一个系统所有的模块都在一个服务上:

这种传统的应用开发和运维都非常简单,随着用户量的增加,我们发现应用程序的压力越来越大,于是我们会选择对应用进行集群部署:

当然因为选择了集群,我们就需要考虑服务分发的问题,所以需要有负载均衡服务器,比如我们最常用的 nginx,还有 lvs,HaProxy 等,硬件层面也可以选择 F5 来实现负载均衡等等。

当然,在使用了集群之后,我们还需要考虑 session 共享的问题,所以相比较单机架构会稍微复杂一点点,那么到这里我们应用进行了扩展了,这时候发现数据库又到瓶颈了,所以数据库又需要进行扩展。

数据库的扩展可以有两种主流方式:

读写分离

通过读写分离以及在某些场景用分布式存储系统替换关系型数据库的方式,能够降低主库的压力,解决数据存储方面的问题,不过随着业务的发展,主库依然会遇到瓶颈。

分库分表

当采用读写分离之后,如果再次遇到瓶颈,那么就可以采用垂直拆分的方式来实现,垂直拆分的意思是把数据库中不同的业务数据拆分到不同的数据库中。但是这样有些热门模块依然迟早会遇到瓶颈,于是可以更进一步采用水平拆分,水平拆分就是把同一个表的数据拆分到不同的数据库中。

垂直拆分还比较容易处理,毕竟同一个模块的数据还是在一起,水平拆分就会比较复杂了,比如说用户表拆成了两张,存在不同的数据库中,那么存的时候到底该存的哪个库,取的时候又该到哪个库去查询,所以水平拆分需要考虑以下问题:

插入和查询的路由问题,需要根据某一个条件来决定当前数据应该分到哪个库。

主键的处理,主键不能采用自增主键的形式,因为不同的库采用自增主键会有冲突。

如果某些查询需要到两个库去查询,会比较难处理。

数据库的拆分可以使用当前比较流行的 Shardi

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/523942
推荐阅读
相关标签
  

闽ICP备14008679号