架构04-透明多级分流系统
零、文章目录
架构04-透明多级分流系统
1、透明多级分流系统
(1)概述
- **定义:**透明多级分流系统是指在用户请求从客户端发出到最终查询或修改数据库信息的过程中,通过多个技术部件对流量进行合理分配,以提高系统的性能和可靠性。
- 设计原则:
- **减少单点部件:**尽量减少系统中的单点部件,如果不可避免,应减少到达这些部件的流量。
- **奥卡姆剃刀原则:**如无必要,勿增实体。系统设计应尽量简洁,避免不必要的复杂性。
(2)系统部件的价值
- **边缘部件:**如本地缓存、内容分发网络(CDN)、反向代理等,能够迅速响应用户请求,减轻后方I/O和CPU的压力。
- **可扩展部件:**如集群中的服务节点,可以通过增加机器来提高并发性能,适合承载主要业务逻辑。
- **核心部件:**如服务注册中心、配置中心,对系统运行有全局性影响,需保持高可用性和容错备份。
- **单点部件:**如系统入口的路由、网关、负载均衡器和传统关系数据库,只能通过升级硬件来提升性能,容易成为瓶颈。
(3)DNS域名解析系统
- DNS系统是一个典型的透明多级分流系统
- **作用:**将人类易读的域名转换为计算机处理的IP地址。
- 递归解析过程:
- **本地缓存检查:**客户端先检查本地DNS缓存,查看是否存在该域名的地址记录。
- **本地DNS查询:**如果缓存中没有记录,客户端将请求发送给本地DNS服务器。
- **权威服务器查询:**本地DNS服务器依次查询是否有该域名的权威服务器记录,直至查询到根域名服务器。
- **递归查询:**从根域名服务器开始,逐步查询到具体的权威服务器。
- **获取地址记录:**通过权威服务器获取域名的地址记录,可能包括A记录、AAAA记录、CNAME记录等。
- DNS系统的优势与挑战
- 优势:
- **多级分流:**通过多级查询和缓存机制,能够处理全球网络流量。
- **智能路由:**根据访问者的地理位置和服务商等因素,返回最合适的IP地址。
- 挑战:
- **响应速度:**在极端情况下,递归查询可能导致较高的延迟。
- **中间人攻击:**每一级查询都可能受到劫持,特别是本地运营商的DNS服务器。
- 优势:
- 前端优化手段帮助应对这些挑战
- **DNS预取(DNS Prefetching):**在网页加载时提前解析后续可能使用的域名,减少延迟。
- **DNS over HTTPS(DoH):**通过HTTPS协议进行DNS解析,绕过传统Local DNS,提高安全性和可靠性。
2、HTTP协议的客户端缓存机制
(1)引言
- **无状态交互原则:**HTTP协议设计之初,确定了服务端与客户端之间的“无状态”交互原则,即每次请求都是独立的,不依赖前一次请求的状态。
- **问题:**无状态交互虽然简化了服务器设计,但也导致了重复数据传输,降低了网络性能。
- **解决方案:**客户端缓存机制。
(2)客户端缓存分类
- **状态缓存:**不经过服务器,客户端直接根据缓存信息判断目标网站的状态。
- 示例:301/Moved Permanently、HSTS(HTTP Strict Transport Security)。
- **强制缓存:**客户端根据缓存信息直接使用资源,无需再次请求服务器。
- **协商缓存:**客户端与服务器协商资源是否已更改,决定是否使用缓存。
(3)强制缓存
- Expires Header
- **定义:**HTTP/1.0 协议中引入,跟随一个截止时间参数。
- 示例:
HTTP/1.1 200 OK
Expires: Wed, 8 Apr 2020 07:28:00 GMT
- **问题:*** 客户端时间调整可能导致缓存提前失效或超期持有。* 无法强制浏览器不允许缓存某个资源。
- Cache-Control Header
- **定义:**HTTP/1.1 协议中引入,语义更丰富。
- **优先级:**如果 Cache-Control 和 Expires 同时存在且语义冲突,以 Cache-Control 为准。
- 参数:
- **max-age:**以秒为单位,表示缓存的有效时间。
- **s-maxage:**共享缓存的有效时间,主要用于 CDN。
- **public/private:**资源是否可以被代理、CDN 缓存。
- **no-cache:**资源不应被缓存,但协商缓存仍生效。
- **no-store:**禁止任何形式的缓存。
- **no-transform:**禁止资源被修改。
- **min-fresh:**建议服务器返回不少于该时间的缓存资源。
- **only-if-cached:**只使用缓存,缓存未命中则返回 503/Service Unavailable。
- **must-revalidate:**资源过期后必须从服务器获取。
- **proxy-revalidate:**提示代理、CDN 资源过期后的缓存行为。
(4)协商缓存
- 基于资源修改时间
- **Last-Modified:**服务器响应 Header,表示资源的最后修改时间。
- **If-Modified-Since:**客户端请求 Header,发送上次收到的资源最后修改时间。
- 示例:
- 未修改:
HTTP/1.1 304 Not Modified
Cache-Control: public, max-age=600
Last-Modified: Wed, 8 Apr 2020 15:31:30 GMT
* **已修改:**
HTTP/1.1 200 OK
Cache-Control: public, max-age=600
Last-Modified: Wed, 8 Apr 2020 15:31:30 GMT
Content
- 基于资源唯一标识
- **ETag:**服务器响应 Header,表示资源的唯一标识。
- **If-None-Match:**客户端请求 Header,发送上次收到的资源唯一标识。
- 示例:
- 未修改:
HTTP/1.1 304 Not Modified
Cache-Control: public, max-age=600
ETag: "28c3f612-ceb0-4ddc-ae35-791ca840c5fa"
* **已修改:**
HTTP/1.1 200 OK
Cache-Control: public, max-age=600
ETag: "28c3f612-ceb0-4ddc-ae35-791ca840c5fa"
Content
(5)内容协商机制
- **定义:针对一个 URL 提供多个版本的资源,通过 Accept 和 Content- Headers 实现。
- **Vary Header:**指示缓存应根据哪些请求 Header 来缓存资源。
- 示例:
HTTP/1.1 200 OK
Vary: Accept, User-Agent
3、传输链路
(1)传输链路的重要性
- **定义:**传输链路是指程序发出的请求从客户端到服务器的过程。
- **影响因素:**网络路由跳点数量、运营商铺设线路质量等。
- **开发者控制:**虽然传输链路看似不可控,但程序请求与应用层、传输层协议的匹配度对传输效率有很大影响。
(2)前端优化技巧
- 减少请求数量
- **方法:**CSS、JS 文件合并/内联,合并 Ajax 请求。
- **目的:**减少建立通信链路的开销,提高访问性能。
- 扩大并发请求数
- **方法:**域名分片(Domain Sharding)。
- **目的:**利用浏览器对每个域名支持的并发请求数限制,加快资源加载速度。
- 启用压缩传输
- **方法:**启用 GZip 压缩。
- **目的:**减少传输内容的大小,节省网络流量。
- 避免页面重定向
- **目的:**减少文档传输的延迟,提高用户体验。
- 按重要性调节资源优先级
- **方法:**将重要资源放在 HTML 的头部。
- **目的:**优先下载对客户端展示影响大的资源。
(3)HTTP 协议的发展
- HTTP/1.0 和 HTTP/1.1
- **特点:**基于 TCP 协议,适合长时间、大数据传输。
- **问题:**短而小的 TCP 连接导致网络性能瓶颈。
- HTTP/2
- **多路复用技术:**允许多个请求和响应在同一 TCP 连接中同时传输。
- **头压缩:**减少头部信息的传输开销。
- **优势:**减轻服务器连接压力,提高传输效率。
- HTTP/3
- **基础:**基于 UDP 协议的 QUIC。
- **特点:**独立控制每个流,提高易出错链路的性能,支持移动设备网络切换。
- **优势:**减少网络切换延迟,提高传输可靠性。
(4)连接复用技术
- 持久连接(Persistent Connection)
- **原理:**客户端对同一个域名长期持有一个或多个不会用完即断的 TCP 连接。
- **优势:**减少连接建立的开销。
- **问题:**队首阻塞(Head-of-Line Blocking)。
- HTTP 管道(HTTP Pipelining)
- **原理:**客户端一次性将所有请求发送给服务端,服务端按顺序返回。
- **问题:**难以完全避免队首阻塞。
(5)压缩技术
- GZip 压缩
- **原理:**压缩文本数据,减少传输量。
- **问题:**与持久连接机制存在冲突,无法提前确定
Content-Length
。
- 分块传输编码(Chunked Transfer Encoding)
- **原理:**将响应报文分成多个分块传输,每个分块包含长度值和数据内容。
- **优势:**解决即时压缩与持久连接的冲突问题。
(6)QUIC 协议
- **背景:**由 Google 提出,旨在替代 TCP 协议。
- **特点:**基于 UDP 协议,实现可靠传输,独立控制每个流。
- **优势:**提高易出错链路的性能,支持移动设备网络切换。
- **挑战:**互联网基础设施对 UDP 的支持有限,迁移难度大。
(7)未来展望
- **现状:**HTTP/2 和 HTTP/3 的使用比例逐渐增加。
- **趋势:**新旧协议交替,设备和程序将进行重大更新。
4、内容分发网络
(1)CDN 的基本概念
- **定义:**内容分发网络(CDN)是一种古老的网络技术,通过在全球范围内分布的节点来分发内容,提高内容的加载速度和可用性。
- **作用:**解决网络传输中的带宽、时延等问题,提高用户体验。
(2)互联网系统的速度影响因素
- **网站服务器带宽:**服务器接入网络运营商的链路所能提供的出口带宽。
- **用户客户端带宽:**用户接入网络运营商的链路所能提供的入口带宽。
- **运营商互联节点带宽:**不同运营商之间互联节点的带宽。
- **物理链路传输时延:**从网站到用户之间的物理链路传输时延。
(3)CDN 的工作过程
- 路由解析:
- **无CDN的解析过程:**用户请求 → 本地DNS → 递归查询 → 权威DNS → 解析结果返回浏览器。
- **有CDN的解析过程:**用户请求 → 本地DNS → CNAME记录 → CDN权威DNS → 最优CDN节点IP → 解析结果返回浏览器。
- 内容分发:
- **主动分发(Push):**源站主动将内容推送到CDN节点。
- **被动回源(Pull):**用户请求触发CDN节点从源站获取内容。
- 资源管理:
- **超时被动失效:**缓存资源超过生存期后重新回源。
- **手工主动失效:**通过API接口手动刷新缓存。
(4)CDN 的应用
- **加速静态资源分发:**CDN的核心功能,提高静态资源的加载速度。
- **安全防御:**防御DDoS攻击等,保护源站安全。
- **协议升级:**实现HTTP/1.x到HTTP/2或HTTP/3的协议升级。
- **状态缓存:**缓存301/302转向等状态,减少源站压力。
- **资源修改:**自动压缩资源、修改Header等,优化用户体验。
- **访问控制:**实现IP黑白名单、QoS控制、防盗链等。
- **功能注入:**在不修改源站代码的前提下,注入第三方应用。
(5)CDN 的透明性和多级分流
- **透明性:**CDN的工作过程对用户和源站透明,无需额外配合。
- **多级分流:**通过分布式节点实现多级分流,提高系统健壮性和应对大流量的能力。
5、负载均衡
(1)负载均衡的背景与重要性
- **早期互联网:**单台服务器足以应对较小的流量和简单的业务。
- **现代系统:**集群部署成为常态,无论是单体架构的多副本还是微服务架构,都需要负载均衡来扩展服务能力,确保高可用性和高性能。
- **用户透明性:**用户只需记住一个域名,背后的复杂调度由负载均衡器处理。
(2)负载均衡的层级
- **DNS 层面的负载均衡:**通过域名解析将用户分配到合适的数据中心。
- **数据中心内部的负载均衡:**多级负载均衡,包括四层和七层负载均衡。
(3)四层负载均衡
- **性能高:**直接转发数据包,效率高。
- 常见模式:
- **数据链路层负载均衡:**修改 MAC 地址,适用于同一子网内的负载均衡。
- 网络层负载均衡:
- **IP 隧道:**封装数据包,可以跨子网,但需要拆包。
- **NAT 模式:**修改目标 IP 地址,响应需经过负载均衡器,适用于不同子网。
- **SNAT 模式:**同时修改源和目标 IP 地址,完全透明,但真实服务器无法获取客户端 IP。
(4)七层负载均衡
- **功能强:**工作在应用层,可以感知应用层协议,实现更复杂的路由和安全功能。
- 常见功能:
- **静态资源缓存:**减少后端服务器的负载。
- **智能路由:**根据 Session、URL、用户身份等进行路由。
- **安全防护:**抵御 DDoS 攻击、SQL 注入等。
- **链路治理:**服务降级、熔断、异常注入等。
(5)负载均衡策略
- **轮循均衡:**按顺序分配请求。
- **权重轮循均衡:**根据服务器性能分配请求。
- **随机均衡:**随机分配请求。
- **一致性哈希均衡:**根据特征值分配请求,保证一致性。
- **响应时间均衡:**根据服务器响应时间分配请求。
- **最少连接数均衡:**根据当前连接数分配请求,适合长时间处理的请求。
(6)负载均衡器的实现
- 软件均衡器:
- **内核级:**如 LVS,性能更高。
- **应用级:**如 Nginx、HAProxy,使用方便,功能丰富。
- **硬件均衡器:**如 F5、A10,使用 ASIC 芯片,性能最高。
(7)多级混合负载均衡
- **必要性:**单一层次的负载均衡难以应对复杂场景,多级混合可以更好地分配流量和资源。
- **层次顺序:**低层在前,高层在后,因为低层负载均衡器处理速度快,高层负载均衡器功能强大,适合处理复杂应用逻辑。
6、服务端缓存
(1)引入缓存的目的
- **缓解 CPU 压力:**通过存储方法运行结果、提前计算内容、复用公用数据等方式节省 CPU 算力,提升响应性能。
- **缓解 I/O 压力:**通过将对较慢介质(如网络、磁盘)的读写访问转变为对较快介质(如内存)的访问,减轻 I/O 负载,提升响应性能。
(2)引入缓存的风险
- **增加系统复杂度:**需要处理缓存的失效、更新、一致性等问题。
- **掩盖缺陷:**问题可能在更久的时间后出现在更远的位置。
- **安全风险:**缓存可能泄漏保密数据,成为攻击的薄弱点。
(3)缓存的属性
- **吞吐量:**缓存的并发读写操作效率,用 OPS(每秒操作数)衡量。
- **命中率:**成功从缓存中返回结果次数与总请求次数的比值,反映引入缓存的价值。
- **扩展功能:**缓存提供的额外管理功能,如最大容量、失效时间、失效事件、命中率统计等。
- **分布式支持:**缓存可以分为“进程内缓存”和“分布式缓存”,前者速度快但不共享,后者支持跨节点共享。
(4)缓存的吞吐量
- 并发场景下的吞吐量
- **线程安全:**HashMap 不是线程安全的,需要使用
Collections.synchronizedMap
或ConcurrentHashMap
。 - **性能对比:**不同缓存组件库(如 Caffeine、Guava Cache、Ehcache 等)在并发读写场景下的性能差异显著。
- **线程安全:**HashMap 不是线程安全的,需要使用
- 提高吞吐量的方法
- **避免数据竞争:**设计数据结构以减少数据竞争,如 Caffeine 使用环形缓冲区和异步日志提交机制。
- **异步日志提交:**将数据读写操作视为日志提交,减少锁竞争,提高吞吐量。
(5)缓存的命中率与淘汰策略
- 基本淘汰策略
- **FIFO(先进先出):**优先淘汰最早进入缓存的数据,命中率较低。
- **LRU(最近最少使用):**优先淘汰最久未被使用访问的数据,适合处理热点数据。
- **LFU(最不经常使用):**优先淘汰最不经常使用的数据,维护开销较高。
- 改进的淘汰策略
- **TinyLFU:**使用 Sketch 结构和滑动时间窗算法,减少计数器维护频率,处理随时间变化的热度变化。
- **W-TinyLFU:**结合 LRU 和 LFU 的优点,通过 Window Cache 和 Main Cache 实现分段管理。
- **ARC(自适应替换缓存):**动态调整缓存策略,提高命中率。
- **LIRS(低最近引用集):**基于引用频率和时间间隔的缓存策略。
(6)缓存的扩展功能
- 基本功能
- **CacheLoader:**允许缓存主动加载指定 Key 值的数据,实现自动刷新。
- **淘汰策略选择:**支持用户选择不同的淘汰策略。
- **失效策略:**数据在一定时间后自动失效或刷新。
- 高级功能
- **事件监听器:**在数据状态变动时进行额外操作。
- **监视能力:**提供缓存数据的监视功能。
- **并发级别设置:**分段加锁实现并发控制。
- **容量设置:**指定初始容量和最大容量,减少扩容频率,控制缓存大小。
- **引用方式设置:**与 Java 虚拟机的垃圾收集机制结合。
- **统计信息:**提供缓存命中率、平均加载时间、自动回收计数等统计信息。
- **持久化功能:**将缓存内容存储到数据库或磁盘中。
7、分布式缓存与本地缓存打配合
(1)分布式缓存的形式
- 复制式缓存
- **特点:**每个节点都有完整的数据副本,读取性能高,但写入性能随节点数增加而急剧下降。
- **代表性产品:**JBossCache
- **适用场景:**很少更新但频繁读取的数据。
- 集中式缓存
- **特点:**数据集中存储,读写都需要网络访问,不会随节点数增加而增加负担,但性能低于进程内缓存。
- **代表性产品:**Redis、Memcached
- **适用场景:**更新和读取都较为频繁的数据。
(2)数据一致性
- **AP(可用性和分区容忍性):**如 Redis,高性能、高可用,但不保证强一致性。
- **CP(一致性和分区容忍性):**如 ZooKeeper、Doozerd、Etcd,保证强一致性,但吞吐量有限。
(3)透明多级缓存
- **概念:**结合进程内缓存和分布式缓存,形成多级缓存系统。
- **优点:**结合两者优点,提高整体性能。
- **挑战:**代码侵入性大,管理复杂,容易出现数据不一致问题。
- 解决方案:
- **变更以分布式缓存为准:**数据变动时,通过通知机制使各节点的一级缓存失效。
- **访问以进程内缓存优先:**优先查询一级缓存,未命中再查询二级缓存。
(4)缓存风险及应对措施
- 缓存穿透
- **现象:**查询不存在的数据,每次都触及数据库。
- 应对措施:
- **缓存空值:**对返回为空的 Key 值进行缓存,设置较短的超时时间。
- **布隆过滤器:**在缓存前设置布隆过滤器,过滤掉不存在的 Key 值。
- 缓存击穿
- **现象:**热点数据失效,大量请求同时到达数据库。
- 应对措施:
- **加锁同步:**使用互斥锁或分布式锁,确保只有一个请求能访问数据源。
- **手动管理热点数据:**通过代码有计划地更新和失效热点数据。
- 缓存雪崩
- **现象:**大量数据在同一时间失效,导致请求大量到达数据库。
- 应对措施:
- **透明多级缓存:**分散数据的过期时间。
- **随机过期时间:**将缓存的生存期设置为一个时间段内的随机时间。
- 缓存污染
- **现象:**缓存中的数据与数据源不一致。
- 应对措施:
- Cache Aside 模式:
- **读数据:**先读缓存,未命中再读数据源并回填缓存。
- **写数据:**先写数据源,再失效缓存。
- Cache Aside 模式:
相关文章:
架构04-透明多级分流系统
零、文章目录 架构04-透明多级分流系统 1、透明多级分流系统 (1)概述 **定义:**透明多级分流系统是指在用户请求从客户端发出到最终查询或修改数据库信息的过程中,通过多个技术部件对流量进行合理分配,以提高系统的…...
云原生后端开发:构建现代化可扩展的服务
随着微服务架构的普及和容器化技术的成熟,云原生后端开发成为了构建现代化、可扩展系统的关键。本文将从云原生理念出发,结合实际案例,探讨如何使用 Kubernetes、服务网格、微服务架构等技术构建高效的云原生后端。 一、云原生的核心理念 1.…...
在Windows和Linux系统上获取网卡MAC地址及相关信息所有常用方法整理
摘要 在网络管理和故障排除中,了解如何获取网卡的MAC地址、IP地址以及网卡名称是系统管理员必备的技能。本文将介绍在Windows和Linux系统上手动获取网卡MAC地址的方法,并提供脚本以自动化获取服务器中网卡信息的过程。这些技巧和工具将帮助新手系统管理…...
制作苹果IOS.APP所使用步骤和方法-有步骤视情况待完善
1.获取开发工具 首先,您需要下载并安装Xcode。Xcode是苹果开发iOS和macOS应用程序的官方集成开发环境(IDE)。它包含了必要的工具,例如代码编辑器、调试器、编译器和界面构建器。Xcode可在Mac App Store中免费下载。 2.学习Swift或…...
【conda】全面解析 Conda 配置文件:从完整示例到最佳实践
目录 引言一、Conda 配置文件示例1.1 中英文注释示例1.2 文件编码格式 二、详细解释2.1 ssl_verify: true2.2 channels2.3 envs_dirs2.4 pkgs_dirs2.5 custom_channels2.6 remote_read_timeout_secs 和 remote_connect_timeout_secs2.7 show_channel_urls2.8 default_packages2…...
ffmpeg命令详解
原文网址:ffmpeg命令详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍ffmpeg命令的用法。 命令示例 1.mp4和avi的基本互转 ffmpeg -i D:\input.mp4 E:\output.avi ffmpeg -i D:\input.avi E:\output.mp4 -i 表示input,即输入。后面填一个输入地址和一…...
asyncio.run() 里面嵌套 asyncio.run() 可以吗?
[TOC](asyncio.run() 里面嵌套 asyncio.run() 可以吗?) 在 Python 的异步编程中,asyncio 是一个非常重要的模块,它提供了编写单线程并发代码的基础设施。asyncio.run() 是一个方便的函数,用于运行一个协程并管理事件循环的生命周…...
flutter in_app_purchase google支付 PG-GEMF-01错误
问题:PG-GEMF-01错误 flutter 使用in_app_purchase插件升降级订阅时报错PG-GEMF-01。 解决方案: 升降级订阅时,确保不调用 MethodCallHandlerImpl.java文件中的 setObfuscatedAccountId()方法、setObfuscatedProfileId()方法 原因…...
Flink 离线计算
文章目录 一、样例一:读 csv 文件生成 csv 文件二、样例二:读 starrocks 写 starrocks三、样例三:DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…...
排序算法之插入排序篇
插入排序 思路: 就是将没有排序的元素逐步地插入到已经排好序的元素后面,保持元素的有序 视频的实现过程如下: 插入排序全过程 代码实现过程如下: public static void Insertion(int[] arr) { for (int i 1; i < arr.length…...
(11)(2.2) BLHeli32 and BLHeli_S ESCs(二)
文章目录 前言 1 传递支持 前言 BLHeli 固件和配置应用程序的开发是为了允许配置 ESC 并提供额外功能。带有此固件的 ESC 允许配置定时、电机方向、LED、电机驱动频率等。在尝试使用 BLHeli 之前,请按照 DShot 设置说明进行操作(DShot setup instructions)。 1 传…...
Unity之一键创建自定义Package包
内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之一键创建自定义Package包 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! …...
【AI】JetsonNano启动时报错:soctherm OC ALARM
1、问题描述 将JetsonNano烧写SD卡镜像为Ubuntu20.04后,启动时报错:soctherm OC ALARM,启动失败;然后系统一直重启 2、原因分析 “soctherm OC ALARM”是检测到系统温度超过安全阈值时发出的过热警告。 “soctherm”代表系统…...
道路机器人识别交通灯,马路,左右转,黄线,人行道,机器人等路面导航标志识别-使用YOLO标记
数据集分割 train组66% 268图片 validation集22% 91图片 test集12% 48图片 预处理 没有采用任何预处理步骤。 增强 未应用任何增强。 数据集图片: 交通灯 马路 右转 向右掉头 机器人识别 人行横道 黄线 直行或右转 数据集下载: 道路…...
电子应用设计方案-31:智能AI音响系统方案设计
智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备,通过融合语音识别、自然语言处理、音频播放等技术,为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…...
SQL优化与性能——数据库设计优化
数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目,合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间,并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…...
脑网络组织与心跳动力学之间的耦合测量
摘要 近年来,人们对脑心相互作用的研究兴趣日益浓厚。许多研究提出了新的方法来探究大脑与心脏如何通信,从而对一些神经功能有了新的认识。然而,大多数框架只关注单个脑区域与心跳动态之间的相互作用,忽略了大脑的功能网络会随着…...
图像显示的是矩阵的行和列,修改为坐标范围。
x 3; y 3; f1x x^2 y^2; guance1 f1x; F (x, y) sqrt((x.^2 y.^2 - guance1).^2); % 使用点乘 [x, y] meshgrid(0:1:5, 0:1:5); Z F(x, y); figure; imagesc(Z); % 由于 imagesc 使用矩阵索引作为坐标,我们需要手动添加刻度 % 这里我们假设 x 和 y 的范围…...
一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单
近日,由 FreeBuf 主办的 FCIS 2024 网络安全创新大会在上海隆重举行。大会现场揭晓了第十届 WitAwards 中国网络安全行业年度评选获奖名单,该评选自 2015 年举办以来一直饱受赞誉,备受关注,评选旨在以最专业的角度和最公正的态度&…...
[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue大景区订票(购票)系统,分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…...
力扣215:数组中第K大的元素
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,6,4],k 2 …...
永久停用PostgreSQL 归档功能
文章目录 引言永久停用归档功能归档的优势归档的劣势开启归档的情况关闭归档的情况see also引言 PostgreSQL 是一个开源的关系型数据库系统,支持数据归档(WAL),可以实现数据备份、恢复和灾难恢复等功能。在使用 PostgreSQL 的过程中,如果 PostgreSQL 数据库开启了归档(a…...
23种设计模式-原型(Prototype)设计模式
文章目录 一.什么是原型设计模式?二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图: 原型设计模式类图 一.什么是原型设计模式? 原型模式(Prototype…...
【Linux】-学习笔记06
第二章、时间同步服务器 2.1时间同步服务器的使用 2.1.1系统时区时间的管理 timedatectl set-time "2024-02-13 10:41:55" ##设定系统时间 timedatectl list-timezones ##显示系统的所有时区 timedatectl set-timezone "Asia/Shangh…...
李永平:以科技创新为引擎,驱动中国国际未来产业研究院不断前行
作者:李望 在科技创新与产业升级的滚滚洪流中,唯有洞察未来者,方能引领时代浪潮。近日,中国国际未来产业研究院迎来了重量级嘉宾——李永平院士。他的加盟,为研究院注入了全新的活力。作为业界的领军人物,李永平院士将担任研究院常务副院长、资深专家及高级法律顾问,共同规划未…...
netconf 代码架构
NETCONF(Network Configuration Protocol)是一种基于 XML 的网络配置管理协议,主要用于在网络设备之间进行配置管理、状态监控和操作。它被设计为一种可扩展的协议,并且在自动化网络管理中扮演着重要角色。NETCONF 通过安全的通信…...
【查询目录】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...
广域网技术
企业需要通过广域网将这些分散在不同地理位置的分支机构连接起来 早期广域网技术概述 广域网:连接不同地区局域网的网络,能够横跨几个洲提供远距离通信,形成国际性的远程网络 广域网设备角色介绍: CE:用户端连接服务…...
基于Java Springboot 求职招聘平台
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue2、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&…...
C学习:移位幻影之左移一个负数,会发生什么?
C学习:移位幻影之左移一个负数,会发生什么? 问题背景无符号数移位问题有符号数移位操作使低位置零问题 问题背景 C语言中,移位是个简单的问题,但又是个高风险的问题。 简单在于,大部分场景都可以理解为乘或…...
[2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(2))
方法一(string): #include <iostream> #include <string> using namespace std;// 检查是否为回文数 bool isPalindrome(int n) {string str to_string(n);int left 0, right str.size() - 1;while (left < right) {if (s…...
加载语言包的方式
推荐方式:使用 JSON 或 XML 文件结合解析库 JSON: 优点:轻量级,结构清晰,解析库(如 nlohmann/json)易用。示例内容: json 复制代码 { "en": { "greeting": &qu…...
深入了解 Adam 优化器对显存的需求:以 LLaMA-2 7B 模型为例 (中英双语)
中文版 深入了解 Adam 优化器对显存的额外需求:模型参数与优化器状态的显存开销分析 在深度学习模型的训练过程中,显存是一个关键的资源,尤其在处理大型语言模型或深度神经网络时。训练时的显存需求不仅包括模型参数本身,还涉及…...
深入理解CSS语法:掌握Web开发的基石
深入理解CSS语法:掌握Web开发的基石 在构建现代网页的过程中,层叠样式表(CSS)扮演着至关重要的角色。它不仅负责定义HTML元素的视觉表现,还极大地增强了Web内容的可访问性和用户体验。本文将深入探讨CSS的语法、书写位…...
基于python爬虫的智慧人才数据分析系统
废话不多说,先看效果图 更多效果图可私信我获取 源码分享 import os import sysdef main():"""Run administrative tasks."""os.environ.setdefault(DJANGO_SETTINGS_MODULE, 智慧人才数据分析系统.settings)try:from django.core.m…...
创建maven私人创库nexus
1.到官网下载nexus-3.74.0-05-unix.tar.gz包,若下载慢可以去这里下载地址 2.上传到liunx的根目录opt文件中,然后解压命令: tar -xzf nexus-3.74.0-05-unix.tar.gz 3.解压后会得到两个文件夹nexus-3.74.0-05 和 sonatype-work ,…...
眼部按摩仪WT2605音频蓝牙语音芯片方案 单芯片实现语音提示及控制/手机无线音频传输功能
随着科技的快速发展,人们的生活方式也在不断改变,智能化、便捷化的产品逐渐成为市场的主流。眼部按摩仪作为一种结合了现代科技与健康生活理念的产品,受到了广大消费者的青睐。而在众多眼部按摩仪中,采用WT2605音频蓝牙芯片的方案…...
【面试题】2025年百度校招Java后端面试题
文章目录 前言一、网络IO1、服务器处理并发请求有哪几种方式?2、说一下select,poll,epoll的区别?3、Java 有一种现代的处理方式,属于异步I/O,是什么?redis,nginx,netty 是…...
Java面向对象. 多态
目录 java多态是什么东西?首先要理解什么是多态 Java多态指同一行为具有多个不同表现形式。如父类引用指向子类对象,调用重写方法时呈现不同结果。 1.多态的概念 一、多态的基本概念 二、多态的实现方式 接口实现 三、多态的好处 提高代码的可扩展…...
Vue 项目中有哪些内存泄漏的场景,以及预防内存泄漏技巧
前言 即便是功能强大的 Vue.js 也无法完全避免内存泄漏的问题,内存泄漏不仅会影响应用的性能,还可能导致浏览器崩溃。因此,识别和解决 Vue 项目中的内存泄漏问题是确保项目稳定性和性能的关键。 本文将通俗易懂地介绍 Vue 项目中常见的内存泄…...
MySQL Inception工具
MySQL Inception是一个强大的数据库变更管理和审计工具,主要用于审核、执行、备份以及回滚数据库操作。它的工作模式和MySQL完全相同,可以直接使用MySQL客户端来连接,但不需要验证权限。Inception相对于应用程序(上层审核流程系统…...
Linux(Centos7)---安装nginx(很简单)
安装 sudo yum install nginx -y开机启动与开启服务 sudo systemctl enable nginx sudo systemctl start nginx...
多数元素
多数元素 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出ÿ…...
vim编辑器的一些配置和快捷键
记录vim编辑器的一些配置和快捷键,边学边用: yy 复制dd 删除p:粘贴ctrly 取消撤销u:撤销:w 写入:q 退出a/i 插入O: 上方插入一个空行o:下方插入一个空行:e 打开文件编辑 其他配置: 上移一行和下移一行&a…...
SeggisV1.0 遥感影像分割软件【源代码】讲解
在此基础上进行二次开发,开发自己的软件,例如:【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等,不管是您用来个人学习还是公司研发需求,都相当合适,包您满…...
14 —— Webpack解析别名
import {checkPhone, checkCode} from ../src/utils/check.js 这么使用相对路径不安全 —— 在webpack.config.js中配置解析别名来代表src绝对路径...
《C++ Primer Plus》学习笔记|第8章 函数探幽 (24-11-30更新)
文章目录 8.1 内联函数8.2 引用变量8.2.1 创建引用变量8.2.2 将引用用作函数参数8.2.3 引用的属性和特别之处特点1:在计算过程中,传入的形参的值也被改变了。特点2:使用引用的函数参数只接受变量,而不接受变量与数值的运算左值引用…...
vscode的项目给gitlab上传
目录 一.创建gitlab帐号 二.在gitlab创建项目仓库 三.Windows电脑安装Git 四.vscode项目git上传 一.创建gitlab帐号 二.在gitlab创建项目仓库 图来自:Git-Gitlab中如何创建项目、创建Repository、以及如何删除项目_gitlab新建项目-CSDN博客) 三.Windows电脑安…...
【JVM什么时候触发YoungGC和FullGC】
YoungGC 年轻代Eden区满,就会触发YoungGC FullGC 老年代空间不足 经过多次GC后的大年龄对象会被放进老年代,或创建的大对象会直接在老年代分配,此时若老年代空间不足,就会触发FullGC。空间分配担保失败 触发YoungGC的时候会进行…...
Mybatis-批量删除用户
目录 题目: 1、创建Maven项目,在pom.xml中添加相关依赖 2、创建db.properties配置数据库信息 3、在resources下创建mybatis-config.xml核心配置文件 易错点: 4、在java中创建User.java,在java/com/haust/pojo下 5、在java中…...