tcp连接数限制因素
一般来说一台服务器建立的tcp连接数是有限的,主要是如下原因: 打开文件数量方面的系统限制最高的tcp连接并发数量要受到系统对用户单一进程同时可打开文件数量的限制 系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄。 $ unlimit -n 1024 unlimit可以查看单个进程打开的文件数限制 linux系统对于用户的打开文件数有软限制和硬限制。 软限制(soft limit):内核实际执行的限制,任何进程都可以将软限制设置为小于或等于对进程限制的硬限制的值、最大线程数和文件数。可用getrlimit读取,setrlimit设置,参数struct rlimitr.lim_cur. 软限制是限制的当前值,小于等于 硬限制,实际进程可以调用setrlimit增长到硬限制值。也就是说,软限制对进程并不是真正的限制。 硬限制(hard limit):可以在任何时候任何进程中设置,但硬限制需要由超级用户修改。对进程的资源数的限制的最大值,也可以用getrlimit读取/setrlimit设置,参数struct rlimitr.rlim_max...
apple script使用
on run {input, parameters} (* Your script goes here *) tell application "Google Chrome" activate try tell front window make new tab with properties {URL:"https://weixine.ustc.edu.cn/2020/login"} delay 3 end tell tell window 1 tell active tab execute javascript "document.getElementsByClassName('btn')[0].click()" delay 4 -- execute javascript "document.getElementsByClassName('btn ripple bottom-box-button-area-1')[0].click()" end tell ...
build cluster with bash on one node
在我自己的机器上进行实验,sh文件实现一条命令部署单个节点集群 下面是解析步骤 常量定义定义在另一个文件中 #!/bin/bash # Redis_Cluster # REDIS_SERVER_BIN="/home/k8s/homie/redis/src/redis-server" BASE_DIR=/home/k8s/homie REDIS_SERVER_BIN=$BASE_DIR/redis/src/redis-server REDIS_CLI_BIN=$BASE_DIR/redis/src/redis-cli REDIS_CLUSTER_BASE=$BASE_DIR/redis_cluster NODELIST="node2 node3 node4 node5" PORTS=`seq 7000 7005` BASEPORT=${ENTRY_PORT} HG_BASEPORT=${HG_PORT} 根据自己需要进行修改 安装redis# Check redis command if [ ! -f $REDIS_SERVER_BIN ]; then echo "Red...
redis cluster build
下载redis6.2.2并安装wget http://download.redis.io/releases/redis-6.2.2.tar.gz tar -zxvf ./redis-6.2.2.tar.gz mv redis-6.2.2 redis cd redis make 准备配置文件1、新建目录,并拷贝出6个节点的配置文件cd redis-6.2.2 mkdir -p config mkdir -p log mkdir -p data mkdir -p node cp redis.conf ./config/redis-7000.conf 2、修改每个节点的配置文件内容远程访问需要把bind注释掉 # bind 127.0.0.1 修改端口号 port 7000 默认启动时为后台启动,yes为后台启动 daemonize yes 指定进程信息存储文件 pidfile /var/run/redis_7000.pid 指定日志文件(改成自己的路径) logfile "/home/k8s/hom...
redis cluster
redis集群理论单机遇到内存、并发、流量等瓶颈时,可以采用Cluster架构方案来达到负载均衡 一 基础理论1.1分区规则数据集按照分区规则映射到各个节点 常见哈希分区: 节点取余分区 使用特定的数据,如Redis的键或用户ID,再根据节点数量N使用公式: hash(key)%N计算出哈希值,用来决定数据映射到哪一个节点上。 缺点:当节点数量变化时,如扩容或收缩节点,数据节点映射关系需要重新计算,会导致数据的重新迁移。 优点:这种方式的突出优点是简单,易理解; 这种方式常用于数据库的分库分表规则,一般采 用预分区的方式,提前根据数据量规划好分区数,比如划分为512或1024张 表,保证可支撑未来一段时间的数据量,再根据负载情况将表迁移到其他数 据库中。扩容时通常采用翻倍扩容,避免数据映射全部被打乱导致全量迁移 的情况 一致性哈希分区 一致性哈希分区(Distributed Hash Table)实现思路是为系统中每个节点分配一个token(范围一般在0~2^32),这些token构成一个哈希环。 数据读写 执行节点查找操作时,先根据key计算hash值,然后顺时针找到第一...
Redis hotkey solutions
一、热点数据的存放场景:数据库中有2000w数据,而redis中只有100w数据,如何保证redis中存放的都是热点数据? 方案:限定redis占用的内存,redis会根据自身数据淘汰策略,留下热数据到内存。所以可以计算100w数据大约占用的内存, 然后设置一下redis内存限制即可,并将淘汰策略设置为allkeys-lru或者volatile-lru. 设置redis最大占用内存: 打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型哦! maxmemory 268435456 设置过期策略: maxmemory-policy volatile-lru 当redis使用的内存超过设置的最大内存时,会触发redis的key淘汰机制,在redis3.0中的6中淘汰策略如下: noeviction :不删除策略。当达到最大内存限制时,如果需要使用更多内存,则直接返回错误信息(redis默认淘汰策略) allkeys-lru:在所有key中优先删除最近最少使用(less recently used,LRU)的key...
mac命令行加密sha等
Note: echo -n 代表不发送换行符; 不带参数默认发送换行符。 base64 encode echo -n 123|base64 or echo -n "123"|base64 or base64 -i 1.txt or echo -n 123|openssl enc -base64 1234567 base64 decode echo -n MTIz|base64 -D or echo -n "MTIz"|base64 -D or base64 -D -i 1.txt or echo MTIz|openssl enc -base64 -d;echo or echo MTIz|openssl enc -base64 -d 123456789 MD5 openssl dgst -md5 123.bin or openssl md5 123.bin or md5 123.bin or md5 -s "text" or echo -n foo|md5 or echo -n "foo"|md5 or echo -n "foo"|openssl dgst -md...
mac命令行
man一条命令man解决所有问题。 man command-name进入命令指南页面,上箭头或下箭头上下移动,使用空格来翻页,输入 / 和关键字来按照关键字搜索,按 Q 来退出使用指南页面。 输入 man -k 和关键字来对整个使用指南数据库进行搜索。 以下都是可以用man查看具体用法的: 目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 dir2 cd 改变当前目录 cd dirname pwd 显示当前目录的路径名 pwd ls 显示当前目录的内容 ls -la dircmp 比较两个目录的内容 dircmp dir1 dir2 文件操作 命令名 功能描述 使用举例 cat 显示或连接文件,可以用>>来增加文本文件内容 cat filename pg 分页格式化显示文件内容 pg filename more 分屏显示文件内容 more filename o...
会议记录
2022.2.24lxy 尽力和新的论文做比较 ycsb我还没看 要表现自己不是精心构造的case,实验数据要具有说服力 ywqnetwork打破cpu隔离 高网络流量下隔离被打破 2022.3.10lxy 对于不同的workload可以说明是总的图,先展示总和的图 ycsb只是会跑了官方版本,但是对于魔改版本还没接触 强调自己的工作与相关工作的比较,体现自己的贡献 ywq混合部署下网络对于CPU隔离的打破 举例子要写清楚区别 zxz 在相同的物理机器上时延也会上升 别人做过的最好别做了,尽量提出新的解决方式 对比别人做的related work,体现自己的区别 qzh相当于加了cache 由被动缓存到冷热感知的主动缓存 创新点在哪,宏观上有把握 或者是细节上注意,宏观上没有相应的把握 2022.3.18lxyzxz 数据中心内部流量高 虚拟化技术使得东西方向的流量很大,以前南北方向流量很大(怎么定义东西南北) 客户端和服务器之间的流量被称为南北流量。简而言之,南北流量是server-client流量 不同服务器之间的流量与数据中心或不同数据中心之间的网络流被称...
GOmake函数和slice,map解析
make函数 首先看个例子 package main import ( "fmt" ) func main() { var i *int *i=10 fmt.Println(*i) } 这个例子会打印出什么?0还是10?。以上全错,运行的时候会painc,原因如下: panic: runtime error: invalid memory address or nil pointer dereference 从这个提示中可以看出,对于引用类型的变量,我们不光要声明它,还要为它分配内容空间,否则我们的值放在哪里去呢?这就是上面错误提示的原因 对于值类型的声明不需要,是因为已经默认帮我们分配好了 分配内存,Go提供了两种方式,分别是new和make newGo提供内建函数new func new(Type) *Type 它只接受一个参数,这个参数是一个类型,分配好内存后,返回一个指向该类型内存地址的指针。同时请注意它同时把分配的内存置为零,也就是类型的零值。那么上面的函数可以改写成 func main() { var i *int i=new(int)...
MIT 6.824 2022 notes 2 chinese version
Lecture 2:RPC and threads为什么用 Go 语法先进。在语言层面支持线程(goroutine)和管道(channel)。对线程间的加锁、同步支持良好。 类型安全(type safe)。内存访问安全(memory safe),很难写出像 C++ 一样内存越界访问等 bug。 支持垃圾回收(GC)。不需要用户手动管理内存(特别是shared memory),这一点在多线程编程中尤为重要,因为在多线程中你很容易引用某块内存,然后忘记了在哪引用过。 简洁直观。没 C++ 那么多复杂的语言特性,并且在报错上很友好。 线程(Threads)线程为什么这么重要?因为他是我们控制并发的主要手段,而并发是构成分布式系统的基础。在 Go 中,你可以将 goroutine 认为是线程,以下这两者混用。 每个线程可以有自己的内存栈、寄存器,但是他们可以共享一个地址空间。 使用原因IO concurrency(IO 并发):一个历史说法,以前单核时,IO 是主要瓶颈,为了充分利用 CPU,一个线程在进行 IO 时,可以让出 CPU,让另一个线程进行计算、读取或发送网络消息等。在这里...
MIT 6.824 2022 notes 1 chinese version
chinese version课程背景构建分布式系统的原因: Parallelism,资源并行(提高效率)。 Fault tolerance,容错。 Physical,系统内在的物理分散。 Security,不可信对端(区块链)。 分布式系统面临的挑战: Concurrency,系统构件很多,并行繁杂,交互复杂。 Partial failure,存在部分失败,而不是像单机一样要么正常运行,要么完全宕机。 Performance,精巧设计才能获取与机器数量线性相关的性能。 课程组成 Lectures,授课,一些案例学习。 Papers,论文。 包括一些经典的和前沿的、学术的和工业界的。 看其观点,学其实现,断其性能。 抓重要部分,略次要部分。 课程主页有所有论文链接。 Exams,期中期末两次考试。 Labs:四个实验 lab1: MapReduce lab2: Raft 容错 lab3: K/V server use Raft lab4: Shared K/V based on lab3分布式系统巨难调试,做好心理准备,早点开做。 Project,可以自选相关题目...
