最新 | 最热门 | 最高评价

+0  Stone MS-240x Typewriter (2): Hardware Design

Tag: misc | tech
Difan Zhang 发于 2020年09月18日 14:00 | 点击: 436 | 展开摘要
In case you misseed it -- I talked about the backgrounds of the MS-240x typewriter in the previous article. In this article, I'm going to discuss the hardware design of the legendary Stone MS-240x Chinese Typewriter (四通 MS-240x 中英文打字机) desi

查看全文: http://www.udpwork.com/item/17830.html

+0  遭遇lj_str_new

Tag: Technical | Lua | OpenResty | Performance
老王 发于 2020年09月15日 20:18 | 点击: 395 | 展开摘要
话说前几天我刚通过 mlcache 优化了热数据的问题,屁股还没坐热乎呢,就发现系统性能又下降了,本着自己挖的坑含泪也要填上的原则,我再一次开始了性能调优之旅。

对某个 nginx 进程执行 perf top

毫无疑问,从 perf top 结果来看,lj_str_new 已经成为了性能最大的短板。不过我们还是要搞一个 lua 语言级别的火焰图看着才靠谱,于是有了下图:

优化前的火焰图

不出所料,lj_str_new 非常宽,不过没有更详细的调用栈信息,不方便判断问题

查看全文: http://www.udpwork.com/item/17716.html

+0  记一次性能调优

Tag: Technical | Lua | OpenResty | Performance
老王 发于 2020年09月12日 16:45 | 点击: 367 | 展开摘要
面对性能调优问题,很多人往往只是单纯的套用既往的经验:先试试一个,不行再试试另一个。面对简单的问题,如此通常能事半功倍;但是当面对复杂问题的时候,单凭经验往往并不能达到立竿见影的效果,此时我们需要更精准的判断性能短板在哪里。

一个 openresty 项目,不了解 openresty 的可以参考我以前的文章,从 top 运行结果看,软中断 si 分配不均,绝大部分压在了 CPU5 上,导致 CPU5 的空闲 id 接近于零,最终的结果是其它 CPU 虽然还有空闲 id,但是

查看全文: http://www.udpwork.com/item/17717.html

+0  Revealing a Forgotten Chinese Compute History: Stone MS-240x Typewriter (1): Background

Tag: misc | tech
Difan Zhang 发于 2020年09月09日 16:30 | 点击: 388 | 展开摘要
While typewriters for European languages was available since the 1800s, Chinese typewriter was always hard to build. In the late 80s in PR China, a company, Stone Company (四通公司), in coordination with Mitsui & Co., Ltd, released a series

查看全文: http://www.udpwork.com/item/17831.html

+0  我的Golang热重载工具Air不好使了

Tag: Technical
老王 发于 2020年08月23日 16:28 | 点击: 331 | 展开摘要
我使用 VSCode Remote-Containters 作为 golang 开发环境,因为生产环境使用的镜像主要是 alpine,所以开发环境自然而然使用了 golang:alpine,对应 Dockerfile 的内容如下:

FROM golang:alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.cloud.tencent.com/g' /etc/apk/repositories
RUN apk add alpi

查看全文: http://www.udpwork.com/item/17718.html

+0  手把手教你用ETCD

Tag: Technical | ETCD
老王 发于 2020年08月19日 17:34 | 点击: 514 | 展开摘要
一句话概括的话:ETCD 是一个基于 RAFT 的分布式 KV 存储系统。一个 ETCD 集群通常是由 3、5、7 之类奇数个节点组成的,为什么不选择偶数个节点?在集群系统中为了选出 LEADER 节点,至少要有半数以上的节点达成共识,举例说明:

当集群有 3 个节点的时候,至少要有 2 个节点达成共识,最多容灾 1 个节点。

当集群有 4 个节点的时候,至少要有 3 个节点达成共识,最多容灾 1 个节点。

当集群有 5 个节点的时候,至少要有 3 个节点达成共识,最多

查看全文: http://www.udpwork.com/item/17719.html

+0  记录Viper加载远程配置填坑过程

Tag: Technical | Golang
老王 发于 2020年08月10日 17:13 | 点击: 389 | 展开摘要
关于 viper,无须多言,它是 Golang 社区里最流行的配置文件工具,除了常见功能之外,它还支持很多高级功能,比如可以加载远程配置,正好我最近在研究 etcd,于是我打算把二者结合起来,没想到就此开启了填坑之旅。

