首页
关于作者
阅读记录
友链
Search
1
微内核插件架构风格在skywalking agent 上的实践
363 阅读
2
debian 11 安装nginx 并配置端口映射
341 阅读
3
和chatgpt聊设计
307 阅读
4
开始看《金阁寺》
246 阅读
5
github上star的工程分类记录
202 阅读
不知所云
杂记
书籍摘抄
有点技术
Redis
运维
架构
nginx
byzer
尚未分类
程序人生
与AI聊天
登录
/
注册
Search
标签搜索
nginx
redis
byzer
github
运维
mybatis-plus
王猪
累计撰写
25
篇文章
累计收到
3
条评论
首页
栏目
不知所云
杂记
书籍摘抄
有点技术
Redis
运维
架构
nginx
byzer
尚未分类
程序人生
与AI聊天
页面
关于作者
阅读记录
友链
搜索到
24
篇与
的结果
2023-06-09
redis big key 排查思路的奇思妙想
redis big key 排查思路的奇思妙想今天在秦晓辉的运维系统监控专栏交流群中,看到了几位朋友在讨论redis big key 扫描的方案。不自觉的来了兴致,参与了讨论。并且有一些比较奇特的思路。定义big key为了让对redis较为陌生的朋友不清楚big key的含义有一定的认知。我们先来定义一下Big Key。一切因为大,而导致redis去执行命令,网络传输而导致慢的key,都可以称为Big Key。一个String的值特别大一个List的元素特别多一个Hash的元素特别多List、Hash中某个元素特别大都可以称为Big Key。那具体,多大才算大呢?那其实要看你具体业务的容忍度了,并不是一个很严格的限制。这是我在知乎上看到一个博主对Big Key 大小的定义:一个STRING类型的Key,它的值为5MB(数据过大)一个LIST类型的Key,它的列表数量为20000个(列表数量过多)一个ZSET类型的Key,它的成员数量为10000个(成员数量过多)一个HASH格式的Key,它的成员数量虽然只有1000个但这些成员的value总大小为100MB(成员体积过大)我个人认为他对这个值度量定义的门槛颇低了,我目前开发维护的系统中,对一个String的Key,认为超过100KB就开始算大,超过1MB是严禁发生的。如何排查Big Key那如何排查Big Key呢?何时排查Big Key呢?一般情况下,我们应该在第一次上生产之前,对系统进行全面的各项测试,其中就应该包括Big Key 的排查。其次,就是在生产运行中,也许我们测试不够全面、也许多次迭代下来会有新的Big Key,我们应该由监控系统进行扫描排查。对于Big Key的排查来说,那应该就是把所有的Key,按照我们的阈值进行比对其占用的内存大小,判断其是否为Big Key。而我们知道,对于Redis 这种高性能内存缓存来说,我们都尽量使用一个O(1)算法复杂度的命令来调用,性能最佳。而全部Key进行扫描,显然是一个O(n)的复杂度,将会阻塞Redis 相当长的时间。而群里的讨论点在于:在压测的过程中,对redis big key进行扫描,并且尽量不影响性能。那让我们来看看传统的方案,以及个人的奇思妙想。官方解决方案在官方文档 Scanning for big keys中如下描述:In this special mode, redis-cli works as a key space analyzer. It scans the dataset for big keys, but also provides information about the data types that the data set consists of. This mode is enabled with the --bigkeys option, and produces verbose output.$ redis-cli --bigkeys # Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You can use -i 0.01 to sleep 0.01 sec # per SCAN command (not usually needed). [00.00%] Biggest string found so far 'key-419' with 3 bytes [05.14%] Biggest list found so far 'mylist' with 100004 items [35.77%] Biggest string found so far 'counter:__rand_int__' with 6 bytes [73.91%] Biggest hash found so far 'myobject' with 3 fields -------- summary ------- Sampled 506 keys in the keyspace! Total key length in bytes is 3452 (avg len 6.82) Biggest string found 'counter:__rand_int__' has 6 bytes Biggest list found 'mylist' has 100004 items Biggest hash found 'myobject' has 3 fields 504 strings with 1403 bytes (99.60% of keys, avg size 2.78) 1 lists with 100004 items (00.20% of keys, avg size 100004.00) 0 sets with 0 members (00.00% of keys, avg size 0.00) 1 hashs with 3 fields (00.20% of keys, avg size 3.00) 0 zsets with 0 members (00.00% of keys, avg size 0.00) 也就是使用redis-cli --bigkeys 命令进行扫描,并会按照strings、lists、sets、hashs、zsets统计。The program uses the SCAN command, so it can be executed against a busy server without impacting the operations, however the -i option can be used in order to throttle the scanning process of the specified fraction of second for each SCAN command.这个命令是通过SCAN指令进行实现的,并不是一次性直接对redis完成扫描,对于已经繁忙(处于)压测的服务器不会完全影响业务进行。但是实际上,也会有一定的性能影响。这个方案,也是这位测开朋友在压测时采用的方案。不过,他忽略了(当然,早期的客户端不一定支持这一参数)可以使用 -i 0.01参数可以更好的降低对redis服务器处理业务请求的影响。-i 0.01代表着redis-cli这一客户端在每执行一次SCAN指令后,会暂停0.01秒的时间。这一参数会导致big key 扫描本身耗时有一定增加,但是对redis服务器的压力就是降低许多,毕竟0.01秒对redis这种高性能的中间件来说,已经是一段不断的时间了。所以,就目前来说,最方便也最稳妥的方式就是redis-cli --bigkeys -i 0.01。解析RDB文件并统计RDB文件作为redis的一个全量持久化文件。通过下载并对他的解析统计Big Key,这对Redis服务器的资源则没有任何消耗,是十分合理的。但是若是为了扫描Big Key,在压测环境下执行BGSAVE这样的持久化指令,其fork进程的过程也会产生一定的阻塞,在Redis对他的标记上,也是@slow的。所以扫描一个已经产生的RDB文件是可取的,特意去持久化一次,理论上对Redis产生的阻塞也是不小的。那具体其耗时如何,也未进行实验验证。而这样的一个工具:redis-rdb-tools 在github上也拥有4.8K的star,想必使用的用户也是不少的。但是,我注意到了一点,这个工程最后一次提交在2020年。而截止目前,redis在其后已经相继发布了redis 6、redis 7等更高的版本,并且对于RDB文件的格式,在redis 7.0 已经更新到了format 10。这一“年久失修”的redis-rdb-tools 未必能够解析新版本的RDB文件。网络统计个人突发奇想,若是在网络层面上,通过抓包进行分析,对redis的TCP报文进行复制,然后使用Redis对应版本的RESP2、RESP3报文解析,不就可以分析这段时间内,客户端获取过的Big Key了吗?这样对redis服务器的CPU等资源就没有什么消耗了。当然,这个方案也有很明显的缺点,除了需要自行编写工具去分析以外,还存在很多分析不到的位置。例如一个LRANGE指令,对指定key的list进行范围扫描并返回:LRANGE key start stop它的复杂度是O(S+N),其中S的复杂度与列表的HEAD或者TAIL的距离有关,而N则是范围内元素的个数。所以当S很大,而N很小的时候,返回给客户端的数据量,其实还是小的,而它可能是一个Big Key,但是我们这个方案是没有机会发现它了。新增从节点个人觉得这是一个很妙的方式,具有可行性,但是也比较浪费,意义不是十分大的方案。我们可以在压测开始前,通过slave of 命令,将我们新起的一个redis节点作为压测节点的从节点。并且这个节点对应用不可见。那么我们在这个节点上进行big key的统计,就对业务没有任何影响了。总结官方提供的方式:redis-cli --bigkeys -i 0.01 应该是处理运行中的 redis big key 扫描的最佳方案了,当然,我们尽量避免高峰期去执行。不知道是否还有其他的方式进行Big Key 的扫描呢~附上今晚与太阳一同下班时,美丽的夕阳映照着河水产生金色氤氲的绝美画面,希望你也喜欢~
2023年06月09日
93 阅读
0 评论
0 点赞
2023-06-09
开始看《金阁寺》
焚毁后再修复的金阁寺,两极的碰撞,又有怎么样的心绪呢?
2023年06月09日
246 阅读
0 评论
0 点赞
2023-06-08
debian 11 安装nginx 并配置端口映射
debian 11 安装nginx 并配置端口映射问:Debian 11 x64 安装nginx 并配置 443 与80 映射到8080端口chatgpt的回答安装nginx并配置端口映射的步骤如下:安装nginx在Debian 11 x64上安装nginx可以使用以下命令:sudo apt update sudo apt install nginx安装完成后,nginx就会自动启动并监听80端口。配置端口映射为了将80和443端口映射到8080端口,需要修改nginx的配置文件/etc/nginx/sites-available/default。可以使用以下命令打开该文件:sudo nano /etc/nginx/sites-available/default在该文件中,找到以下两行:listen [::]:80 default_server; listen 80 default_server;将它们修改为:listen [::]:8080 default_server; listen 8080 default_server;然后,在该文件中再找到以下两行:listen [::]:443 ssl default_server; listen 443 ssl default_server;将它们修改为:listen [::]:8443 ssl default_server; listen 8443 ssl default_server;保存并关闭该文件。重启nginx配置完成后,需要重启nginx才能使配置生效。可以使用以下命令重启nginx:sudo systemctl restart nginx重启完成后,nginx就会监听8080和8443端口,并将它们映射到80和443端口。现在,您可以通过访问服务器的IP地址或域名来访问nginx服务器了,例如:http://your_server_ip/ https://your_server_ip/这些请求会被映射到8080或8443端口,并由nginx处理。实际的操作chatgpt 并不是万能的,存在错误和学习不及时。实际上,debian系安装的确如此apt install nginx 即可,不过生成的配置文件在/etc/nginx/nginx.conf。443端口是https的默认端口,还需要配置证书的,当然,修改配置文件后,重启生效是正确的。最简配置文件# 为注释,无需删除,不影响 #user www-data; worker_processes 2; #pid /run/nginx.pid; #include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { # HTTP请求转发配置 server { listen 80; # 域名 server_name wangpig.life; location / { # 代理的IP:端口 proxy_pass http://wangpig.life:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # HTTPS请求转发配置 server { listen 443 ssl; server_name wangpig.life; # 申请的证书所在的位置 ssl_certificate /root/zero-ssl-cert/certificate.crt; ssl_certificate_key /root/zero-ssl-cert/private.key; location / { proxy_pass http://wangpig.life:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } 遗漏的操作开通网络规则,或者关闭防火墙。没有关闭防火墙会导致外部无法访问。而本机通过curl则可请求得到响应。因为忘记修改防火墙,导致我这个nginx新手以为配置错误,查了好久,是有点菜了。在 Debian 11 上,可以使用以下命令来关闭防火墙:如果你使用的是 UFW 防火墙,可以使用以下命令来关闭它:sudo ufw disable如果你使用的是 iptables 防火墙,可以使用以下命令来清空规则并关闭它:sudo iptables -F sudo iptables -X sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables-save > /etc/iptables/rules.v4 sudo systemctl stop iptables sudo systemctl disable iptables请注意,关闭防火墙会使你的系统更加容易受到攻击,因此建议在必要的情况下才关闭防火墙。如果你需要在特定端口上打开流量,请确保只允许必要的流量通过,并使用其他安全措施来保护你的系统。
2023年06月08日
341 阅读
0 评论
0 点赞
2023-06-08
完整搭建个人博客的大致记录
完整搭建个人博客的记录说起搭建个人博客的原因,根本原因是CSDN方式我不是很喜欢,一堆广告,没经过验证的博客就可以往上面写,看着也心烦。遇上这次618活动,服务器打折,直接就是买买买。博客选型肯定不用静态博客,如果要用静态博客,直接github page或者gitee page 就完事了。动态博客,最著名最大的应该是WordPress,插件、主题都很多,功能十分丰富。然而乱花渐欲迷人眼,对小白不是很合适。Typecho 轻量,主要支持写markdown的朋友们,主题支持也是相当棒的。我最终选择的也是这款。部署按照官网推荐即可。当然,我这里是直接用了腾讯云的镜像,开机即可用。主题选择我曾经推荐的是 Twenty Fourteen但是呢,与其他一些主题一样,它的文章宽度太小,支持的设置也很少,代码格式也不可以调整。现在已经切换到JOE,宽度很不错。我FORK后做了一点点小修改。https://gitee.com/wanglhup/Joe将其放到对应的themes目录中,在Typecho 后管中即可切换,无需重启。购买服务器购买服务器上,国内主要还是阿里云、腾讯云、华为云等等,国外的话选择较多,amazon,oracle,vultr等等。不过为了国内用户访问快速稳定,我选择了国内。(这是一条相对麻烦的方式)我以腾讯云为例,乘着活动购买2c4g5m配置的服务器。为了避免广告之嫌疑,我就不上什么链接了,其他厂商也很棒!购买域名、配置证书这里就需要注意了,如果在国外购买了域名,你是没这么容易解析到自己国内的服务器上的,因为国外购买域名可以不用备案。但是你配置解析到国内服务器时,会被对应的云厂商拦截。所以,我在购买一个之后,发现了这个问题。。。然后我就在腾讯云中再次购买了一个类似的域名,也就是现在的wangpig.cn。对于一个HTTPS协议来说,还是需要一个CA机构颁发的证书的,这些在腾讯云的引导下,也是可以在控制台完成的。如果是自己操作,就需要手动去申请CA证书,然后上传到服务器的目录之下,然后再修改nginx的配置,也并不难。域名备案、网站备案在域名解析验证通过后,没过多久,腾讯云又会拦截你。因为你网站也是需要备案的!这里我就不详细展开讲了,因为腾讯云文档已经足够的完善,引导的也很好。而且我这儿讲了,后续手续变化也是可能存在的。要说的就是,没有必要请什么备案管家,普通性质的网站备案并不麻烦。只要按照流程填写即可,仅需要注意的是,你的备案网站名中不可以包含你的域名。就因为这个被腾讯云发回过一次。之后就是腾讯云通过后,提交管局。这是一个漫长的过程,大概是真的和官网说的那样,10天左右。浙江这边备案完成,是会给你发短信提示的。公安备案在域名、网站备案完成后,腾讯云完成同步,此时你已经可以使用域名访问到你的主机了。但是他也会提醒你,需要在30日内在当地公安完成备案,这也不需要外出去备案,同样是网上完成。之后将备案号写在网站底部即可。PS对于一个懂点linux的人来说,建站部署是比较轻松的,即使我不懂php和js。麻烦还是流程上的事。如果是国外的服务器与域名,大概1天就可以完成部署,再调整1-2天,博客就是你个人的模样了。
2023年06月08日
101 阅读
0 评论
0 点赞
2023-06-06
《瓦尔登湖》
读《瓦尔登湖》记作者:王光林(译)出版社:中央编译出版社出版时间:2015-10-1 书评书写的和书名一样平静,梭罗用两年时间在瓦尔登湖生活,让人感受两个世界:美丽的田园生活,不断扩展的商业与铁机器。所用词藻并无太过绚丽,让人平静的体会到湖边的四季变化,自然与动物的生趣。出世而不冷漠的生活态度。算清每一笔帐却不受金钱的制约。心中满是自由与浪漫。没有太多的欲望而活得充实。独自一人而又不孤独。花上半周的时间来品尝它,如饮一杯新茶,清甜甘冽,温馨淳朴。读后感是时代的大变革,会让许多人跟不上时代的列车。工业革命、资本主义让许多农民将自己生产的农作物运往远方的城市。资本家们又让他们学会吃肉、饮酒、咖啡、饮茶,不断刺激他们的欲望,让他们从事更多的工作。得到了很多,失去了更多。衡量孤独的,并不是人与人之间的距离。农夫会因一天的劳作,夜间独处而去酒吧排解孤独。学者整日坐于房中研究不觉孤独。而我,此刻写下自己的感悟,也不孤独。感悟自己身边的一切,虽不似那湖边,会有啃食土豆的鼹鼠,没有深邃平静的瓦尔登湖,没有人驱使的马车。但我们有相似的火车驶过,大老远也能感受到城市脉搏的跳动。江北是个神奇的地方,作为城市的它,虽然已经在大楼林立的过程中,缺没有分秒必争的紧迫感。抬头仍然是洁白的云朵,蔚蓝的天空,没有不见天日的灰黑色雾霾。工地打桩的震动声,汽车飞速驶过排开空气的撕扯声。啊,若是没有繁重的任务,我也想像梭罗一样,去湖边度过漫长的下午,即使什么也不想,也很充实。没错,就是那种不钓鱼而乐之乐。减少欲望,控制欲望。用眼睛,灵魂,不仅看这天地辽阔,也要内视无限可能。切不可让身外之物耗费了自己过多的时光。书摘1我们是教养不良、粗俗卑贱的文盲;文盲有两种,一种目不识丁,一种只会读些幼儿和弱智读物,至于二者的区别,坦率地说,我看不出来。我们应该像古代的圣人一样优秀,但首先我们要知道他们优秀在何处。我们就像是一群小鸟,想在智力上有所飞翔,但却飞不出日常报刊的报道。心得:读书,只有读好书,才算是阅读。网文很多只是消遣,大部分是弱智读物🤣2我发现,两腿无论多么用力。都无法使两颗心灵靠得更近。心得:嗯,心灵的碰撞,也许是用飘的吧_(:з」∠)_3因为我这个人生来就是个毕达哥拉斯①门徒,至少就大豆而言,无论这大豆是意味着吃饭,还是选举,抑或交换大米;心得:初中毕业以后还是第一次看到pythagoras的名字。也不知道初中的数学老师是不是也是他的门徒。没有他,我大概是记不住这个名字的。4智慧和纯洁源自努力;无知和淫荡源自懒惰。5鼹鼠跑到我的地窖里筑巢,啃掉了三分之一的土豆,它们甚至还用我泥墙时留下的一些兽毛和棕色包装纸,做了一张舒舒服服的小床;因为就是最野蛮的动物,也跟人类一样热爱安逸和温暖,它们之所以能够活过冬天,就是因为它们小心翼翼,将所有的温暖和安逸都得到。心得:没有因为被啃掉的土豆而恼怒无比,还在体会着鼹鼠的温暖与安逸。那(小部分)人类又为何天天高喊着打破舒适圈呢?令人不解!6然而,我们却认为,如果我们将农场周围的栅栏拆掉,砌起石墙,那么我们就会给自己的生活设置范围,使自己的命运有所着落。说真的,如果你被选为市镇文书,今夏你就去不了火地岛;不过你倒可以去地狱烈火中。宇宙比我们看到的要大多了。心得:得到一些东西,也会有对应的责任,一定程度上,限制了自由。得到的越多,限制的高墙越厚。7大地的表面十分松软,人走过后自然会留下脚印;心灵的途径也是如此。世界公路是多么破,多么脏啊!传统与顺从的车辙又是多么深啊!我不愿待在船舱里,宁愿来到世界的桅杆前和甲板上,因为站在这儿,我可以更好地看一看群山环抱的月色。我再也不想到船舱下面去了。心得:吾愿登高,看砂石细腻!8据说米拉波①拦路抢劫,“为的是验证一下,倘若自我要想对抗最神圣的社会法则,到底需要多大的决心”。他声称,“一个英勇作战的士兵,其勇气只有拦路强盗的一半”。——“荣誉和宗教永远阻挡不了一个审慎而坚定的决心。”照此说来,这件事颇具男子汉气概,然而,就算他不是亡命之徒,这件事也十分无聊。如果一个人更加清醒一点,他就会发觉自己屡屡在跟所谓的“最神圣的社会法则”进行“正式的对抗”,因为他要听从更加神圣的法则,根本不用越出常规,就可证明自己的决心。一个人不应该对社会采取这样一种态度,而应该保持自己的态度,顺应自身的生命法则,但这决不是同正义的政府进行对抗,倘若他能碰到这样一个政府的话。心得:的确,如果自己是认可这样的法则的,自己又要去对抗。对抗的就是自己的心,自己的信仰,自己的本能,是很难做到的。
2023年06月06日
96 阅读
0 评论
0 点赞
1
...
3
4
5
浙公网安备 33020502001051号
浙ICP备2023015387号-1