微服务之BFF架构设计 什么是BFFBFF是(Backends For Frontends)单词的缩写,主要是用于服务前端的后台应用程序,来解决多访问终端业务耦合问题。 在业务突增以,不同的终端拥有不同的接口服务,有不同的操作数据的能力,针对这种业务场景做出了调研,我们是否可以在不同的访问层进行业务逻辑处理,获取不同的数据内容呢? 早在微服务出现的初期就已经存在类似的业务需求出现,而且衍生出了一套成熟的解决方案,那就是B 2021-04-12
linux内核Epoll 实现原理 Epoll 实现原理epoll 是Linux平台下的一种特有的多路复用IO实现方式,与传统的 select 相比,epoll 在性能上有很大的提升。本文主要讲解 epoll 的实现原理,而对于 epoll 的使用可以参考相关的书籍或文章。 epoll 的创建要使用 epoll 首先需要调用 epoll_create() 函数创建一个 epoll 的句柄,epoll_create() 函数定义如下: 2021-04-08
Linux进程详解 进程管理进程程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开的文件, 要处理的信号和CPU上下文等等. 进程描述符Linux进程使用 struct task_struct 来描述(include/linux/sched.h), 如下 2021-04-08
Linux等待队列原理与实现 等待队列原理与实现当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用 add_wait_queue() 函数把进程添加到 waitqueue 中,然后切换到其他进程继续执行。当 2021-04-07
Linux中断处理 中断处理 - 上半部(硬中断)由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux对中断的处理过程。 中断处理相关结构前面说过,8259A中断控制器 由两片 8259A 风格的外部芯片以 级联 的方式连接在一起,每个芯片可处理多达 8 个不同的 IRQ(中断请求),所以可用 IRQ 线的个数达到 15 个。如下图: 在内核中每条IRQ线由结构体 irq_ 2021-04-07
Linux系统调用原理 一、什么是系统调用系统调用 跟用户自定义函数一样也是一个函数,不同的是 系统调用 运行在内核态,而用户自定义函数运行在用户态。由于某些指令(如设置时钟、关闭/打开中断和I/O操作等)只能运行在内核态,所以操作系统必须提供一种能够进入内核态的方式,系统调用 就是这样的一种机制。 系统调用 是 Linux 内核提供的一段代码(函数),其实现了一些特定的功能,用户可以通过 int 0x80 中断(x86 2021-04-07
Linux虚拟文件系统 虚拟文件系统通常我们使用的磁盘和光盘都属于块设备,也就是说它们都是按照 数据块 来进行读写的,可以把磁盘和光盘想象成一个由数据块组成的巨大数组。但这样的读写方式对于人类来说不太友好,所以一般要在磁盘或者光盘上面挂载 文件系统 才能使用。那么什么是 文件系统 呢? 文件系统 是一种存储和组织数据的方法,它使得对其访问和查找变得容易。通过挂载文件系统后,我们可以使用如 /home/docs/test. 2021-04-07
Linux 直接I/O 原理与实现 缓存I/O一般来说,当调用 open() 系统调用打开文件时,如果不指定 O_DIRECT 标志,那么就是使用缓存I/O来对文件进行读写操作。我们先来看看 open() 系统调用的定义: 1int open(const char *pathname, int flags, ... /*, mode_t mode */ ); 下面说明一下各个参数的作用: pathname:指定要打开的文件路径。 2021-04-07
Netfilter 与 iptables 原理 Netfilter 与 iptables 原理Netfilter 可能了解的人比较少,但是 iptables 用过 Linux 的都应该知道。本文主要介绍 Netfilter 与 iptables 的原理,而下一篇将会介绍 Netfilter 与 iptables 的实现。 什么是 NetfilterNetfilter 顾名思义就是网络过滤器,其主要功能就是对进出内核协议栈的数据包进行过滤或者修改 2021-04-07