发布于2021-05-29 20:27 阅读(668) 评论(0) 点赞(9) 收藏(4)
单体架构在最开始的时候可以满足较少互联网用户的需求,在单体架构中web服务器和数据库是部署在同一台服务器上面也可以满足用户需求.
1.1 但是随着用户数量的增长,tomcat服务器和数据库之间存在资源竞争问题,单机的性能能不能满足同时支撑tomcat服务器和数据库之间的资源需求,不能满足多用户访问,达不到高可用需求.
1.2 第二点,在单机上面,一旦我们的服务器除了问题,数据库的安全性就受到了挑战,不能满足高可用的要求.
1.3 第三点,计算机单机的计算能力有限,当我们的用户请求增多,这时候计算机单机的数据计算能力就不能满足计算需求.
以上三点就是单体架构存在的风险:单机容量瓶颈\单机的数据数据计算能力瓶颈\单机故障风险都不能保证我们服务的高并发下高可用的需求.
分布式:提高系统无故障时间,系统中多个模块在不同服务器上部署,即可以成为分布式系统,如tomcat和数据库分别部署在不同服务器上面,或者两个相同功能的tomcat分别部署在不同服务器上面.解决的问题
2.1 解决单机性能不足问题:存储能力增强
2.2 解决单机高性能:计算能力增强
2.3 保证服务的高可用:系统中部分节点失效时,其他节点能够继续接替它继续提供服务,则可以任务系统具有高可用性.保证系统的高可用性,可从下面几个9说起,如下图所示:
为了提高可用性,我们要么提高系统的无故障时间,也就是减少系统的故障恢复时间,这就需要排除故障的原因:
(1)无计划的系统故障:
系统级故障:包括主机\操作系统\中间件\数据库\网络\电源以及外围设备
自然灾害\认为破坏\供电问题
(2)有计划的日常任务
运维相关:数据库维护\应用维护\中间件维护\操作系统维护\网络维护等问题
升级相关:数据库\中间件\应用\操作系统\网络\硬件等升级
这些分布式的部署实际上就是为了保证系统的弹力射击,在我们的系统出现故障的时候,要有基本的应对策略,保证服务稳定性,减少系统的不可用时间.
用缓存,主要有两个用途:高性能\高并发
高性能: 缩短对用户的响应时间,当有一个请求发过来,如果每一次都要在数据库中查询时候,查询的速度比较慢,长时间给不了用户反馈,这时候如果把查询的结果存放在缓存中,后面如果有用户请求数据时候,直接读取缓存中的数据就可以了
高并发: mysql是一个重的数据库,并不适合高并发,mysql单机支撑最多能够支撑2000QPS也很容易报警.
所以如果一个系统同时又多个请求,那么mysql单机绝对会死掉,这时候如果有缓存,就可以吧很多数据放在缓存里面.缓存的功能就是简单的key-value操作,单机支撑的并发量轻松一秒超过几万到几十万,可以轻松支撑高并发,单机承载并发量是mysql单机的几十倍.
注意:缓存是走内存的,内存天然就支撑高并发.
4.1 缓存一致性问题
当数据库时效性要求很高的时候,需要保证缓存中的数据与数据库中的保持一致,而且需要保证节点和副本中的数据也要保持一致,不能出现差异现象.
这就比较依赖缓存的过期和更新策略,一般会在数据发生更变的时候,主动更新缓存中的数据或者移除对应的缓存.
4.2 缓存击穿问题
对于一些设置了过期时间的key,可能这些key会在某些时间点被高并发访问,是一种非常"热点"的数据.这个时候,需要考虑缓存被"击穿"的问题,和缓存雪崩的问题,这里针对某一key缓存,而缓存雪崩则是很多key.
4.3 缓存雪崩问题(待整理)
作者:我是一个射手
链接:http://www.javaheidong.com/blog/article/207185/9c8caf5f6162753bffbf/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!