大型网站系统架构演化(Web)

大型网站系统架构演化

  • 大型网站系统架构演化
    • 需要关注的维度
    • 涉及的技术
    • 演进过程
      • 单体架构
      • 垂直架构
      • 使用缓存改善网站性能
        • 缓存与数据库的数据一致性问题
        • 缓存技术对比
        • Redis分布式存储方案
        • Redis集群切片的常见方式
        • Redis数据类型
        • Redis 淘汰算法

大型网站系统架构演化

需要关注的维度

高性能高可用可维护、应变、安全

涉及的技术

维度涉及技术内容
架构MVC,MVP,MVVM,REST,Webservice,微服务
并发分流集群(负载均衡)、CDN
缓存MemCache,redis,Squid
数据主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区分表技术,视图与物理化视图
持久化HIbernate,Mybatis
分布存储Hadoop,FastDFS,区块链
数据编码XML,JSON
Web应用服务器Apache,WebSphere,WebLogic,Tomcat,JBOSS,IIS
安全性SQL注入攻击
其他静态化,有状态与无状态,响应式Web设计,中台

演进过程

单体架构

垂直架构

使用缓存改善网站性能

缓存与数据库的数据一致性问题

数据库与缓存数据是否有可能不一致?如何解决?
有可能不一致。
大体思想如下:先写入数据库、再更新缓存

缓存技术对比
工作MemCacheRedis
数据类型简单key/value结构丰富的数据结构
持久性不支持支持
分布式存储客户端哈希分片/一致性哈希多种方式,主从、Sentinel、Cluster等
多线程支持支持支持 (Redis5.0之前不支持)
内存管理私有内存池/内存池
事务支持不支持有限支持
数据容灾不支持,不能做数据恢复支持,可以在灾难发生时,恢复数据
Redis分布式存储方案
分布式存储方案核心特点
主从模式一主多从,故障时手动切换
哨兵模式有哨兵的一主多从,主节点故障自动选择新的主节点
集群模式分节点对等集群,分slots,不同slots的信息存储到不同节点

在这里插入图片描述

Redis集群切片的常见方式
集群切片方式核心特点
客户端分片在客户端通过key的hash值对应到不同的服务器
中间件实现分片在应用软件和Redis中间,例如:Twemproxy、Codis等,由中间件实现服务到后台Redis节点的路由分派
客户端服务端协作分片Redis Cluster模式,客户端可采用一致性哈希,服务端提供错误节点的重定向服务solt上。不同的solt对应到不同服务
Redis数据类型
类型特点示例
String(字符串)存储二进制,,最大512M缓存,计数,共享Session
Hash(字典)无序字典,数组+链表,适合存对象。Key对应一个HashMap。针对一组数据存储、读取、修改用户属性
List(列表)Linked List:双向链表,有序,增删快,查询慢;Array List:数组方式,有序,增删慢,查询快
消息队列,文章列表,记录前N个最新登录的用户ID列表
Set(集合)键值对无序,唯一。增删查复杂度均为O(1),支持交/并/差集操作独立IP,共同爱好,标签
Sorted Set【ZSet】(有序集合)键值对有序,唯一,自带按权重排序效果排行榜
Redis 淘汰算法
淘汰作用范围机制名策略

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

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

相关文章

【深入解析git和gdb:版本控制与调试利器的终极指南】

【本节目标】 1. 掌握简单gdb使用于调试 2. 学习 git 命令行的简单操作, 能够将代码上传到 Github 上 1.Linux调试器-gdb使用 1.1.背景 程序的发布方式有两种,debug模式和release模式release模式不可被调试,debug模式可被调试Linux gcc/g出来的二进制…

【Cmake】Cmake基础学习

CMake学习 一、基础学习 1. 利用Cmake进行单个源代码构建可执行文件 (1)基础命令 最基本的 CMake项目是由单个源代码文件构建的可执行文件。对于这样的简单项目,只需要一个包含三个命令的 CMakeLists.txt 文件。 注意: 虽然 CMake 支持大写、小写和混合大小写命令,但是…

Java中的mysql——面试题+答案(存储过程,外键,隔离级别,性能优化)——第23期

当涉及MySQL时,面试题的范围可以涵盖数据库设计、优化、复制、分片等方面。 什么是数据库范式?为什么要遵循数据库范式? 答案: 数据库范式是一组规范,用于设计关系数据库表的结构,以减少数据冗余和提高数据…

Spring事件注解@EventListener【观察】

一、背景 在开发工作中,我们常常会遇到这样一种情况:完成一项任务后,需要向其他模块广播消息或通知,以触发其他事件的处理。逐个发送请求固然可行,但更好的方式是采用事件监听,它是设计模式中的发布-订阅模…

Unity 关于生命周期函数的一些认识

Unity 生命周期函数主要有以下一些: Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次,以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…

微信小程序Vue+nodejs教室自习室座位预约系统68u2m

