- 博客(1890)
- 资源 (12)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 小工匠聊架构文章一览【不间断持续更新】
文章目录超高并发设计技术杂谈超高并发设计小工匠聊架构-超高并发秒杀系统设计 01_总体原则和架构演进小工匠聊架构-超高并发秒杀系统设计 02_数据的动静分离小工匠聊架构-超高并发秒杀系统设计 03_热点数据的处理小工匠聊架构-超高并发秒杀系统设计 04_流量削峰设计小工匠聊架构-超高并发秒杀系统设计 05_服务端性能优化小工匠聊架构-超高并发秒杀系统设计 06_数据一致性小工匠聊架构-超高并发秒杀系统设计 07_Plan B 的设计技术杂谈小工匠聊架构-写给研发工程师的全链路压测小
2020-11-12 00:01:55
77631
8
原创 Simple RPC - 07 从零开始设计一个服务端(下)_RPC服务的实现
这种通过“请求中的类型”,把请求分发到对应的处理类或者处理方法的设计,在服务端处理请求的场景中,这是一个很常用的方法。我们这里使用的也是同样的设计,不同的是,我们使用了一个命令注册机制,让这个路由分发的过程省略了大量的 if-else 或者是 switch 代码。把服务的实现类注册到 RPC 框架中,这个逻辑的实现很简单,我们只要使用一个合适的数据结构,记录下所有注册的实例就可以了,后面在处理客户端请求的时候,会用到这个数据结构来查找服务实例。类,根据服务名分发到具体的服务实现类。这个类的唯一的一个实例。
2024-08-24 18:38:35
413
原创 加密与安全_解密AES加密中的IV和Seed
在AES加密中,**IV(Initialization Vector,初始化向量)和Seed(种子)**是两个不同的概念,尽管它们都涉及到随机性和加密安全性,但用途和作用有所不同。
2024-08-21 20:45:00
637
原创 加密与安全_双向RSA+AES加密及Code实现
使用RSA来安全地交换AES密钥。AES用来加密实际的数据,确保数据传输的安全性和效率请注意保护好自己的私钥,不可泄露通过这种双向加密的方式,客户端和服务端能够安全地互相传递敏感信息,同时确保即使通信内容被截获,也无法被解读。
2024-08-20 20:45:00
1308
原创 Simple RPC - 06 从零开始设计一个服务端(上)_注册中心的实现
注册中心和RPC服务。注册中心:负责管理服务元数据,并提供服务发现的功能。RPC服务:负责处理客户端发来的RPC请求,并调用相应的业务服务。简单来说:注册中心的作用是帮助客户端来寻址,找到对应 RPC 服务的物理地址;RPC 服务用于接收客户端桩的请求,调用业务服务的方法,并返回结果。
2024-08-17 23:45:43
1067
原创 Simple RPC - 05 从零开始设计一个客户端(下)_ 依赖倒置和SPI
接Simple RPC - 04 从零开始设计一个客户端(上),我们继续分析 依赖倒置和SPI是如何实现的。接口定义了创建桩的方法,而具体的实现类实现了该接口。通过依赖倒置原则(DIP)和SPI机制,我们有效地解耦了调用方与实现类。在这个RPC框架中,接口及其实现类之间的依赖关系被逆转,调用方只依赖接口,而不直接依赖具体实现。SPI机制进一步解耦了调用方与实现类的实例化,使得在运行时可以动态加载实现类,这为框架的扩展性和灵活性提供了强有力的支持。通过这种设计,框架可以很容易地替换。
2024-08-17 15:27:05
1143
原创 Simple RPC - 04 从零开始设计一个客户端(上)
生成源代码:根据给定的接口定义,生成“桩”类的 Java 源代码。这个类将实现指定接口,并包含将方法调用转化为 RPC 请求的逻辑。动态编译:将生成的源代码编译成字节码(.class 文件),这个过程可以在运行时完成。加载类:将编译生成的字节码加载到 JVM 中,使得生成的类可以在当前应用中使用。
2024-08-17 11:00:52
909
原创 Simple RPC - 03 借助Netty实现异步网络通信
首先定义了对外提供服务的接口。这样,服务的使用者只需要依赖这个接口,而不需要关心其具体实现。这种设计的好处在于,它有效地解耦了接口的使用者和实现者,使我们能够安全地替换接口的实现。通过将接口定义得尽量通用,接口就可以独立于具体的使用场景,从而实现高度的复用性。例如,RPC框架中的网络传输和序列化代码,不仅能在这个框架中使用,甚至可以直接应用到其他系统中,而无需进行修改。在协议设计方面,我们为每个命令设计了一个固定的头部信息。
2024-08-14 22:49:44
1181
原创 LInux - 一文了解 ssh端口敲门knock
是一种网络安全措施,用于防止未经授权的访问。通过端口敲门,可以动态地在防火墙上打开指定端口(如SSH端口),仅允许符合特定敲门序列的用户访问。此技术通常用于隐藏重要服务(例如SSH),以防止暴力破解或其他未经授权的攻击。在此配置中,当用户按顺序敲击7000、8000、9000端口时,防火墙会打开22端口(SSH端口);反向敲击(9000、8000、7000)则会关闭该端口。工具来实现端口敲门。以Linux系统为例,可以使用。
2024-08-12 19:30:00
717
原创 Spring Boot - 开启log-request-details详细记录调测Controller接口
在Spring Boot项目中,调试Controller接口的请求和响应信息可以极大地帮助开发人员排查问题并确保应用程序的安全性和性能。
2024-08-10 06:45:00
665
原创 Spring Boot - 通过ServletRequestHandledEvent事件实现接口请求的性能监控
在Spring框架中,监控接口请求的性能可以通过事件实现。这种方法简单有效,能够帮助开发者实时跟踪和分析请求的性能。概述:自定义拦截器可以用来在请求处理的不同阶段(如请求前、请求后、请求完成后)添加额外的逻辑。实现步骤实现接口,覆盖其中的方法,如preHandlepostHandle、和。在这些方法中记录请求开始时间、结束时间,计算处理时间。将拦截器注册到Spring MVC配置中。示例代码@Override@Override。
2024-08-09 22:03:59
929
原创 Spring Boot - 在Spring Boot中实现灵活的API版本控制(下)_ 封装场景启动器Starter
import org/*** 接口版本标识注解/*** 指定API的版本号。* 此方法返回一个整型数组,数组中的每个元素代表一个API版本号。* @return 代表API版本号的整数数组。/*** 接口版本标识注解/*** 指定API的版本号。* 此方法返回一个整型数组,数组中的每个元素代表一个API版本号。* @return 代表API版本号的整数数组。/*** 接口版本标识注解/*** 指定API的版本号。
2024-08-08 17:30:36
1377
原创 Spring Boot - 在Spring Boot中实现灵活的API版本控制(上)
实现方式:通过自定义注解标记API版本,并使用拦截器进行版本控制。步骤创建自定义注解创建版本拦截器@Override= null) {配置拦截器@Override在控制器中使用注解// 返回 V1 版本的产品列表// 返回 V2 版本的产品列表。
2024-08-07 21:00:19
1452
原创 计网 - 传统的类网络划分 vs 无类别域间路由CIDR
CIDR 克服了传统类网络划分的诸多局限,提供了一种更加灵活、高效的 IP 地址管理方式。通过支持动态的子网划分和路由聚合,CIDR 在现代网络中得到了广泛应用。
2024-07-30 22:42:00
1171
1
原创 Ip2region - 转换ip.merge.txt规则为CIDR格式的Nginx规则
【代码】Ip2region - 转换ip.merge.txt规则为CIDR格式的Nginx规则。
2024-07-29 05:30:00
799
原创 Ip2region - 基于xdb离线库的Java IP查询工具提供给脚本调用
然后会在当前目录的 target 目录下得到一个 ip2region-{version}.jar 的打包文件。当然了,启动java进程的过程,相对还是比较耗时的,这里仅提供一种思路。这样就可以愉快的在脚本中调用了。
2024-07-28 22:04:49
759
原创 Ip2region - xdb java 查询客户端实现
OpenSource - Ip2region 离线IP地址定位库和IP定位数据管理框架完全基于文件的查询缓存 索引我们可以提前从 文件中加载出来 数据,然后全局缓存,每次创建 Searcher 对象的时候使用全局的 VectorIndex 缓存可以减少一次固定的 IO 操作,从而加速查询,减少 IO 压力。缓存整个 数据我们也可以预先加载整个 ip2region.xdb 的数据到内存,然后基于这个数据创建查询对象来实现完全基于文件的查询,类似之前的 memory search。编译测试
2024-07-28 21:33:46
633
原创 OpenSource - Ip2region 离线IP地址定位库和IP定位数据管理框架
并发安全的实现,不同进程/线程/协程需要通过创建不同的查询对象来安全使用,并发量很大的情况下,基于文件查询的方式可能会导致打开文件数过多的错误,请修改内核的最大允许打开文件数(fs.file-max=一个更高的值),或者将整个xdb加载到内存进行安全并发使用。格式生成程序会自动去重和压缩部分数据,默认的全部 IP 数据,生成的 ip2region.xdb 数据库是 11MiB,随着数据的详细度增加数据库的大小也慢慢增大。如果你想通过你自己的 API 或数据源来更新数据,你可以参考以下视频分享的。
2024-07-28 21:08:56
1099
原创 Spring Boot - 优雅实现支持通配符和IP段的IP访问黑白名单机制
IP访问黑白名单机制在许多场景中是非常必要的,其主要目的在于提高系统的安全性和控制访问权限。以下是一些主要原因:1. 安全性防止恶意攻击通过限制特定IP地址的访问,可以有效防止DDoS攻击、暴力破解和其他形式的恶意访问。减少暴露面仅允许特定的可信IP访问系统,可以减少潜在攻击者的攻击面。2. 访问控制区分内部和外部访问在企业环境中,可以限制只有内部IP(例如公司局域网IP)才能访问某些敏感资源。按区域限制访问可以根据地理位置或区域限制访问,例如只允许来自特定国家的IP访问。
2024-07-26 20:15:00
1159
原创 加密与安全_密钥体系的三个核心目标之不可否认性解决方案
解释消息认证码的基本概念及其局限性。介绍数字证书及其在身份认证中的重要性。解释CA的角色和PKI的基本概念。描述CA的主要功能及证书的层级结构。讨论证书在安全通信中的必要性。说明信任CA的原因。在消息认证码中,我们可以证明消息没有发生过篡改。但却无法证明这个消息就是 Alice 发给 Bob 的。因为计算消息认证码所需的数据,Bob 和 Alice 都有,所以从理论上 Bob 是可以伪造这条"消息"的。如果想做到消息的"无可抵赖性",就需要证明"Alice 是 Alice"。
2024-07-08 22:45:00
1251
原创 加密与安全_密钥体系的三个核心目标之完整性解决方案
确保信息的机密性完整性和不可否认性是密钥体系的重要目标。对称密码和非对称密码主要解决机密性问题。哈希函数、消息认证码(MAC)和数字签名是实现消息完整性和不可否认性的主要技术手段。应用建议对于大数据量的加密,使用对称密码如AES。对于身份验证和不可否认性,结合使用非对称密码和数字签名。对于消息完整性,使用哈希函数和消息认证码。
2024-07-08 21:15:00
1681
原创 加密与安全_ 解读非对称密钥解决密钥配送问题的四个方案
非对称密钥就是为了解决密钥配送问题,通常采用的方案有四个共享密钥密钥分配中心Diffie-Hellman 密钥交换公钥密码介绍共享密钥的定义、工作原理、优缺点及应用场景。讲解密钥分配中心的定义、工作原理、优缺点及应用场景。详细说明Diffie-Hellman密钥交换体系的定义、工作原理、优缺点及应用场景。介绍公钥密码体系的定义、工作原理、优缺点及应用场景,并详细说明RSA算法。
2024-07-07 23:43:41
1624
原创 加密与安全_常见的分组密码 ECB、CBC、CFB、OFB模式介绍
介绍分组密码基本概念。讲解ECB模式的工作原理、优缺点及应用场景。详细介绍CBC模式的工作原理、优缺点及应用场景。说明CFB模式的工作原理、优缺点及应用场景。解释OFB模式的工作原理、优缺点及应用场景。总结并给出模式选择的建议。模式是分组密码的迭代算法比如我们常使用的 DES 算法中的 ECB 模式。ECB 模式就是将明文分割成多个分组并逐个加密的方法。ECB 算法计算量小,加解密速度快,但现在已经证实 ECB 是不可靠的模式了。所以正式场合中不要使用 ECB 模式。
2024-07-07 23:19:38
1990
原创 加密与安全_三种方式实现基于国密非对称加密算法的加解密和签名验签
无需秘钥,“加密”后的数据不可逆。所以这也不算是“加密”,一般称为哈希(Hash)。任何长度的数据生成的哈希值长度都固定。相同数据每次生成的哈希值相同,不同的数据则不同。数据摘要/哈希,验证数据是否被篡改、或数据丢失,保障数据的完整性、不可篡改性。单向加密保存数据,如密码的保存,密码的存储普遍都是存的哈希值,登录时比较其hash值即可。
2024-06-30 09:01:33
2374
原创 加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库
无需秘钥,“加密”后的数据不可逆。所以这也不算是“加密”,一般称为哈希(Hash)。任何长度的数据生成的哈希值长度都固定。相同数据每次生成的哈希值相同,不同的数据则不同。数据摘要/哈希,验证数据是否被篡改、或数据丢失,保障数据的完整性、不可篡改性。单向加密保存数据,如密码的保存,密码的存储普遍都是存的哈希值,登录时比较其hash值即可。
2024-06-28 20:45:00
3066
原创 Maven - 在没有网络的情况下强制使用本地jar包
文件后,重新加载 Maven 依赖,确认 IDEA 不再尝试从 Nexus 私服拉取依赖,并成功使用本地仓库中的 JAR 文件。奈何默认情况下, IDEA依然从Nexus拉取,导致会产生一个lastUpdated文件,IDEA认为没有拉取下来,工程编译不过。在非互联网环境中,如果 Nexus 私服无法连接,而本地仓库和服务器上已经有了所需的 JAR 依赖,可以通过删除本地仓库中的。),因为此命令将删除所有匹配的文件,并且无法恢复。文件,强制 Maven 使用本地仓库中的依赖。Nexus私服故障,无法连接。
2024-06-28 13:15:00
1900
原创 加密与安全_ Jasypt (Java Simplified Encryption)不完全指北
Jasypt 是一个 Java 库,它允许开发人员以最小的努力添加基本的加密功能,并且不需要深入了解密码学的工作原理。高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码、文本、数字、二进制文件…与 Hibernate 的透明集成适合集成到基于 Spring 的应用程序中,也可以与 Spring Security 透明集成用于加密应用程序配置(即数据源)的集成功能多处理器/多核系统中高性能加密的特定功能开放 API,可与任何 JCE 提供商一起使用。
2024-06-27 21:45:00
1317
原创 Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置
是 Linux 系统中的一个虚拟目录,属于/proc文件系统的一部分。/proc文件系统提供了一种与内核交互的方式,其中的许多文件允许我们查看和调整内核的行为。目录专门用于内核的虚拟内存(Virtual Memory)管理相关的参数设置。目录提供了丰富的内存管理参数,允许用户根据具体需求优化系统性能。理解并合理配置这些参数,可以显著提高 Linux 系统的效率和稳定性。
2024-06-24 05:15:00
1364
原创 Linux - 利用/proc/sys/vm/drop_caches实现手工清理系统缓存
通常情况下,不需要手动清理缓存,因为 Linux 内核会自动管理这些资源,确保内存的高效利用。然而,在一些特定情况下(如性能测试或内存紧张),可能需要手动清理缓存。列表示系统用于缓冲和缓存的内存。它占用了内存,但这些内存可以随时被释放并分配给其他进程,因此实际并不会导致内存不足。使用free 命令,看到 buff/cache 占用很多。命令用于显示系统内存的使用情况。它的作用是清理系统缓存。该命令分为两个部分,通过。
2024-06-23 15:44:30
1679
原创 Linux - 记一次某Java程序启动报错(申请内存失败)
文件系统中的相应文件写入值来实现。这种方法在系统重启后会失效,需要重新设置。在 Linux 上,调整内存相关参数可以临时或永久改变系统的内存管理行为。为了使内存参数的调整在系统重启后依然有效,可以将这些设置写入。错误,这通常表明系统在尝试分配内存时遇到了问题。显示内存没有被限制,但仍可能有其他原因导致该问题。在 Linux 上部署项目时遇到。命令显示有足够的可用内存,并且。目录下创建一个新的配置文件。临时调整内存参数可以通过向。启动的时候直接抛出如下异常。
2024-06-23 13:19:21
1942
原创 Linux - 复盘一次句柄数引发的故障
对于系统服务,特别是使用 Systemd 的系统,还可以在服务单元文件(位于 /etc/systemd/system/ 或 /lib/systemd/system/)中通过 LimitNOFILE= 设置最大打开文件数。请记住,修改这些设置可能会影响系统性能和稳定性,特别是在提高限制时,可能会消耗更多的系统资源。因此,在进行任何更改之前,最好先评估其影响,并确保有足够的资源来支持增加的句柄数。对于 Systemd 管理的服务,则需执行。修改配置文件后,可能需要重启相关服务或用户会话使设置生效。
2024-06-12 21:45:00
2236
原创 Linux - 深入理解/proc虚拟文件系统:从基础到高级
通过读取/proc/stat和/proc/loadavg等文件,可以获取CPU使用情况和系统负载信息,这对于性能监控和容量规划非常有用。虚拟内存管理是系统性能优化的重要方面,通过监控/proc/vmstat文件,可以了解系统的虚拟内存使用情况,并进行相应的调优。监控系统的CPU使用情况是系统管理员的常见任务,通过读取/proc/stat文件,可以获取每个CPU的使用情况。/proc/sys/fs/file-nr文件可以用于监控系统中文件句柄的使用情况,以防止文件句柄耗尽的问题。
2024-06-07 06:27:03
2604
原创 Git - 详解 创建一个新仓库 / 推送现有文件夹 / 推送现有的 Git 仓库 到私有Gitlab
1. 创建Gitlab项目登录到你的Gitlab账户。点击页面右上角的“New Project”按钮。选择“Create blank project”。输入项目名称并选择可见性级别(public或private)。点击“Create project”按钮。
2024-06-07 05:23:18
2430
原创 加密与安全_AES & RSA 密钥对生成及PEM格式的代码实现
RSA加密算法的填充模式是确保数据安全性和算法有效性的关键。ENCRYPTION_OAEP、ENCRYPTION_PKCS1和ENCRYPTION_NONE各有优缺点和适用场景。在实际应用中,根据具体需求选择合适的填充模式,能够有效提升加密的安全性和性能。主要特点:对称加密:同一个密钥用于加密和解密。块加密:以固定大小的块(128位)对数据进行加密。高效性:比公钥加密算法快很多,适用于需要高性能的数据加密场景。主要缺点:密钥管理:需要加密端和解密端都使用相同的密钥,密钥分发和管理较为复杂。
2024-05-26 17:32:11
1739
原创 Windows - 通过BAT脚本自动添加出入站规则
运行脚本后,您可以查看每个端口的防火墙规则是否成功创建。确保规则已启用且端口已被阻止。确保规则已启用且端口已被阻止。
2024-05-23 07:00:00
1567
原创 Linux - 用iptables构建主机防火墙安全
设置主机防火墙在网络安全中具有重要意义。主机防火墙是一种软件或硬件系统,可以监控和控制进出主机的网络流量。主机防火墙可以限制网络流量,防止未经授权的访问进入主机。这有助于防止恶意攻击者通过网络攻击入侵系统或窃取敏感信息。通过仅允许特定的网络流量通过,主机防火墙可以减少系统的攻击面,从而降低系统受到攻击的可能性。它可以阻止许多常见的网络攻击,如端口扫描、拒绝服务攻击等。主机防火墙可以监控主机上的网络流量,并记录网络活动。这有助于发现潜在的安全问题,以及跟踪和调查安全事件。
2024-05-23 05:30:00
1935
原创 分布式 - AT、TCC、SAGA、XA四种分布式事务模型的工作原理和应用场景
分布式事务模型是为了在分布式系统中保证数据一致性而设计的。常见的分布式事务模型包括AT、TCC、SAGA、XA等。阿里云开源的Seata框架支持这些模型,并提供了一站式的分布式事务解决方案。
2024-05-22 06:45:00
1084
原创 分布式 - 从CAP到PACELC_分布式系统的一致性与可用性权衡
CAP 定理:强调在分布式系统中,一致性、可用性和分区容错性三者不可兼得,必须在一致性和可用性之间进行选择。BASE 模型:强调基本可用性、软状态和最终一致性,适用于高可用性和扩展性要求高的系统。PACELC 定理:扩展了CAP定理,指出在没有网络分区的情况下,系统需要在延迟和一致性之间进行权衡。这些理论和模型为设计和理解分布式系统提供了重要的指导原则,帮助开发者在不同的应用场景中做出合适的设计选择。
2024-05-22 05:15:00
1036
原创 ElasticSearch - 删除已经设置的认证密码(7.x)
删除Elasticsearch密码虽然可以简化测试环境,但应小心操作,确保在生产环境中保持严格的安全配置。在生产环境中,应始终保持和增强Elasticsearch的安全配置,以确保数据的完整性和安全性。首先,确认您的Elasticsearch集群是否启用了安全性功能。您可以通过检查配置文件。在修改配置文件前,首先需要停止Elasticsearch服务。ES 8.x ,可以使用Elasticsearch提供的。如果返回了集群的状态信息而未要求认证信息,说明配置已生效。,移除或注释掉与安全相关的配置。
2024-05-21 19:45:00
1826
X86-NFS rpm包
2020-11-24
中标龙芯-MIPS- NFS rpm包
2020-11-24
mybatisSource.zip
2020-06-14
apache-tomcat-8.5.50-src.zip
2020-06-02
「Tomcat源码剖析」.pdf
2020-06-01
Jest-5.3.4.zip
2020-01-19
Spring4CachingAnnotationsExample
2017-10-04
Java反编译工具
2015-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人