如何 mock 系统高负载

查看原文

要想测试系统在高负载情况下的行为,能够稳定造出高负载就很需要,有时候不需要安装特定的工具也能造出来。

  • 造出 CPU 繁忙的景象:
    • 压缩随机数据流: cat /dev/urandom | gzip -9 > /dev/null
    • 更大,更大,更大:| gzip -9 | gzip -d | gzip -9 | gzip -d > /dev/null
  • 造出内存不够用:
    • 在内存中 mount 一个 ramfs 文件系统,然后写文件 dd if=/dev/zero of=z/file bs=1M count=128 设定块大小和多少块。
  • 造出磁盘不够用:
    • 把上面产生的文件复制几份。
read more

Chef 的最佳实践

查看原文

Chef 的最佳实践一文,即便只是看作 devops 的一些范式,也很有参考意义。

  • 常见的部署模型有 推(ansible)和拉(chef) 两种风格。对于 chef 这种拉式部署,需要解决的问题是怎么快速在 host 上搞起来 agent。一个方案是 master 上提供 bootstrap 的方案,将 agent 的部署使用 ssh / WinRM 推到 slave 上。
  • 配置和代码分离是部署的一个重要步骤。配置的几个关键点:代码中的默认配置,基于 role 的配置,基于环境的配置。由于环境可能差异比较大,配置设定应该要做到提供尽可能细的粒度以应对不同的场景。
  • 将配置版本化存入一个中心设施,部署时可以选定选定的版本。
read more

Python 文档 - memoryview

查看原文

Python 类memoryview 可以从一个支持 buffer protocol 的对象中不加拷贝地拿到原子内存单位 (atomic memory unit),例如 bytes 可以获取单字节,列表可以获取单元素。它支持 slice 语法:mv=memoryview(b'abc'); print(bytes(mv[1:2]))。不用 copy 主要就是为了提升效率。

read more

通配符 glob 语法简介

查看原文

在很久以前,glob 是 UNIX V6 的一个程序,后来就被整合进 shell 成为内建功能。Globbing,就是将一些通配符扩展为一个路径的列表。跟正则表达式不同的是,? 表示任何单一字符,* 表示包括空格在内的任何字符。 * [] 中间一定要有东西,用于表示字符集。 例如 [][!] 表示的其实是 [, ], ! 这三种字符。 * [] 中间可以用短横线表示范围,例如 [a-ZA-Z0-9] 表示字符数字,[--0] 表示 -, ., 0; []-] 表示 ], -。 * [] 中间用反斜杠 \ 做转义。 * 两个设定: * '/' 不会被 * 或者范围识别出来,因为这个程序是用来识别路径的。 * . 开头的文件需要显式指定出来,例如 rm * 是不会删除 .profile 的。 * 没有任何东西识别出来,对应的是空列表。

read more

PyPI 钓鱼包

查看原文

PyPI 上出现过钓鱼包,开发者可能只是输错了一个字符就导致安装了带了后门的包。被抓包是因为没做好 Python3 的兼容,不然可能还能潜伏更久。由于 PyPI 在最开始设计的时候就不做安全校验,任何人都可以将任何包丢到 PyPI 上,因此安全防护需要开发者自己格外小心。防范措施:安装包前一定要再三确认这个包是正确的包,另外不安装来自不信任源的包。

read more

AOSA Book - VTK

查看原文

The Architecture of Open Source Applications - VTK。 * VTK 项目选用的基本上都是很成熟的工具。 * 使用工厂模式,可以承载多种类型的实现,甚至在运行时允许替换实现以提升性能 * 项目有处理大量数据的需求,所以使用引用计数,在性能上很高效。缺点是会有臭名昭著的循环应用,解决办法是通过改善算法定位出这样的类。 * 在子系统的黏合上,采用了流水线的处理方法:一个模块处理完后,将输出串到下个模块的输入上。 * 渲染系统使用 command/observer 设计模式。组件监听特定事件,渲染出数据。

read more

Python 标准库 - rpcompleter

查看原文

Python rlcompleter 模块可以改善 Python shell 的使用体验,它使用户可以通过 tab 完成关键字和变量的自动补全。我们可以贴几行代码,定义 PYTHONSTARTUP 环境变量来启用它。使用前提是要有 readline 库,Linux/OS X 都应该预装了。

read more

Man 文档的三种主要 License

查看原文

Linux Man 文档的 License 推荐使用三种款式: 'Verbatim", GPLv2, BSD。不使用更多 License 主要是为了把证书的量控制的尽可能小。这选定的三个证书一个比一个宽松。Verbatim 证书的要求主要是分发的时候发布内容包括证书要逐字复制。GPLv2 约定了自由(copyleft)软件派生后也必须是自由软件-可自由运行和公开再发布。BSD 规约可以不受限制地修改。

read more

Unix tools - tee

查看原文

Unix 程序 tee 特别在适合管道任务中,保持管道到下个任务的同时,把输入同时打到另外的任务里。这形同在直线管道上开了一个 T 字形的分流节点。

cat file.txt | tee >(cmd1) >(cmd2) | cmd3

而在管道分流出来的那条分支中其实还可以继续开管道下去:

tee > (cmd1 | cmd2) | cmd3
read more

用 Select 之前想清楚

查看原文

不要傻里傻兮地不分场合地用 select *。出于性能原因,只要一块代码不是需要所有字段的数据,那么就不要用 select * from table 来获取数据,转而应该选定特定的字段 select field1, field2 from table。 * 想想数据库怎么给你数据:通过index定位一行的地址,然后加载那一行所有的数据。如果索引优化的好,~~这个效率,efficiency~~数据库从索引就得到了所有信息,也就不需要再需要加载那一步了。一般索引一页存放100条记录,如果省去了一行一行加载,速度也就上去了100倍。 * 如果 SQL 语句里面有排序,那么数据库也需要更大的内存用于排序。最恶劣的场景里,数据要被转储到硬盘上做外部排序。 * 也要考虑 GC (垃圾收集) 的进程。 需要强调的是,你问我滋磁不滋磁 select *,我当然是要滋磁啦。重要的是,不要无脑用,要考虑场景,想好了再用。

read more

« Page 49 / 54 »