bingoohuang
bingoohuang
## 缘起 那天,有一小哥虔诚的来问我,说他不小心在客户那边有一个 50 G 的 ZIP 包(客户实现打好的),需要在网络上传走,可是找不到特那么大的 50 G 的内存,咋办? 我有点“吓尿”了,我大概知道了,这小哥估计想是把整个文件,囫囵吞枣一样,一口吃进内存,然后再进行一些处理吧! > 详细了解后,他还真是这么干的。他还写了一个测试程序,用了个 10M 的 zip 包做测试数据文件,还用读文件一行一行读接口去读,说竟然还读出来了。然后想去玩 50 G的包,然后就 OOM 了。 > 听完后一行一行的读后,我心理就默默的疑问,非文本文件也用一行一行读,难道他精通 Unix/Linux 哲学?Unix/Linux 哲学中的第5条:使用纯文本文件来存储数据 。 首先,度娘一下,ZIP 包的结构,了解一下大概是什么样子,如下所示,大概知道,还是一个文件写一块的嘛(我设计也得这么玩啊),流式写,磁盘缓冲写,估计几...
## 问题列表 1. 问:假设千兆网卡,单次请求包 1M,其它条件没限制,请问单台 TPS 能达到一万么? 2. 问:我的接口平均响应时间是 200 毫秒,期望 TPS 是 1 万,需要多少并发连接? 3. 问:为什么我的并发连接数加到 100 以后,TPS 就上不去了,而且不升反降? 4. 问:客户说要十万并发,我们能实现么? 5. 问:为什么我的 CPU 没打满,TPS 还是上不去呢? 6. 问:假设,甲接口平均响应时间是 100...
# 如何在不杀掉进程前提,关闭一个 TCP 连接? 看帖:https://mp.weixin.qq.com/s/JYNmDxZ4DQQ-dSZZR0Gp5Q 结论: 1. killcx 是一个 perl 脚本,要跑起来,还需要安装一些必要依赖。 1. 在连接正在忙碌(数据传送)时,很难杀死。 大家在关闭 TCP 连接第一反应都是「杀掉进程」。 是的,这个是最粗暴的方式,杀掉客户端进程和服务端进程影响的范围会有所不同: 在客户端杀掉进程的话,就会发送 FIN 报文,来断开这个客户端进程与服务端建立的所有 TCP 连接,这种方式影响范围只有这个客户端进程所建立的连接,而其他客户端或进程不会受影响。 而在服务端杀掉进程影响就大了,此时所有的 TCP 连接都会被关闭,服务端无法继续提供访问服务。 所以,关闭进程的方式并不可取,最好的方式要精细到关闭某一条 TCP 连接。 有的小伙伴可能会说,伪造一个四元组相同的 RST...
TPS 那些事儿
# TPS 哪些事儿 ## TPS 具体是指什么? TPS 的英文全称是 Transactions Per Second,即每秒事务数。例如,每秒钟签名数量,每秒钟加密数量,每秒钟生成订单的数量等。有时候,我们见到类似的 HPS (每秒点击数),QPS(每秒查询数),RPS(每秒请求数)等,我们可以理解成是 TPS 的事务映射成点击、查询、请求的更加具体的解释上,为了方便起见,以下我们都统称 TPS。 为了让大家有一个直观的概念,我这里从一篇 2019 年的博客[Database Comparison - SQL vs. NoSQL (MySQL vs PostgreSQL vs Redis vs...
今天给同事培训了一下Golang的入门知识 ,要求录制一下屏幕和声音。在此记录一下录制方法。 1. 使用内置的QuickTime Player来录制屏幕和声音。 文件 -> 新建屏幕录制,点小三角,麦克风选"Macbook Pro麦克风",或者“聚集设备“  2. 保存后,是比较大的mov格式的文件,可以用[HandBrake](https://handbrake.fr/),或者[VLC](http://www.videolan.org/vlc/) 选择转换为mp4格式,减少大小。1.72G就变成了223M了。 > HandBrake is a tool for converting video from nearly any format to a selection of modern,...
# [SQLite Playground](https://sqlime.org/) 
In the real world, Rust is the coating closest to the bare metal.  图片来自于[Why Programming Language “Rust” is Getting all the Love](https://www.cbronline.com/analysis/rust-language) 没事翻翻slideshare上的ppt。一些觉得好的,收藏一下。 ## Rust这个名字是个什么鬼? [TL;DR](https://www.reddit.com/r/rust/comments/27jvdt/internet_archaeology_the_definitive_endall_source/): Rust is named...
走马观花2021
[我在架构设计和代码开发中的一些常用原则](https://mp.weixin.qq.com/s/XAdSl1zkOeJpcWHrS0IAVw) > 不管我一生中取得了多大的成功,其主要原因都不是我知道多少事情,而是我知道在无知的情况下自己应该怎么做。我一生中学到的最重要的东西是一种以原则为基础的生活方式,是它帮助我发现真相是什么,并据此如何行动。 > ——瑞·达利欧(Ray Dalio)
毁三观的图:  三观回正的图:  [用了这么久HTTP, 你是否了解Content-Length和Transfer-Encoding ?](https://blog.piaoruiqing.com/2019/09/08/do-you-know-content-length/) 由Content-Length导致的问题引发的一系列思考: > 前段时间开发API网关, 使用postman调试时出现了超时的情况, 经排查确定是请求数据被处理后Content-Length与实际不一致导致的问题, 故有此文. ### 前言 Content-Length, HTTP消息长度, 用十进制数字表示的八位字节的数目. 一般情况下, 很多工作都被框架完成, 我们很少去关注这部分内容, 但少数情况下发生了Content-Length与实际消息长度不一致, 程序可能会发生比较奇怪的异常, 如: 1. 无响应直到超时. 1. 请求被截断, 而且下一个请求解析出现错乱. ###...