大型网站系统架构演化实例_2.使用缓存改善网站性能

 1.使用缓存改善网站性能       

        网站访问的特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。既然大部分业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能了。网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存缓存在专门的分布式缓存服务器上的远程缓存

        本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况。

        远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务。

1.1本地缓存

        本地缓存的概念:本地缓存是指和应用程序在同一个进程内的内存空间去存储数据,数据的读写都是在同一个进程内完成的。

        本地缓存优点:读取速度快,但是不能进行大数据量存储。

本地缓存不需要远程网络请求去操作内存空间,没有额外的性能消耗,所以读取速度快。但是由于本地缓存占用了应用进程的内存空间,比如java进程的jvm内存空间,故不能进行大数据量存储。

        本地缓存缺点

        (1)应用程序集群部署时,会存在数据更新问题(数据更新不一致)。本地缓存一般只能被同一个应用进程的程序访问,不能被其他应用程序进程访问。在单体应用集群部署时,如果数据库有数据需要更新,就要同步更新不同服务器节点上的本地缓存的数据来保证数据的一致性,但是这种操作的复杂度高,容易出错。可以基于redis的发布/订阅机制来实现各个部署节点的数据同步更新。

        (2)数据会随着应用程序的重启而丢失。因为本地缓存的数据是存储在应用进程的内存空间的,所以当应用进程重启时,本地缓存的数据会丢失。

        本地缓存的实现

        (1)缓存存储的数据一般都是key-value键值对的数据结构,在java语言中,常用的字典实现包括 HashMap 和 ConcurretHashMap。

        (2)除了上面说的实现方式以外,也可以用Guava、Ehcache以及Caffeine等封装好的工具包来实现本地缓存。

1.2分布式缓存

        分布式缓存概念:分布式缓存是独立部署的服务进程,并且和应用程序没有部署在同一台服务器上。所以是需要通过远程网络请求来完成分布式缓存的读写操作,并且分布式缓存主要应用在应用程序集群部署的环境下。

        分布式缓存优点

        (1)支持大数据量存储

分布式缓存是独立部署的进程,拥有自身独自的内存空间,不需要占用应用程序进程的内存空间,并且还支持横向扩展的集群方式部署,所以可以进行大数据量存储。

        (2)数据不会随着应用程序重启而丢失

分布式缓存和本地缓存不同,拥有自身独立的内存空间,不会受到应用程序进程重启的影响,在应用程序重启时,分布式缓存的存储数据仍然存在。

        (3)数据集中存储,保证数据的一致性

当应用程序采用集群方式部署时,集群的每个部署节点都有一个统一的分布式缓存进行数据的读写操作,所以不会存在像本地缓存中数据更新问题,保证了不同服务器节点的 数据一致性。

        (4)数据读写分离,高性能,高可用

分布式缓存一般支持数据副本机制,实现读写分离,可以解决高并发场景中的数据读写性能问题。而且在多个缓存节点冗余存储数据,提高了缓存数据的可用性,避免某个缓存节点宕机导致数据不可用问题。

        分布式缓存缺点

        (1)数据跨网络传输,读写性能不如本地缓存

分布式缓存是一个独立的服务进程,并且和应用程序进程不在同一台机器上,所以数据的读写要通过远程网络请求,这样相对于本地缓存的数据读写,性能要低一些。

        分布式缓存的实现

        分布式缓存的典型实现包括 MemCached 和 Redis。

2.第三阶段网站架构图 

        此时,网站系统的架构如图1所示。使用缓存后,数据访问压力得到有效缓解,但是单一应用服务器能够处理的请求连接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。

图1 第三阶段网站架构 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】自定义修改pip下载模块默认的安装路径

因为电脑下载了Anaconda提供的默认Python 3.9 以及后期下载的python3.10所以在Pychram进行项目开发时,发现一些库怎么导入都导入不了,手动install也是失败,后期在cmd里面发现python以及pip配置有点儿混乱,导致执行命令时&#xff…

基于SpringCloudAlibaba+Sentinel的分布式限流设计

胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四…

碳循环、人类、遥感之间的关联

1. 碳与碳循环 碳是自然界中很常见的一种元素,它以多种形式广泛存在于大气和地壳之中。碳单质很早就被人认识和利用,碳的一系列化合物——有机物是生命的根本。 1.1 自然界中的碳 地球上最大的两个碳库是岩石圈和化石燃料,含碳量约占…

小米K8s运维-云原生方向(面经分享)

大家好,我是秋意零。今天分享一篇小米运维面经。 小米K8s运维-云原生方向 一面 2024年4月3日 | 10点 | 一面 | 40 min 左右 1)自我介绍 2)你熟悉Python多一点吗?还熟悉其它语言吗,拿出来写过的? 3&am…

搜索引擎中的倒排索引是什么

在搜索引擎领域,倒排索引是一种核心数据结构,它让搜索引擎能够以极高的效率找到包含用户查询关键词的所有网页。为了理解倒排索引的工作原理,我们可以将其与一种更直观、生活化的例子相比较:书店里的索引卡片系统。 假设你是一位…

