- 博客(1826)
- 资源 (12)
- 收藏
- 关注
原创 小工匠聊架构文章一览【不间断持续更新】
文章目录超高并发设计技术杂谈超高并发设计小工匠聊架构-超高并发秒杀系统设计 01_总体原则和架构演进小工匠聊架构-超高并发秒杀系统设计 02_数据的动静分离小工匠聊架构-超高并发秒杀系统设计 03_热点数据的处理小工匠聊架构-超高并发秒杀系统设计 04_流量削峰设计小工匠聊架构-超高并发秒杀系统设计 05_服务端性能优化小工匠聊架构-超高并发秒杀系统设计 06_数据一致性小工匠聊架构-超高并发秒杀系统设计 07_Plan B 的设计技术杂谈小工匠聊架构-写给研发工程师的全链路压测小
2020-11-12 00:01:55 69825 8
原创 Netty Review - 探究Netty优雅退出原理和源码解读
在实际项目中,Netty作为高性能的异步NIO通信框架,承担着各种协议的接入、解析和调度等任务,例如在RPC和分布式服务框架中,Netty常常被用作内部私有协议的基础通信框架。因此,在应用进程优雅退出时,Netty作为通信框架也需要进行优雅退出,以保证系统的稳定性和可靠性。优雅退出时,需要尽快释放NIO线程和句柄等底层资源,以确保资源的及时回收和释放,避免资源泄漏和性能问题。如果使用flush进行批量消息发送,需要确保将发送队列中积压的待发送消息发送完成,避免数据丢失和通信中断。
2024-03-10 23:43:32 1423
原创 Java - 探究Java优雅退出的两种机制
在Linux上通过方式强制终止进程的副作用,这种方式虽然简单高效,但也会带来一些问题,特别是对于应用软件而言。这些问题包括但不限于:数据丢失:由于缓存中的数据尚未持久化到磁盘中,强制终止进程可能导致数据丢失,尤其是对于数据库等需要持久化数据的应用。文件损坏:如果进程正在进行文件写操作,但尚未完成,突然退出可能导致文件损坏,进而影响数据完整性。请求丢失:如果线程的消息队列中有未处理的请求消息,强制终止进程可能导致请求消息丢失,进而影响系统的正常运行。
2024-03-10 15:43:14 829
原创 Netty Review - 探究Netty服务端主程序无异常退出的背后机制
在使用Netty进行服务端程序开发时,初学者可能会遇到各种问题,其中之一就是服务端意外退出的问题。这种问题可能会出现在程序启动后,没有发生任何异常的情况下,突然退出。导致这种情况发生的原因可能是代码中存在一些隐含的问题。接下来我们通过一个案例来演示一下这个问题。
2024-03-09 23:11:34 951
原创 加密与安全_PGP、OpenPGP和GPG加密通信协议
PGP (Pretty Good Privacy) 是一种加密通信协议,用于保护电子邮件和文件的安全性和隐私。它通过使用加密、数字签名和压缩技术来确保数据的保密性、完整性和可验证性。GP最初由麻省理工学院的Nick embrace和Eric Hughes开发,后来由Phil Zimmermann进一步发展。它使用公钥加密和私钥解密的机制,以确保只有信息的接收者才能解密和阅读邮件内容。PGP的主要优点是它易于使用,并能在大多数流行的电子邮件客户端中集成。然而,随着更高级的加密技术和标准(如OpenPGP和GP
2024-03-09 04:11:50 1059
原创 加密与安全_使用Java代码操作RSA算法生成的密钥对
在数字化时代,网络通信的安全性是必须关注的重要问题之一。非对称加密算法作为现代密码学的重要组成部分,为保护通信的隐私提供了一种可靠的解决方案。非对称加密算法,又称为公钥加密算法,是一种密码学中的重要概念。它与传统的对称加密算法不同,需要一对密钥:公钥和私钥。这对密钥之间存在着特殊的数学关系,但无法通过公钥推导出私钥,从而保证了通信的安全性。
2024-03-05 23:12:35 1540
原创 加密与安全_ 理解字节与比特
Byte(字节)是计算机中数据存储的基本单位,通常用于衡量存储容量,比如移动硬盘的容量可以是1TB(1TB = 1 terabyte = 1兆字节 = 1,024 gigabytes)。一个字节由8个比特(bit)组成。比特是最小的数据单位,它可以是0或1,用于表示二进制信息。数据传输时通常以比特为单位进行计量,比如家里的宽带速度可能是以兆比特(Mbps)或千兆比特(Gbps)为单位。当我们说家里的宽带是100Mbps时,意味着每秒可以传输100兆比特的数据。
2024-03-05 19:31:47 852
原创 加密与安全_ 凯撒密码
凯撒密码是一种简单的替换加密技术,也称为移位密码。它是古典密码学中最早的密码之一,得名于古罗马军队领袖凯撒·尤利乌斯(Julius Caesar),据说他曾经使用过这种加密方法。恺撒密码,也称为恺撒加密或恺撒变换,是一种最古老且最简单的密码之一。它的原理很简单,就是通过将明文中的每个字母按照字母表顺序向后(或向前)移动固定的位置来进行加密。这个固定的位置就是密钥,通常用一个整数来表示,称为偏移量。例如,当偏移量为3时,明文中的字母A将被加密为D,B被加密为E,以此类推。
2024-03-04 22:38:33 1544
原创 加密与安全_探索数字证书
数字证书是一种重要的安全标准,它集成了多种密码学算法,以确保数据的安全性、完整性和可信度。在数字化信息传输中,摘要算法用于验证数据的完整性非对称加密算法用于加密和解密数据签名算法则用于验证数据的来源和确保抗否认性将这些算法集合到一起,并依据一套完善的标准来管理,形成了数字证书的体系。通过数字证书,用户可以实现数据加解密、身份认证和签名等多种功能。其中,最重要的作用之一是防止中间人攻击。这是通过采用链式签名认证来实现的。
2024-03-03 21:09:13 1619
原创 加密与安全_探索签名算法
在非对称加密中,使用私钥加密、公钥解密确实是可行的,而且有着特定的应用场景,即数字签名。数字签名的主要目的是确保消息的完整性、真实性和不可否认性。通过使用私钥加密消息,发送者相当于对消息进行了签名,因为只有发送者拥有私钥,所以只有发送者能够生成正确的签名。然后,其他人可以使用发送者的公钥来验证签名,确保消息确实是由发送者签署的。这种方式确保了消息的真实性和不可否认性,因为只有私钥的持有者才能够生成正确的签名,其他人无法伪造。同时,公钥的持有者可以通过验证签名来确认消息的完整性和真实性。
2024-03-02 20:45:00 1911
原创 加密与安全_探索非对称加密算法_RSA算法
如果修改待加密的byte[]数据的大小,可以发现,使用512bit的RSA加密时,明文长度不能超过53字节,使用1024bit的RSA加密时,明文长度不能超过117字节,这也是为什么使用RSA的时候,总是配合AES一起使用,即用AES加密任意长度的明文,用RSA加密AES口令。因此,通常的做法是,使用RSA加密对称密钥(如AES密钥),然后使用对称密钥加密要传输的数据。中我们可以看到,公钥-私钥组成的密钥对是非常有用的加密方式,因为公钥是可以公开的,而私钥是完全保密的,由此奠定了非对称加密的基础。
2024-03-02 07:15:00 1287 1
原创 加密与安全_探索密钥交换算法_Diffie-Hellman算法
对称加密算法解决了数据加密的问题,例如AES加密可以有效地保护文件的安全性。然而,一个关键的挑战是如何在不安全的通信信道上安全地传输密钥。假设小明需要向路人甲发送一个加密文件,他可以先生成一个AES密钥,使用该密钥对文件进行加密,然后将加密后的文件发送给对方。但是,问题在于对方需要密钥才能解密文件,因此密钥的传输必须是安全的。在传统的密钥传输方法中,密钥通常通过不同的方式发送,如口头告知、书面传递或者其他安全信道。
2024-03-02 05:45:00 1335
原创 加密与安全_探索口令加密算法(PBE)
加密与安全_探索对称加密算法中我们提到AES加密密钥长度是固定的128/192/256位,而不是我们用WinZip/WinRAR那样,随便输入几位都可以。这是因为对称加密算法决定了口令必须是固定长度,然后对明文进行分块加密。又因为安全需求,口令长度往往都是128位以上,即至少16个字符。
2024-03-01 21:44:26 1260
原创 加密与安全_探索对称加密算法
对称加密算法是一种加密技术,使用相同的密钥来进行加密和解密数据。在这种算法中,发送方使用密钥将明文(未加密的数据)转换为密文(加密的数据),而接收方使用相同的密钥将密文还原为明文。对称加密算法的安全性依赖于密钥的保密性,因为任何持有相同密钥的人都能够解密数据。常见的对称加密算法包括AES(高级加密标准)和DES(数据加密标准)。虽然对称加密算法在性能上通常比非对称加密算法更高效,但在密钥管理和分发方面存在挑战。通俗来讲,可以这么理解: 对称加密算法就像是一把钥匙可以打开一个锁。
2024-03-01 19:15:00 1490
原创 加密与安全_深入了解Hmac算法(消息认证码)
HMAC(Hash-based Message Authentication Code)算法是一种基于哈希函数的消息认证码算法,用于验证消息的完整性和认证消息的发送者。它结合了哈希函数和密钥,通过将密钥与消息进行哈希运算来生成消息认证码。首先,选择一个适当的哈希函数(如MD5、SHA-1、SHA-256等)和一个密钥。将密钥进行适当的填充和处理,以满足哈希函数的输入长度要求。将消息与填充后的密钥按照特定的方式进行组合。对组合后的数据进行哈希运算。将哈希结果作为消息认证码输出。
2024-03-01 06:36:30 1553
原创 加密与安全_面向密码学的开源库BouncyCastle
在某些情况下,Java标准库提供的哈希算法可能无法满足特定需求。方法一:自行实现这种方法需要对特定算法的原理和实现细节有深入的了解,然后才能编写出符合要求的算法。然而,这种方式的难度较大,尤其是对于复杂的加密算法而言,需要大量的时间和精力来完成。方法二:使用第三方库借助第三方库,我们可以方便地使用各种不同的哈希算法和加密算法,而无需自行实现。BouncyCastle就是一个提供了丰富的哈希算法和加密算法的第三方库。它包含了Java标准库没有的一些算法,如RipeMD160哈希算法。
2024-02-29 05:45:00 2099
原创 加密与安全_深入了解哈希算法
哈希算法(Hash)又称摘要算法(Digest)。哈希算法是一种重要的加密算法,其核心思想是将任意长度的数据映射为固定长度的哈希值,这个哈希值通常用于验证数据的完整性、索引数据和加速数据查找。在Java中,hashCode()方法是一种哈希算法的应用。相同的输入一定会得到相同的输出不同的输入大概率得到不同的输出。在实际编程中,我们经常需要根据对象的哈希值来进行数据存储和查找,比如使用哈希表等数据结构。为了确保正确性,如果一个类覆写了equals()方法,就必须同时覆写hashCode()
2024-02-28 22:36:54 1553
原创 加密与安全_探索常用编码算法
在计算机系统中,加密与安全是至关重要的概念。想象一下,当B想要发送一封邮件给A时,邮件可能在传送过程中遭到黑客的窃听,这就需要防止信息泄露。此外,黑客还可能篡改邮件内容,因此A需要确保她能够辨别出邮件是否被篡改。最后,黑客可能会冒充B发送虚假邮件给A,这需要A有能力辨别真伪。为了应对这些潜在的安全威胁,我们需要采取以下三项措施:防止窃听防止篡改防止伪造计算机加密技术旨在实现上述目标。现代计算机密码学建立在严格的数学理论基础上,并逐渐发展成为一门科学。
2024-02-28 22:04:09 1770
原创 Spring Cloud Alibaba - 利用Nacos实现高效动态线程池管理
随着现代应用程序的复杂性不断增加,动态线程池管理成为了构建可靠和高效系统的关键之一。而Nacos作为一个优秀的服务发现和配置中心,能够帮助我们实现动态线程池的灵活管理。我们这里将介绍如何利用Nacos来实现高效的动态线程池管理,并探讨其在分布式系统中的应用。在软件开发中,线程池是一种管理和重用线程的机制,它能够有效地控制并发执行的线程数量,避免资源耗尽和性能下降。动态线程池则是在传统线程池的基础上,能够根据系统负载和资源需求动态调整线程数量的一种改进型线程池管理方式。
2024-02-25 22:06:51 1191
原创 Nginx - 请求\上传下载速率_流控小妙招
限流(Rate Limiting)是一种有效的系统保护机制,通过控制系统的输入和输出流量来缓解潜在的压力和风险。在网站运行于公网环境时,面对用户正常访问、网络爬虫、恶意攻击或突发大流量等情况,系统可能会面临过载的风险,从而导致响应延迟甚至系统崩溃的问题。针对这种情况,限流技术能够有效地管理并发请求,保障系统的稳定运行。通过对一部分请求进行限制,例如限制同一IP地址的频繁请求,系统可以合理地分配资源,确保服务器能够正确响应其他请求。
2024-02-24 23:54:25 1262
原创 Maven - 代码混淆proguard-maven-plugin vs 代码加密classfinal
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。
2024-02-24 23:07:16 1618
原创 计网 - 深入理解HTTPS:加密技术的背后
摘要算法,也称为哈希函数,用于计算内容的哈希值或“指纹”。这个哈希值是根据内容计算出来的固定长度的唯一字符串,即使内容稍微有所改动,其哈希值也会完全不同。因此,通过比较接收到的哈希值和发送方发送的哈希值,可以判断内容是否被篡改。常用的摘要算法包括MD5、SHA-1、SHA-256等,它们都是单向函数,即从内容计算出哈希值很容易,但从哈希值反推内容几乎是不可能的。这使得摘要算法在保证数据完整性方面非常有用,同时也被广泛应用于密码学、数字签名等领域。
2024-02-21 23:13:40 1724
原创 计网 - 域名解析的工作流程
DNS安全性的重要性不言而喻。同时,建议定期更新系统和网络设备的软件版本,以修复已知的安全漏洞,并加强网络安全意识培训,提高用户对DNS安全的重视程度。确保DNS安全至关重要,因为DNS是互联网的基础设施之一,任何对DNS的攻击都可能导致网络中断、数据泄露、身份盗窃等严重后果。:攻击者通过向DNS服务器发送伪造的DNS响应,使得DNS服务器缓存了错误的域名解析结果,导致用户访问被篡改的网站。:攻击者通过向目标DNS服务器发送大量的DNS查询请求,使得目标DNS服务器无法处理合法的查询请求,造成服务拒绝。
2024-02-21 20:15:00 1357
原创 Golang - 从源码到二进制:探索在国产CPU架构上交叉编译Minio的方法
在C++中,交叉编译通常用于在开发机器上编译目标平台的程序,例如在使用x86架构的开发机器上编译ARM架构的程序。总的来说,交叉编译的原理是通过选择合适的交叉编译工具链,并配置正确的环境,将源代码编译成适用于目标平台的可执行文件或库。在编译过程中,编译器会根据目标平台的架构和操作系统生成相应的机器码。这些是一些常见的架构,实际上还有更多的架构可供选择,具体取决于 Go 编译器的支持和目标平台的要求。官方提供了部分架构的minio二进制,但有些国产CPU架构下的包,是没有提供的,因此需要自行编译。
2024-02-20 20:45:00 1560
原创 每日一博 - 大端(Big Endian)和小端(Little Endian)
大端(Big Endian)和小端(Little Endian)是用于描述在存储器中存储多字节数据时字节顺序的两种不同方法。
2024-02-20 19:15:00 1139
原创 Golang - 使用CentOS 7 安装Golang环境
下载Go语言包:您可以从官方网站 https://golang.org/dl/ 下载适用于Linux的Go语言包。选择与您的操作系统架构匹配的版本。例如,如果您的操作系统是64位的,您可能会下载类似go1.17.6.linux-amd64.tar.gz的文件。解压缩Go语言包:使用以下命令解压缩下载的Go语言包。请注意,您需要将路径替换为您下载文件的实际路径。
2024-02-19 19:45:00 1071
原创 Netty Review - 客户端流程源码解析
我们创建了一个NIO的EventLoopGroup,使用NioSocketChannel作为客户端的Channel类型,设置了TCP连接的保持活动选项,并初始化ChannelPipeline。EventLoopGroup是一组处理I/O操作的线程池,通常包含一个用于处理连接的boss线程池和一个用于处理I/O事件的worker线程池。此时,客户端会尝试连接到指定的远程服务器,并返回一个ChannelFuture对象,用于异步等待连接的建立。事件时,会执行相应的处理逻辑。
2024-02-18 08:15:00 1989 1
原创 Netty Review - NIO空轮询及Netty的解决方案源码分析
对于每个 Channel,取消其在旧 Selector 上的注册,然后重新在新的 Selector 上注册,并保持感兴趣的事件不变。但是,在某些情况下,由于操作系统或者底层网络实现的限制,Selector可能会出现空轮询的情况,即Selector不断地被唤醒,但没有任何就绪的事件,这会导致CPU资源的浪费。在Netty中,通过使用基于事件驱动的模型,避免了空轮询的问题。在早期版本的JDK中,Java NIO的实现对于空轮询问题没有进行有效的处理,导致在高并发、高负载的网络应用中,会造成CPU资源的浪费。
2024-02-18 06:45:00 2407
原创 Netty Review - ByteBuf扩容机制源码解析
ByteBuf 扩容机制是指在写入数据时,如果当前容量不足以容纳新增的数据,则需要进行动态扩容,以适应数据量的增长。容量检查在写入数据之前,会先检查当前可写入的容量是否足够。这通常是通过比较写索引和容量之间的关系来实现的。如果当前可写入容量不足,就需要进行扩容操作。内存分配当需要扩容时,会分配一个更大的内存空间来存储数据。这个内存空间的大小通常由扩容策略决定,可以是固定大小的增量,也可以是根据某种规则动态计算的。数据迁移在分配更大的内存空间后,原有的数据需要从旧的内存空间复制到新的内存空间中。
2024-02-17 17:56:40 1105
原创 Netty Review - ByteBuf内存池源码解析
ByteBuf 内存池是 Netty 中用于管理 ByteBuf 对象的一种机制,旨在提高内存的使用效率和性能。
2024-02-17 06:15:00 1323
原创 Netty Review - 底层零拷贝源码解析
Netty 的零拷贝技术是通过优化数据传输过程中的数据复制操作,以降低系统的开销和提高性能。Netty 利用 Java NIO 中的 ByteBuffer.allocateDirect() 方法来分配直接内存,直接内存的特点是可以直接被操作系统所管理,不受 Java 堆内存大小的限制,而且可以直接与操作系统进行数据交互,避免了数据在 Java 堆内存和操作系统之间的拷贝。
2024-02-16 22:26:46 1339
原创 Netty Review - 直接内存的应用及源码分析
在Java中,数据通常存储在堆内存中。Java里用可以分配一块直接内存(堆外内存),元空间对应的内存也叫作直接内存,它们对应的都是机器的物理内存。但是,在某些情况下,直接操作系统的本地内存(off-heap memory)可能更有利,特别是对于需要进行大量I/O操作的应用程序,比如网络应用程序。Netty是一个用于构建高性能网络应用程序的框架,它提供了对直接内存的支持,以便更有效地处理数据传输。直接内存的主要优势在于它的分配和释放不受Java堆内存管理的影响,因此可以避免堆内存的垃圾回收开销。
2024-02-16 21:16:03 1135
原创 OpenSource - 一站式自动化运维及自动化部署平台
一站式自动化运维及自动化部署平台, 使用多环境的概念, 提供了机器管理、机器监控报警、Web终端、WebSftp、机器批量执行、机器批量上传、在线查看日志、定时调度任务、应用环境维护、应用构建及发布任务、操作流水线等功能, 帮助企业实现一站式轻量化运维治理, 致力于企业级应用的智能运维。通用模板: https://lijiahangmax.gitee.io/orion-ops/#/template/java-springboot-template。后续应该不会更新了(除了修复bug) 个人精力有限。
2024-02-15 19:31:56 1612
原创 Netty Review - 服务端channel注册流程源码解析
当有新的连接接入时,会触发ACCEPT事件,EventLoop会调用相关的ChannelHandler进行处理,如调用ChannelInitializer的initChannel方法,添加用户自定义的ChannelHandler到新的连接的ChannelPipeline中。接着,新的连接就可以接受和处理客户端的请求了。当一个连接被注册到某个 Worker 线程池的 EventLoop 中时,该 EventLoop 将负责处理这个连接的所有事件,包括读取数据、写入数据、处理网络事件等。
2024-02-15 11:10:24 1696
原创 Netty Review - NioServerSocketChannel源码分析
NioServerSocketChannel是Netty中用于处理TCP服务器端Socket的通道实现之一。它继承自AbstractNioMessageChannel,是基于Java NIO的ServerSocketChannel的封装
2024-02-13 06:45:00 1981
原创 Netty Review - ServerBootstrap源码解析
ServerBootstrap是Netty中用于创建服务器端应用程序的引导类。它的设计目的是提供一种简洁、灵活的方式来配置和启动服务器,并处理与客户端的连接。
2024-02-13 04:45:00 1468
原创 Netty Review - NioEventLoopGroup源码解析
这段代码是在使用Netty框架时常见的用法,用于创建两个不同的实例,一个用于处理连接请求(通常称为bossGroup),另一个用于处理连接后的数据流(通常称为workerGroup)。是Netty中用于处理NIO事件的的实现之一。在Netty中,事件循环(EventLoop)是Netty的核心,负责处理各种事件,比如接收连接、读取数据、写入数据等。其主要功能和构造函数参数的含义:第一个构造函数参数表示创建的EventLoop的数量。
2024-02-12 11:30:10 1979
原创 PKI - 借助Nginx实现_客户端使用CA根证书签发客户端证书
这个命令生成了一个 2048 位长度的 RSA 私钥,并将其保存到文件中。这个私钥将用于后续创建自签名的根证书。这个命令使用上一步生成的私钥 () 来生成一个自签名的根证书。具体地,它执行了以下操作:-x509:生成一个自签名的 X.509 格式证书。-new:创建一个新的证书请求。-nodes:不使用密码加密密钥。:指定之前生成的私钥文件作为证书的密钥。:指定证书的主题信息。在这里,表示证书的通用名称 (Common Name) 为client-ca。-days 5000。
2024-02-12 04:30:00 1415
原创 PKI - 借助Nginx实现_客户端使用自签证书供服务端验证
自签名证书可以用于验证客户端的身份。通过客户端提供的证书,服务端可以确保连接方是合法的客户端,并且拥有该证书对应的私钥。使用自签名证书的客户端可以与服务端建立加密的通信通道。客户端的证书中包含了公钥,可以用于加密数据传输,保护数据的机密性。通过客户端的证书验证,服务端可以确保与客户端直接通信,防止中间人攻击。如果客户端提供的证书无效或不匹配,服务端会拒绝连接,从而保护通信的安全性。服务端可以根据客户端提供的证书对其进行授权访问。
2024-02-11 16:32:10 1514
原创 PKI - 借助Nginx 实现Https_使用CA签发证书
使用 CA 签发的证书可以建立信任关系,客户端可以信任由公认的 CA 颁发的证书,从而确保与服务器之间的通信是安全可靠的。CA 对证书申请者进行身份验证,并在验证通过后签发证书。这样,服务器可以通过 CA 签发的证书来证明自己的身份,确保客户端与合法的服务器进行通信,防止中间人攻击。证书中包含了公钥,可以用于加密通信数据。使用 CA 签发的证书可以保护通信数据的机密性,防止数据被窃取或篡改。证书中包含了数字签名,可以用于验证通信数据的完整性。使用 CA 签发的证书可以确保通信数据在传输过程中没有被篡改。
2024-02-11 14:02:38 2208
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关注的人