Optimus-Xs' Blog

如何实现多个进程同时监听同一个端口

为什么会有多个进程监听同一端口的特殊情况 在通常情况下,一个端口号只能被一个进程绑定和监听。这被称为“端口唯一性”原则,是操作系统内核为了确保网络通信的有序性而设计的。 但是为了解决高性能网络服务中的两个关键问题:高并发和零停机时间, 操作系统允许多个进程监听同一个端口 高并发和可伸缩性 在传统的单进程服务器模型中,一个进程监听并处理所有连接。但随着用户量的增长,单进程会很快成为性能...

Nginx 惊群问题的原理和解决方案

惊群问题是什么? TLDR:有一个请求过来了,把很多进程都唤醒了,但只有其中一个能最终处理。 惊群问题(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进...

事件驱动架构简介

什么是事件驱动架构 事件驱动架构(Event Driven Architecture,EDA)是一种软件设计模式,它围绕着事件的生成、检测和响应来构建系统。在这种架构中,组件之间不是直接调用彼此的功能,而是通过发布和订阅事件来通信。 事件驱动系统旨在捕获、沟通和处理解耦服务之间的事件。这意味着,系统可以保持异步,同时仍共享信息和完成任务。 许多现代应用设计都是由事件驱动的,例如必须实时...

Java 中的多态能力

什么是多态 多态是面向对象编程(OOP)的三要素之一, 因外两个是封装和继承。 封装是将数据和操作数据的方法绑定在一起,隐藏内部实现细节; 继承允许一个类继承另一个类的属性和方法,实现代码重用; 多态则允许不同类的对象对同一方法调用做出不同的响应,增强了代码的灵活性和扩展性。 多态的最常见主要类别: 特设多态:为个体的特定类型的任意集合定义一个共同接口。只针对特定、...

Redis的持久化机制:RDB和AOF

什么是Redis持久化 Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 这样做有什么问题呢? 其实,只要稍微有点计算机基础知识的人都知道,存储在内存当中的数据,只要服务器关机(各种原因引起的),内存中的数据就会消失了,不仅服务器关机会造成数据消失,Redis服务器守护进程退出,内存中的数据也一样会消失。...

跳表原理

跳表(skip list) 对标的是平衡树(AVL Tree),是一种 插入/删除/搜索 都是 O(log n) 的数据结构。它最大的优势是原理简单、容易实现、方便扩展、效率更高。因此在一些热门的项目里用来替代平衡树,如 redis, leveldb 等。 跳表的基本思想 首先,跳表处理的是有序的链表(一般是双向链表,下图未表示双向),如下: 这个链表中,如果要搜索一个数,需要从头到...