Java知识点补充

devtools/2024/10/15 22:12:03/

反向代理的作用是什么?

是位于客户端和服务端之间一个代理模型,接受客户端的请求,将其转发到后端服务中,然后将后端响应传回客户端。

  1. 负载均衡:减少单个服务器之间的压力,将流量重定向到多个服务器中常见的负载均衡算法有:轮询法(按照请求时间一个一个来),权重轮询(会进行访问数的统计),IP哈希(根据请求者的ip的hash值进行请求分发),url哈希

  2. 缓存数据:反向代理可以缓存经常请求的数据,减少对后端服务器的访问次数,提高系统的性能。

  3. 通过反向代理,管理员可以监控和管理后端服务器的状态,包括健康检查、服务降级等,确保系统的稳定性和可靠性。

ID生成策略

主键自增id

主键自动增长,不用手工设值、数字型,占用空间小、检索非常有利、有顺序,不会重复,但在迁移旧数据是会出现id冲突

UUID

基于时间,计数器和地址生成32位的id

redis生成id

原子性自增,并发性能高,id格式可以自定义

雪花算法

64位long型的id,按时间递增

UidGenerator

基于Snowflake算法的唯一ID生成器,适用于高并发

美团leaf算法

全局唯一,绝对不会出现重复的ID,且ID整体趋势递增

上下文切换与密集型任务计算

当前任务在执行完CPU时间片后切换到另一个任务之前会保存自己的状态,以便于下一次切换回来可以继续加载该任务,任务从保存到再加载的过程就是一次上下文切换

CPU密集型任务(N+1)

这种任务主要消耗的时CPU的资源,我们可以将线程数设置为核心数+1,多出来的一个是为了防止线程偶发的缺页中断,或者其他任务导致的任务暂停

IO密集型任务(2N)

系统会用大部分的时间来处理 I/O 交互,而线程在处理 I/O 的时间段内不会占用 CPU 来处理,这时就可以将 CPU 交出给其它线程使用。因此在 I/O 密集型任务的应用中,我们可以多配置一些线程,具体的计算方法是 2N。

如何判断

CPU密集型简单来说就是利用CPU的计算能力来完成任务例如在内存中进行排序,但凡涉及到网络读取,文件读取这类都是 IO 密集型,这类任务的特点是 CPU 计算耗费时间相比于等待 IO 操作完成的时间来说很少,大部分时间都花在了等待 IO 操作完成上。

设计一个接口的原则

  1. 单一职责原则:每个接口只负责一个功能的实现,避免将不相关的功能混合

  2. 接口隔离原则:设计多个接口而不是共同依赖同一个接口,减少客户端与接口的耦合

  3. 依赖导致原则:要依赖于抽象,而不是依赖于具体,应该面向抽象层,而不是具体的实现。这有助于降低耦合度,提高系统的可维护性和可扩展性。

  4. 简单性:只包含必要的方法

  5. 向上兼容性:,接口应保持向前兼容性,即新版本的接口应兼容旧版本的接口,以便在不中断现有客户端的情况下进行升级。

  6. 可拓展性:在之后添加新功能时,不应破坏现有接口

  7. 安全性:进行必要的安全认证和加密

一致性哈希

场景:我们希望将三万张图片均匀的分布在三台服务器上,此时我们可以对N进行取模运算,也就是三万%3得到的结果为0,1,2,但当我们的请求增多后,我们想要新设立一个服务器,此时服务器的数量为4个,因此除数变为4,此时我们的缓存在一定时间内是失效的,这是普通hash算法的一个缺陷。

一致性哈希介绍

  1. 将哈希值空间按照顺时针形成一个环结构,由2^32次方个点组成,称为哈希环

  2. 此时进行哈希运算,确定每个服务器IP在环中的位置,用IP对2^32取模运算

  3. 顺时针寻找到的第一个结点位置就是服务器位置

优点:

解决了普通哈希算法的缓存雪崩问题

就算设置了新的节点,也只会造成少部分的数据失效

缺点:

哈希偏斜:三台服务器的位置离的很近,还是会造成缓存雪崩的问题。

解决方案:采用虚拟节点映射,对每个节点计算多个哈希值,一个物理结点对应多个虚拟节点,虚拟节点越多,哈希环上的结点就越多,缓存均匀分布的概率就会越大,可以通过IP地址+编号的方式实现虚拟节点


http://www.ppmy.cn/devtools/24032.html

相关文章

大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

引言 有没有遇到过这样的情况:当你手持手机或相机准备拍摄视频时,心中已经构想了完美的画面,但却因为实际的限制无法捕捉到理想中的角度?这种情况可能会让人感到挫折。例如,如果想要从地面一只蚂蚁的视角拍摄&#xff…

Swift中日期的相互转换

在Swift中,可以使用DateFormatter类来进行日期的相互转换。以下是一些常用的转换示例: 将日期字符串转换为Date对象: let dateString "2021-01-01" let dateFormatter DateFormatter() dateFormatter.dateFormat "yyyy-M…

Mybatis(9):自定义映射resultMap

resultMap:一般用于处理字段名和属性名不一致问题,或者多对一 一对多问题 tips: 1. 数据库字段名一般命名未emp_id这种下划线,但是实体类一般采用驼峰命名,不能用下划线 2. id在数据库中一般是自增主键,在业务中创建实体类…

LangChain Routing 学习笔记

LangChain Routing 学习笔记 0. 引言1. 使用提示词2. 使用 RunnableLambda 0. 引言 在使用大语言模型开发应用时,其中一个场景就是根据不同的输入,调用(或者说路由到)不同的逻辑。这就好比我们以前开发时经常使用的if ... else .…

安卓manifest中的meta-data及其应用

目录 前言一、meta-data简介二、meta-data用法三、meta-data应用场景参考链接&#xff1a; 前言 在日常的Android开发中&#xff0c;AndroidManifest中总会出现一些< meta-data>标签&#xff0c;或是第三方SDK配置信息&#xff0c;或是系统配置&#xff0c;那么< met…

[SQL系列]从零开始学Clickhouse——集群篇

在上一篇中&#xff0c;我们通过Docker构建了一个简单的单点Clickhouse&#xff0c;但是如果要做大数据的处理的话&#xff0c;Clickhouse集群是必不可少的&#xff0c;今天我们先用Docker简单地搭建一个Clickhouse集群。 容器逐个部署 使用Docker部署ClickHouse集群涉及几个步…

20240331-1-基于深度学习的模型

基于深度学习的模型 知识体系 主要包括深度学习相关的特征抽取模型&#xff0c;包括卷积网络、循环网络、注意力机制、预训练模型等。 CNN TextCNN 是 CNN 的 NLP 版本&#xff0c;来自 Kim 的 [1408.5882] Convolutional Neural Networks for Sentence Classification 结…

如何查看连接的Linux服务器是ubuntu还是centos

测试环境 Ubuntu 22.04.4CentOS Linux release 7.9.2009 (Core) centos使用以下命令 cat /etc/centos-release结果 CentOS Linux release 7.9.2009 (Core)或者 cat /etc/issue结果 \S Kernel \r on an \mubuntu使用以下命令 cat /etc/issue结果 Ubuntu 22.04.4 LTS \n …