按照文档上的介绍,只需启动一个 goroutine 执行 WatchRemoteConfig 即可:

Watching Changes in etcd

可惜当我套用如上代码时,却发现在我的环境里根本没法用。究其原因,是因为 viper 依赖 crypt,

查看全文: http://www.udpwork.com/item/17720.html

+0  Golang代码修改后自动重启

Tag: Technical | Golang
老王 发于 2020年07月31日 19:22 | 点击: 362 | 展开摘要
写 Golang 项目有两件很烦的事情:一件是错误处理时连绵不绝的「if err != nil」,另一件是作为编译型语言,代码修改后不能实时看到效果,

借助一些工具可以实现文件修改后自动编译重启,比如:

Linux 环境:inotify-tools(Golang Automatic Reloads)

Mac 环境:fswatch

不过常见的工具要么不跨平台,要么操作复杂,好在我发现了一个 facebook 出品的神器:watchman,不仅跨平台,而且操作简单,你只要

查看全文: http://www.udpwork.com/item/17721.html

+0  白话布隆过滤器

Tag: Technical
老王 发于 2020年06月22日 12:31 | 点击: 354 | 展开摘要
日常开发中,一个常见需求是判断一个元素是否在一个集合中。比如当你在浏览器中输入一个网址的时候,浏览器会判断网址是否在黑名单里。通常的解决方案是直接查询数据库,看看是否存在相关的记录,不过这往往会比较慢,于是我们又会引入缓存来提升速度,可是当数据比较多的时候,缓存会消耗大量的内存。有没有既速度快又节省内存的解决方案呢?本文介绍一种算法:布隆过滤器(Bloom filter)。

所谓布隆过滤器,是由一个名叫布隆的人提出的:当一个元素被加入集合时,通过多个哈希函数将元素映射到一个

查看全文: http://www.udpwork.com/item/17722.html

+0  记一次Redis连接池问题引发的RST

Tag: Technical | Linux | Systemtap
老王 发于 2020年05月04日 01:01 | 点击: 565 | 展开摘要
某个项目,因为监控尚不完善,所以我时常会人肉查查状态,终于有一天发现了异常:

watch -d -n1 ‘netstat -s | grep reset’

如图所示,服务器发送了大量的 reset,在我 watch 的时候还在发,多半有问题。

通过 tcpdump 我们可以简单抓取一下 RST 包:

shell> tcpdump -nn 'tcp[tcpflags] & (tcp-rst) != 0'

不过更好的方法是通过 tc

查看全文: http://www.udpwork.com/item/17723.html

+0  记一次有惊无险的丢包调试经历

Tag: Technical | Linux | Systemtap
老王 发于 2020年04月27日 15:38 | 点击: 481 | 展开摘要
某个项目把服务器从 CentOS 操作系统从 5 升级到了 7(3.10.0-693),一切都很顺利,直到我在服务器上闲逛的时候,无意间发现了一个「大问题」:网卡 eth0 在 RX 上存在丢包(dropped)现象,丢得还很有规律,每一两秒丢一个包!

watch -d -n1 ‘ifconfig’

一开始怀疑是不是网卡的 ring buffer 太小了,通过「ethtool」确认:

shell> ethtool -g eth0
Ring

查看全文: http://www.udpwork.com/item/17724.html

+0  几个无理取闹的coding心得

Tag: tech | bla | 杂谈
张炎泼(xp) 发于 2020年04月26日 08:00 | 点击: 457 | 展开摘要
软件开发里所有的东西都已经发明出来了!
人们总是在做重复的事情, 假装在发明新的东西.
如果有个东西让你觉得很酷很新, 那它肯定是从Smalltalk, HAKMEM, Ivan
Sutherland, Douglas Engelbart, 早期的IBM, 或者Bell 实验室其中之一抄来的.

别相信编译器, 别相信工具, 别相信文档, 别相信你自己.

我们已经不需要更多的编程语言了!
但是… 你还是会立马跑去发明一个新的语言.
恩…我猜, 你那个超酷的新语言肯定还是用的

查看全文: http://www.udpwork.com/item/17481.html
|<<<1234567>>>| 一共30页, 355条记录