在RISC-V64架构的CV1811C开发板上应用perf工具进行多线程程序性能分析及火焰图调试

CV1811C环境编译 SDK目录结构 . ├── build // 编译目录,存放编译脚本以及各board差异化配置 ├── buildroot-2021.05 // buildroot开源工具 ├── freertos // freertos系统 ├── fsbl // fsbl启动固件,prebuilt形式存在…

K8s: 集群内Pod通信机制之环境变量

集群内Pod通信机制之环境变量 Kubernetes 支持两种基本的服务发现模式 —— 环境变量和 DNS 1 ) 环境变量概述 在Service里面通过label selector选择器去匹配到对应的pod然后把流量导给对应的pod进行这个service的一个服务提供也就是说你只要访问service的IP地址…

Android14 - WindowManagerService之客户端Activity布局

Android14 - WindowManagerService之客户端Activity布局 一、主要角色 WMS作为一个服务端,有多种客户端与其交互的场景。我们以常见的Activity为例: Activity:在ActivityThread构建一个Activity后,会调用其attach方法,…

【PyTorch】2-主要组成模块(数据读入、模型构建、损失函数、评价指标、训练和测试、优化器)

PyTorch:2-主要组成模块 注:所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/),下文仅为学习记录 2.1:深度学习的必要部分 机器学习步骤 【1】数据预处理 【2】划分train、valid、…

人工智能底层自行实现篇3——逻辑回归(上)

3. 逻辑回归 1. 简介 逻辑回归(Logistic Regression)是一种广泛应用于分类问题的统计方法,尤其是二分类问题。虽然它的名称中包含“回归”,但实际上逻辑回归是一个用于估计概率的分类模型。以下是关于逻辑回归的详细介绍&#x…

[docker] volume 补充 环境变量 参数

[docker] volume 补充 & 环境变量 & 参数 这里补充一下 volume 剩下的内容,以及添加参数(ARG) 和 环境变量 ENV 的内容 read only volumes ❯ docker run-p 3000:80--rm--name feedback-app-v feedback:/app/feedback-v "$(pwd):/app"-v /app/…

gcc头文件默认搜索路径

0. 一些小的注意点 #include <> 是系统搜索头文件 #include "" 是本地搜索路径 gcc -I /dir-to-path -I选项可以指定头文件搜索路径 1. 解决 可以使用cpp查看cpp搜索路径 cpp -v /dev/null -o /dev/null另外一种方法直接使用gcc gcc -print-prog-namecc1p…

【C++初阶】vector使用特性 vector模拟实现

1.vector的介绍及其使用 1.1 vector的介绍 vector文档介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#…

第24天:安全开发-PHP应用文件管理模块显示上传黑白名单类型过滤访问控制

第二十四天 一、PHP文件管理-显示&上传功能实现 如果被抓包抓到数据包&#xff0c;并修改Content-Type内容 则也可以绕过筛查 正常进行上传和下载 二、文件上传-$_FILES&过滤机制实现 无过滤机制 黑名单过滤机制 使用 explode 函数通过点号分割文件名&#xff0c;…

VTC视频时序控制器原理以及Verilog实现

文章目录 一、前言二、视频时序控制原理三、Verilog实现3.1 代码3.2 仿真以及分析 一、前言 VTC&#xff08;Video Timing Controller&#xff09;是一种用于产生视频时序的控制器&#xff0c;在FPGA图像领域经常用到。Xilinx Vivado 也有专门用于生成视频时序的 IP&#xff0c…

webpack-babel2

浏览器的兼容性问题 浏览器的兼容性问题不知包括随屏幕大小而变化&#xff0c;还包括针对浏览器支持的特性&#xff08;如css特性&#xff0c;js特性&#xff09; 做处理。 目前市场上有很多浏览器&#xff1a;Chrome,Safari,IE,Edge等&#xff0c;要根据它们的市场占有率来决…

【onnx 模型推理加速】如何验证 onnxruntime-gpu 版本 安装成功

首先安装gpu 版本的onnx 包 pip install onnxruntime-gpu要验证onnxruntime-gpu版本是否安装成功&#xff0c;并且GPU加速功能正常&#xff0c;你可以执行以下步骤&#xff1a; 检查安装的ONNX Runtime版本&#xff1a; 首先&#xff0c;你可以检查安装的ONNX Runtime版本&am…

vue 对axios二次封装,配置api层,基于mock测试数据

一、初始化环境&#xff08;默认都会安装vue3项目ts&#xff09; 安装mock&#xff1a;全局安装 # 使用 npm 安装 npm install mockjs vite-plugin-mock # 使用 yarn 安装 yarn add mockjs vite-plugin-mock 二、进行配置 在vite.config.ts中进行配置 import { UserConfigEx…

JMeter--后置处理器--JSON提取器(JSON Extractor)

数据关联&#xff0c;可以通过JsonPath提取所需要的值&#xff0c;功能非常强大&#xff08;注意取样器返回必须为 Json&#xff09;&#xff1b;底层采用jackson实现&#xff1b; 右键 >>> 添加 >>> 后置处理器 >>> JSON提取器&#xff08;JSON E…