本文从管理员、用户的功能要求出发,教室预约系统小程序中的功能模块主要是实现管理端;首页、个人中心、教室信息管理、教室设备管理、用户管理、教室预约管理、管理员管理、系统管理,微信端;首页、教室信息、教室设备、教室预约、…

西南科技大学信号与系统A实验二(信号频谱分析)

一、实验目的 1.掌握用 matlab 软件绘制信号频谱的方法; 2.进一步理解抽样定理; 3.理解傅里叶变换的性质(频移特性). 二、实验原理 (一)fft 函数的调用 matlab 提供 fft 函数来计算信号 x(n)的快速离散傅里叶变换 (FFT). z 格式:y=fft(x) 计算信号 x 的快速离散傅里叶…

链路追踪详解(二):链路追踪技术的演进

目录 早期的链路追踪 分布式系统的挑战 链路追踪技术的诞生 链路追踪系统的开源和标准化 微服务架构对链路追踪技术的促进 云原生时代下的链路追踪技术 链路追踪技术未来的趋势 小结 链路追踪的发展历程可以追溯到几十年前,随着互联网技术的不断发展&#x…

【Rust】结构体与枚举

结构体struct 基础用法 一个存储用户账号信息的结构体: struct User {active: bool,username: String,email: String,sign_in_count: u64, }声明一个User的实例变量: struct User {active: bool,username: String,email: String,sign_in_count: u64,…

若依vue-修改标题和图标

因为我们拉下来的代码,图标和logo是若依的,这和我们需要做出来的效果有差别 这个时候就需要去对应的文件内去修改标题和图标 (主要就是这两个地方的图标和标题) 修改菜单里面的logo以及文字 修改文字 位置: src/layout/component/Sidebar/Logo.vue 此处的title文字是定义在…

ESXi vSAN 整合多主机磁盘

VSAN 与 RAID区别: vSAN 可以管理 ESXi 主机,且只能与 ESXi 主机配合使用。一个 vSAN 实例仅支持一个群集。vSAN 不需要外部网络存储来远程存储虚拟机文件,例如光纤通道 (FC) 或存储区域网络 (SAN) 使用传统存储,存储管理员可以…

如何给echarts的legend设置不同的样式和位置 legend分组显示

legend分组显示 给每一个图例设置不一样的位置和样式 样式如下 demo代码 option {title: {text: Stacked Line},tooltip: {trigger: axis},// legend写为数组可以给一些给某些组分配一些不一样的样式legend: [{data: [// 使用svg画任意的图形{name:Email,icon: path://"…

科学与工程计算基础(数值计算)知识点总结

数值计算 第1章 概论1.2 数值计算中的误差1.2.1 误差的来源和分类1.2.2 误差与有效数字1.2.3 数值运算的误差估计 1.3 误差定性分析和避免误差危害1.3.1 算法的数值稳定性1.3.3 避免误差危害 1.4 数值计算中算法设计的技术1.5 习题1.5.1 判断题1.5.2 计算题 第2章 插值法2.2 拉…

Helm3部署kubeview资源可视化工具

一、KubeView 介绍 KubeView 是一个 Kubernetes 集群可视化工具和可视化资源管理器。它提供了跨命名空间的 Kubernetes 对象的完整概述,以及它们如何通过直观的 UI 和资源对象相互连接。它允许用户在集群内部运行命令,并查看集群内部的资源使用情况、容器…

详解原生Spring中的控制反转和依赖注入-构造注入和Set注入

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

力扣labuladong一刷day18天差分数组

力扣labuladong一刷day18天差分数组 文章目录 力扣labuladong一刷day18天差分数组一、370. 区间加法二、1109. 航班预订统计三、1094. 拼车 一、370. 区间加法 题目链接:https://leetcode.cn/problems/range-addition/ 思路:这种频繁改变数组的值&#…

pandas教程:US Baby Names 1880–2010 1880年至2010年美国婴儿姓名

文章目录 14.3 US Baby Names 1880–2010(1880年至2010年美国婴儿姓名)1 Analyzing Naming Trends(分析命名趋势)评价命名多样性的增长“最后一个字母”的变革变成女孩名字的男孩名字(以及相反的情况) 14.3…

【CAN通信】CanTrcv和EcuM的关系及不同类型的Can收发器主要使用场景

目录 前言 正文 1.CanTrcv_SetOpMode被哪个模块调用,在什么场景下调用? 1.1 CanSM模块切换CanTrcv模块状态

Drool 7 SpreadSheet Decision Template 笔记

1 Excel Decision table 1.1 很棒的示意图,来自https://blog.csdn.net/justlpf/article/details/128109731 1.2 参考URL 1.2.1 https://blog.csdn.net/justlpf/article/details/128109731 1.3 多sheet 模式 默认是用第一个sheet如果要支持多sheet,需…

查看各ip下的连接数

netstat -n | awk /^tcp/ {print $5} | awk -F: {print $1} | sort | uniq -c| sort -rn netstat -n:显示所有的网络连接,不包括任何服务名的解释。awk /^tcp/ {print $5}:使用awk命令过滤出tcp协议的连接,并打印出每个连接的第五…