iTerm2配置rz/sz上传下载文件
一、iTerm2的Triggers功能关于iTerm2的 Triggers 功能,官方的介绍是: A trigger is an action that is performed when text matching some regular expression is received in a terminal session. 即:触发器是在终端会话中收到与某个正则表达式匹配的文本时执行的动作。 二、配置rs/zs2.1、一键脚本curl -sSLf https://git.io/bugwz-sh-iterm2-rzsz | sh 该脚本作用如下: 使用指令 brew install lrzsz 安装 lrzsz 软件; 下载 iterm2-send-zmodem.sh 和 iterm2-recv-zmodem.sh 到 /usr/local/bin/ 目录; 提示在 iTerm2 中进行后续的操作步骤; 2.2、单独操作步骤 安装lrzsz: brew install lrzsz 在 /usr/local/bin 目录中新增iterm2-se...
Hamburg - 抓包/耗时分析工具
Hamburg是一款用Go实现的抓包/耗时分析的工具,项目地址为 https://github.com/bugwz/hamburg。该工具的设计思想以及实现逻辑基本参照tcpkit。 一、功能实现 抓包/拆包:使用 gopacket 进行抓包以及IP/TCP/UDP等信息的解析; 耗时分析:通过监听端口以及与本地监听网卡的IP地址比对,猜测数据包的请求方向(Request/Response),并临时保存Request的数据包,在接收到与之匹配的回复数据包后,就可以计算出整个请求在本机的处理耗时。由于只要有一个回复数据包,整个请求回复链路的耗时统计就算完成,因此在server对于pipline的请求会批次回复的情况(redis等)下,耗时统计可能会偏小; Lua自定义脚本:通过使用gopher-lua包,支持使用自定义lua处理数据包; 应用层数据解析:目前支持按照raw/dns/http/redis/memcached/mysql等协议的数据解析。在收到多个Request数据包并且还没有相应...
Keepalived的高可用基石 - VRRP协议
一、背景路由实现了不同子网之间的数据通信,目前比较常用的路由配置方法大概分为两种:动态路由(利用RIP、OSPF进行动态学习)和静态路由(对终端设备静态配置路由)。动态路由可以通过学习的方式获取路由表,避免了静态路由需要手动配置以及后续变更的繁琐,但同时需要额外的占用线路带宽和CPU的处理时间。VRRP技术是在静态路由上用于在目标机器不可达之后的路由能够自动变更的一种实现手段。 二、VRRP2.1、简介VRRP(Virtual Router Redundancy Protocol),即虚拟路由冗余协议,它是为了避免路由器出现单点故障的一种容错协议。VRRP协议的实现有VRRPv2和VRRPv3两个版本,VRRPv2基于IPv4,VRRPv3基于IPv6。相关RFC文件为:RFC2338 - Virtual Router Redundancy Protocol, RFC3768 - Virtual Router Redundancy Protocol (VRRP), RFC5798 - Virtual Router Redundancy Protocol (VRRP) Versio...
Keepalived的学习与使用
一、简介Keepalived 软件起初是专为LVS负载均衡软件设计的,用来监控管理LVS集群系统中各个服务节点的状态,后来又加入了可以解决静态路由单点故障问题从而实现高可用的VRRP功能。因此,Keepalived 除了能够管理LVS软件外,还可以作为其他服务(例如Nginx、Haproxy、MySQL等)的高可用解决方案软件。 1.1、安装部署通过官网下载 或者 GitHub 下载源码进行编译安装,由于Keepalived 使用了libpopt库用来解析命令行参数,因此我们也需要安装libpopt库。 # 安装libpoptyum install popt-devel# 进入keepalived源码目录编译安装./configuremake && make install 1.2、配置针对版本 2.1.2,配置大致分为如下几大类: global_defs : 主要是配置故障发生时的通知对象以及机器标识; vrrp_instance : 用来定义对外提供服务的VIP区域及其相关属性; virtual_server : 虚拟服务器,来源vrrp_instance...
小米8刷入MIUI12国外版
一、MIUI相关版本 国内版本:MIUI的官方国内版本,功能比较齐全,国内的服务套件比较齐全(小爱同学等),但是广告比较多,并且预装应用以及后台常驻的系统组件比较多,缺少Google套件(可以通过其他方式安装,但是会有稳定性以及兼容问题); 国际版:MIUI的官方的国际版本(也被称为俄罗斯版本),自带过多的Google套件,比较臃肿,没有广告;不自带小米钱包,因此无法原生使用小米公交等服务(后续可刷入); 波兰版本:MIUI的第三方定制的ROM,自带Google套件,没有广告;不自带小米钱包,因此无法原生使用小米公交等服务(后续可刷入); 英国版本:MIUI的第三方定制的ROM,自带Google套件,没有广告;不自带小米钱包,因此无法原生使用小米公交等服务(后续可刷入); 二、刷机教程针对于国内版本和国际版,我们可是使用小米官方提供的刷机方式进行刷机即可,官方教程。针对于第三方地址的ROM,可以按照如下方式进行刷机。接下来我们将对小米8进行刷机,ROM为英国版本MIUI12。 2.1、解锁Bootloader关于Bootloader的详细介绍可以查看百度百科 - Bootloa...
LVS的四种工作模式
一、DR模式 1.1、原理 客户端将访问VIP报文发送给LVS; LVS将客户端请求报文的MAC地址改为后端真实服务器的MAC地址; 后端真实服务器得到访问报文后进行IP查看,在确认自己有对应的VIP之后进行请求处理; 后端真实服务器在处理完数据请求后,直接响应客户端; 数据包流转过程: 1.2、特点 工作在数据链路层(OSI网络模型中的第二层),需要由LVS修改客户端请求的二层数据包的目标MAC地址; LVS和后端真实的服务器需要处在一个广播域(VLan)中; LVS和后端真实的服务器上都需要配置VIP,并且后端真实的服务不应该响应网络中对于该VIP的ARP请求; 1.3、优缺点 优点: LVS只是修改了MAC地址,所以非常快速,并且LVS不会成为瓶颈; 不需要使用隧道结构,绝大多数操作系统都可以用于服务; 缺点: LVS必须和后端真实服务器处于同一VLan中; 后端真实服务器直接响应客户端,对于后端真实服务器来说,并不安全; 1.4、软件应用 待补充; 二、TUNNEL模式 2.1、原理 客户端将访问VIP报文发送给LVS; LVS收到豹纹后,发现请求的IP...
Memcached的钙化及相关解决方案
一、背景由于Memcached存储数据的时候是按照Slabs分类进行存储的,当内存达到Memcached限制的时候,服务进程会执行一系列的内存回收方案,但是,不管是什么内存回收方案,回收的大前提就只有一种:只回收与即将写入数据写入数据块一致的Slabs。因此,这就导致了在业务访问模型变更之后,Memcached对于之前访问模型存储的数据就不会做任何变更,也就是说那部分数据永不会被剔除,因此最终服务可用的内存也会远小于进程启动时的设定,这种情况就被称为Memcached的Slab钙化现象(Slab Calcification)。 在Memcached的 1.4.11 版本之前,官方版本一直存在内存钙化的问题,在这个过程中,Twitter基于Memcached 1.4.4的版本推出了 Twemcache 尝试解决了Slab钙化的问题。在1.4.11版本中,官方引入了 Slab 的 Automove & Rebalance 的策略也解决了内存钙化的问题。 二、 Automove & Rebalance 策略2.1、概念简介通过检测每个Slab Classes的内存使用情...
译 - Summary Cache: A Scalable Wide-Area Web Cache Sharing Protocol
《Summary Cache: A Scalable Wide-Area Web Cache Sharing Protocol》翻译过来是 《摘要缓存:可扩展的广域 Web 缓存共享协议》,这篇文章中提出了布隆过滤器的设计背景以及实现原理,详细介绍了在误判率以及存储空间之间的权衡,之后很多系统中实现的布隆过滤器基本都是参考了这篇文论的实现。 摘要Web Proxy之间的共享缓存是减少Web流量并缓解网络瓶颈的一项重要技术。然而,由于现有协议的开销,它并未得到广泛部署。在本文中,我们演示了缓存共享的好处,衡量了现有协议的开销,并提出了一种称为”摘要缓存’’的新协议。在这个新协议中,每个Proxy都保留了一个包含所有Proxy的缓存摘要目录,并在任何查询之前都要检查在这些摘要之中是否存在潜在的匹配项。有两个因素利于我们协议的低开销:摘要的定期更新以及十分简朴的目录信息,每个条目只有8bits。通过使用跟踪驱动的仿真和原型实现,我们证明了与现有的协议(例如 Internet 的缓存协议ICP)相比,”摘要缓存”将缓存间协议消息的数量减少了25到60,带宽消耗减少了超过50%,消除了75...
Codis的Slots-Rebalance算法
Codis 实现了另一种的 Redis 集群方案。在该方案中为了能够实现类似于 RedisCluster 的横向扩缩容的能力,Codis 内部实现了一种 Slot-Rebalance 的算法,该算法中所有的 key 都被哈希到 1024 个 slots 上,在每个 slots 分配均匀的前提下,如果一个分片中的 slots 过多,该分片中存储的 key 的数量也就越多,该分片对应的负载也就越大,在扩缩容之后为了保证集群中各分片的负载均衡,需要调整分片的 slots 的数量。 一、简述1.1、使用场景Codis的集群初始为2个分片,当业务增长需要扩容到4个分片的时候,我们可以手动指定slots指挥Codis进行数据迁移,也可以使用AutoRebalance让Codis自动的进行Slots数据迁移。 1.2、迁移原则 尽可能的均匀分配Slots; 尽量减少迁移的Slots的数量; 二、Rebalance算法2.1、Slots分配方案 统计当前迁移中Slots的结果,用于当前迁移方案的基础数据; 按照每个Group可分配Slots的最大限制,统计Group中需要迁入/...
RedisModule剖析 - RateLimit
RateLimit 是一款基于 Go的限速库 golang.org/x/time/rate (基于 令牌桶 ) 实现的针对于 key 的限速模块,该模块并非直接拦截 Redis 中关于特定 key 的操作指令,而是每次在需要执行操作指令之前,先发送一个判断命令(该模块提供的特殊命令),通过这种方式来实现限速的目的。 一、简介 GitHub 地址:https://github.com/linfangrong/redismodule-ratelimit 二、架构设计2.1、相关命令 ratelimit.allow : 为指定的 key 设置操作速率约束,后续判断是否能够继续执行需要事先发送该命令进行判断; 2.2、相关代码// 创建一个新的限速器var lm *Limiter = NewLimiter()func NewLimiter() (lm *Limiter) { lm = &Limiter{ dataList: list.New(), dataMap: make(map[string]*list.Elemen...

