本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(2)

Java快问快答小集锦002-分布式学习相关问题收集整理

发布于2021-05-29 20:27     阅读(686)     评论(0)     点赞(9)     收藏(4)


1.单体架构存在什么缺陷?

单体架构在最开始的时候可以满足较少互联网用户的需求,在单体架构中web服务器和数据库是部署在同一台服务器上面也可以满足用户需求.
1.1 但是随着用户数量的增长,tomcat服务器和数据库之间存在资源竞争问题,单机的性能能不能满足同时支撑tomcat服务器和数据库之间的资源需求,不能满足多用户访问,达不到高可用需求.
1.2 第二点,在单机上面,一旦我们的服务器除了问题,数据库的安全性就受到了挑战,不能满足高可用的要求.
1.3 第三点,计算机单机的计算能力有限,当我们的用户请求增多,这时候计算机单机的数据计算能力就不能满足计算需求.
以上三点就是单体架构存在的风险:单机容量瓶颈\单机的数据数据计算能力瓶颈\单机故障风险都不能保证我们服务的高并发下高可用的需求.

2.为什么要使用分布式架构(分布式架构的优点)

分布式:提高系统无故障时间,系统中多个模块在不同服务器上部署,即可以成为分布式系统,如tomcat和数据库分别部署在不同服务器上面,或者两个相同功能的tomcat分别部署在不同服务器上面.解决的问题

2.1 解决单机性能不足问题:存储能力增强
2.2 解决单机高性能:计算能力增强
2.3 保证服务的高可用:系统中部分节点失效时,其他节点能够继续接替它继续提供服务,则可以任务系统具有高可用性.保证系统的高可用性,可从下面几个9说起,如下图所示:
在这里插入图片描述
为了提高可用性,我们要么提高系统的无故障时间,也就是减少系统的故障恢复时间,这就需要排除故障的原因:
(1)无计划的系统故障:
系统级故障:包括主机\操作系统\中间件\数据库\网络\电源以及外围设备
自然灾害\认为破坏\供电问题
(2)有计划的日常任务
运维相关:数据库维护\应用维护\中间件维护\操作系统维护\网络维护等问题
升级相关:数据库\中间件\应用\操作系统\网络\硬件等升级
这些分布式的部署实际上就是为了保证系统的弹力射击,在我们的系统出现故障的时候,要有基本的应对策略,保证服务稳定性,减少系统的不可用时间.

3.为什么要使用缓存?

用缓存,主要有两个用途:高性能\高并发

高性能: 缩短对用户的响应时间,当有一个请求发过来,如果每一次都要在数据库中查询时候,查询的速度比较慢,长时间给不了用户反馈,这时候如果把查询的结果存放在缓存中,后面如果有用户请求数据时候,直接读取缓存中的数据就可以了

高并发: mysql是一个重的数据库,并不适合高并发,mysql单机支撑最多能够支撑2000QPS也很容易报警.

所以如果一个系统同时又多个请求,那么mysql单机绝对会死掉,这时候如果有缓存,就可以吧很多数据放在缓存里面.缓存的功能就是简单的key-value操作,单机支撑的并发量轻松一秒超过几万到几十万,可以轻松支撑高并发,单机承载并发量是mysql单机的几十倍.

注意:缓存是走内存的,内存天然就支撑高并发.

4.使用缓存会带来什么样的问题?

4.1 缓存一致性问题
当数据库时效性要求很高的时候,需要保证缓存中的数据与数据库中的保持一致,而且需要保证节点和副本中的数据也要保持一致,不能出现差异现象.
这就比较依赖缓存的过期和更新策略,一般会在数据发生更变的时候,主动更新缓存中的数据或者移除对应的缓存.
在这里插入图片描述4.2 缓存击穿问题

对于一些设置了过期时间的key,可能这些key会在某些时间点被高并发访问,是一种非常"热点"的数据.这个时候,需要考虑缓存被"击穿"的问题,和缓存雪崩的问题,这里针对某一key缓存,而缓存雪崩则是很多key.
在这里插入图片描述

4.3 缓存雪崩问题(待整理)



所属网站分类: 技术文章 > 博客

作者:我是一个射手

链接:http://www.javaheidong.com/blog/article/207185/9c8caf5f6162753bffbf/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

9 0
收藏该文
已收藏

评论内容:(最多支持255个字符)