avatar
Articles
63
Tags
47
Categories
16

梦之痕

梦之痕

基于漏桶算法进行限流
Created2024-04-02|数据结构与算法
1 速率限制OpenResty 官方的 lua-resty-limit-traffic 的模块,里面有三种限速的策略。 1.1 resty.limit.req 模块基于 漏桶 算法实现的请求速率限制。 1.2 resty.limit.count 模块基于 固定窗口 实现请求的速率限制,如 单位时间内确保累计的请求数量不超过一个极限值。 1.3 resty.limit.conn 模块提供请求并发级别限制并根据额外延迟进行调整。 2 跨机器速率限制lua-resty-redis-ratelimit 通过把状态保存到 Redis,可实现多个Nginx示例状态共享,与 resty.limit.req 模块类似,也是基于漏桶算法对平均请求速率进行限制。 2.1 原理借助于 Redis Lua Script 机制 ,Redis 有一个支持写 Lua 脚本的功能,这个脚本能够让一些操作在 Redis 执行的时候保证原子性,依赖这个机制,把一次状态的变更用 Lua Script 就能够完全原子性地在 Redis 里面做完。同时,该模块支持在整个集群层⾯禁⽌某个非法⽤用户一段时间,可实现全局自动拉⿊功能 ...
虚拟化技术笔记
Created2024-03-29|虚拟化&云计算
1 虚拟化技术基础原理 CPU运行特权RANG 0 :执行特权指令(内核)RANG 3:普通指令模式(用户进程) Guest客户机(1)模拟CPU个数可以大于实际物理机的核数,但性能会有影响(2)VMware中的BT技术 1.1 CPU虚拟化(VT-X)(1)底层宿主机的cpu架构和Guest客户机模拟出来的CPU一样(模拟)(2)底层宿主机的cpu架构和Guest客户机模拟出来的CPU不一样(虚拟化)(VMware中的BT技术) 完全虚拟化:Guest感觉自己是直接运行在物理机上的硬件虚拟化(HVM):CPU拥有五个指令环,RANG -1(host主机运行特权指令) RANG 0-3硬件虚拟化直接使用硬件进行特权指令转换半虚拟化:Guest能意识到自己是运行在虚拟化上,需要修改Guest内核,内核调用主机上的hyper call半虚拟化在主机上运行了一个 层 推荐文章:https://www.cnblogs.com/bakari/p/7966671.html 1.2 内存虚拟化1、Guest访问物理内存需要进行两次转换(引入影子页表) 引入硬件虚拟化(MMU虚拟化) 2、MMU ...
DPDK之多队列网卡测试
Created2024-03-29|虚拟化&云计算
0 背景基于环境 VMware+Ubuntu 虚拟机环境,在DPDK接管多队列网卡后,每个网卡数据接收情况。 配置多队列网卡 多队列网卡测试 1 添加多个网卡 在vmware环境中对应虚拟机的虚拟机设置中,增加网络适配器(一个或者多个),对应网卡的个数。 启动虚拟机,查看网卡信息 当前生效的只有一个网卡,是桥接模式的第一个网卡: 123456789101112131415161718192021222324252627282930313233343536373839404142ubuntu@ubuntu:~$ service networking restart #不同的linux环境重启网络命令是不同的==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===Authentication is required to restart 'networking.service'.Authenticating as: ubuntu,,, (ubuntu)Password: ==== ...
【转载】浅析基于DPDK框架下OVS与VPP的差异点
Created2024-03-26|虚拟化&云计算
1 概述Data Plane Development Kit简称DPDK,是一套将从网卡收上来的数据包直接映射到用户空间的开发套件,基于此许多大公司都搭建了自己的业务应用框架,如虚拟交换机、虚拟路由器等。其中影响比较大的就是OVS和VPP,本文从这两个系统的性能表现及开发难度两个维度进行详细分析,给出作者对这两个业务框架的一点认识,希望能给学习这两个框架的人有所帮助。 1.1 DPDK简介DPDK原本是基于 Intel 处理器架构下,提供库函数和驱动支持用户空间高效数据包处理的开源套件,即DPDK绕过了系统的内核协议栈对报文的处理过程,报文的收发与处理在用户空间实现。因此对于内核而言,DPDK的工作进程就是一个普通的用户态进程。DPDK的编译、连接和加载方式也跟普通程序没有什么差别。DPDK的这种特性区别于以通用性设计为目的的Linux系统,DPDK专注于高性能的处理网络应用中的数据包。现在这个套件也支持ARM及Power 8。 DPDK的典型框架如下图所示: 图 1 DPDK架构简图 从上图可以看出,DPDK将网卡收上来的报文跳过Linux Kernel,直接映射到用户空间并提供了 ...
【转载】Linux RCU 原理剖析
Created2024-03-25|Linux 内核
背景说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述RCU, Read-Copy-Update,是Linux内核中的一种同步机制。RCU常被描述为读写锁的替代品,它的特点是读者并不需要直接与写者进行同步,读者与写者也能并发的执行。RCU的目标就是最大程度来减少读者侧的开销,因此也常用于对读者性能要求高的场景。 优点: 读者侧开销很少、不需要获取任何锁,不需要执行原子指令或者内存屏障; 没有死锁问题; 没有优先级反转的问题; 没有内存泄露的危险问题; 很好的实时延迟; 缺点: 写者的同步开销比较大,写者之间需要互斥处理; 使用上比其他同步机制复杂; 来一张图片来描述下大体的操作吧: 多个读者可以并发访问临界资源,同时使用rcu_read_lock/rcu_read_unlock来标定临界区; 写者(updater)在更新临界资源的时候,拷贝一份副本作为基础进行修改,当所有读者离开临界区后,把指向旧临界资源的指针指向更新后的副本,并对旧资源进行回收处理; 图中只 ...
系统性能调优详解
Created2024-03-18|系统调优网络协议
0 参考资料课程资料:https://github.com/russelltao/geektime_distrib_perf 2 系统层网络优化2.3 优化TCP三次握手性能2.3.1 客户端的优化三次握手建立连接的首要目的是同步序列号。只有同步了序列号才有可靠的传输,TCP协议的许多特性都是依赖序列号实现的,比如流量控制、消息丢失后的重发等等,这也是三次握手中的报文被称为SYN的原因,因为SYN的全称就叫做Synchronize Sequence Numbers。客户端发送SYN开启了三次握手,此时在客户端上用netstat命令(后续查看连接状态都使用该命令)可以看到连接的状态是SYN_SENT(顾名思义,就是刚把SYN发送出去)。 1tcp 0 1 172.16.20.227:39198 129.28.56.36:81 SYN_SENT 如果客户端一直等不到服务端回复ACK报文,客户端会重发SYN,重试的次数由tcp_syn_retries参数控制,默认是6次。 1net.ipv4.tcp_syn_retries = 6 每次充实间隔时间倍数增加 ...
VPP 详解
Created2024-03-16|虚拟化&云计算
0 参考资料1 VPP 安装和使用1.1 简介VPP:(vector packet processor)是一个可扩展框架,可提供开箱即用的交换机/路由器功能。是Linux基金会下开源项目FD.io的一个子项目,由思科贡献的开源版本,目前是FD.io的最核心的项目。VPP是一个模块化和可扩展的软件框架,用于创建网络数据面应用程序。更重要的是,VPP代码为现代通用处理器平台(x86、ARM、PowerPC等)而生,并把重点放在优化软件和硬件接口上,以便用于实时的网络输入输出操作和报文处理。为了提高性能,vpp数据平面是由转发节点的有向图组成,这些节点在每次调用时处理多个数据包。这种模式支持各种微处理器优化:流水线处理和预取功能降低依赖数据的读取延迟,固有的I-cache阶段行为,向量指令。除了硬件输入和硬件输出节点,整个转发图都是可移植的代码。模块化设计框架允许任何人“插入”新的图形节点,而不需要更改核心/内核代码。VPP一次从网卡的硬件队列Rx ring收到多个数据包,组成一个Packet vector,借助于报文处理图Packet processing graph来 ...
Redis 核心技术详解
Created2024-03-10|数据库篇章
0 参考资料 本笔记是极客时间《Redis核心技术与实战》课程 0.1 学习资料推荐书籍: 工具书:《Redis使用手册》:Redis命令参考 原理书:《Redis设计与实现》 实战书:《Redis开发与运维》 可以尝试读一下Redis源码,有一个网站提供了Redis 3.0源码的部分中文注释,你也可以参考一下。 Redis涉及的知识比较多,比如:操作系统、分布式系统等知识点,如下图: 0.2 学习方法分为三大模块: 掌握数据结构和缓存的基本使用方法; 掌握支撑Redis实现高可靠、高性能的技术; 精通Redis底层实现原理。 参考加餐(二)-Kaito:我是如何学习Redis的?_For_group_share 1 基础篇1.1 基础架构:一个键值数据库包含什么?从这张对比图中,我们可以看到,从SimpleKV演进到Redis,有以下几个重要变化: Redis主要通过网络框架进行访问,而不再是动态库了,这也使得Redis可以作为一个基础性的网络服务进行访问,扩大了Redis的应用范围。 Redis数据模型中的value类型很丰富,因此也带来了更多的操作接口,例如面向列表的 ...
MySQL 事务机制
Created2024-03-10|数据库篇章
[TOC] 3 事务隔离3.1 隔离性和隔离级别 事务的特性(ACID) 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 3.2 SQL标准的事务隔离级别 读未提交:一个事务还没提交时,他做的能被其他事务所看见 读提交:一个事务提交之后,他做的修改才会被其他事务所看到 可重复读:一个事务在执行期间看到的数据总是跟在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的 串行化:“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才可以继续执行。 示例:下边执行一个事务,如下的操作: 12mysql> create table T(c int) engine=InnoDB; insert into T(c) values(1); 若隔离级别是“读未提交”, 则V1的值就是2。这时候事务B虽然还没有提交,但是结果已经被A看到了。因此,V2、V3也都是2。 若隔离级别是“读提交”,则V1是1,V2的值是2。事务B的更新在提交后才能被A看到。所以 ...
Redis 核心技术实践
Created2024-03-10|数据库篇章
2 实践篇2.11“万金油”的String,为什么不好用了?2.11.1 string类型如何保存数据的举一个示例,用10位数来表示图片ID和图片存储对象ID,例如,图片ID为1101000051,它在存储系统中对应的ID号是3301000051,在图片数量巨大的场景下。 如果保存1亿张图片,使用string类型,大约用6.4GB的内存。一个图片ID和图片存储对象ID的记录平均用了64字节。来分析一下。图片ID和图片存储对象ID都是10位数,我们可以用两个8字节的Long类型表示这两个ID。因为8字节的Long类型最大可以表示2的64次方的数值,所以肯定可以表示10位数。但是,为什么String类型却用了64字节呢?通过对string类型进行分析,在记录实际数据时,string类型还需要额外的内存空间记录数据长度、空间使用等信息,这些信息也叫做元数据。当实际保存的数据较小时,元数据的空间开销就显得比较大了。 String类型具体是怎么保存数据的呢? 当你保存64位有符号整数时,String类型会把它保存为一个8字节的Long类型整数,这种保存方式通常也叫作int编码方式。 当你保存的 ...
1234…7
avatar
梦之痕
Articles
63
Tags
47
Categories
16
Follow Me
Announcement
个人笔记迁移中ing....
Recent Post
大模型 RAG 的应用和开发2025-04-29
06 - WASM 插件开发2025-02-12
记录访问 HTTPS 网站报错问题2024-09-28
AI 大模型微调2024-09-03
Untitled2024-08-29
Categories
  • AI大模型1
  • Go & Python6
  • Java & Lua7
  • Linux 内核1
  • 人工智能&大数据4
  • 信息安全3
  • 后端&架构8
  • 工具使用3
Tags
Java DPDK Maven 微服务架构 Python 流量控制 系统优化 Git 程序设计 LVS HTTP3 大模型微调 wasm 四层负载均衡 系统架构设计师 Go 网络 iterm2 杂文 OpenResty MySQL 深度学习 虚拟化 云原生 数据库 Istio Nginx Flink Kubernetes 算法题解 Redis HTTP2 LangChain VPP 软考高级 Linux内核 Calico Tongsuo RAG Helm
Archives
  • April 20251
  • February 20251
  • September 20242
  • August 20244
  • July 20244
  • June 20244
  • May 20242
  • April 20243
Info
Article :
63
UV :
PV :
Last Update :
©2020 - 2025 By 梦之痕
Framework Hexo|Theme Butterfly