Tags
- Airchina
- Android
- Anti-Spam
- Bluetooth
- bugs
- ChinaSouthern
- Django
- DNS
- Enterprise
- fastcgi
- Hainanair
- HAM
- HongKong
- InnoDB
- IPTV
- iSCSI
- kubernetes
- large-scale
- lighty
- Linux
- Logging
- Macao
- Meituan
- MM
- MySQL
- nginx
- Oracle
- Outdoor
- Percona
- Photo
- postfix
- Python
- RedHat
- Sentry
- systemd
- Traffic
- Travel
- Virtualization
- xtrabackup
- 信用卡
- 奥运
- 美食
- 规范化
- 软件工程
Meta
Blogroll
Mine
Tag Archives: large-scale
一种巨型网站的 DNS 服务器流量优化方案
中国的门户网站,只 NS 服务器就能产生不少网络流量呢;而且因为随时可能会更改域名指向,以切换服务器组,域名的 TTL 还不能太大,甚至有低于 RFC 规定的300秒的情况。 其实这类服务还是有很大的优化余地的。我们来比划一下 DNS 的解析过程: 访客的电脑向 ISP 的 DNS 提出解析请求 ISP 的 DNS 向 root、gTLD/ccTLD 服务器提出请求,得到网站的域的 NS 地址及其 A记录 ISP 的 DNS 向该域的 NS 服务器提出查询,得到最终结果,返回给访客 这里面其实只有第一步是必须的,无法优化的,而后面的粗流量完全可以缩小成涓涓细流。解决方法就是让各主流 ISP 的 DNS 作为知名网站的域的 hidden slave NS,直接从主 NS 服务器获得权威数据,向辖区的访客提供解析服务。这样,多次重复递归解析的巨大流量变成了 … Continue reading
bind + mydns 大容量智能 DNS 的方案简述
大体上就是 bind 上启用 view 功能,然后把请求转发给后端的多个 mydns。不过遇到的问题是,如果用 zone {type “forward”;} 的话,会导致 bind 给出的解析结果里缺少 AA 标志位,而且还会带上 ADDITIONAL SECTION,而这个 ADDITIONAL SECTION 指向的恰恰是 bind 自己,于是有时会造成循环。 怎么让 bind 认同自己事实上的权威地位,成了方案的关键。想了几个小时,终于明白了只有 master 和 slave 才能给出带 AA 标志位的应答。master试过了肯定是不行的,因为必须有 file 参数。后来试了试 slave,竟然只需要 masters 参数即可。 最终方案是两横两纵的: 1 一个域有两个 NS 服务器 … Continue reading
laf!cacti竟然默认只能检测10000000K内存
今天遇见个12G内存的,直接不给出图了。检查了Data template才发现限制最高10000000K内存。用xm把被监控机器的内存量压小点,cacti就认出来了。真是好玩。 改了Data template模板,重新生成图,才可以了。
这几天玩了一下kexec
kexec 是一个快速重启动 Linux 系统的工具,其快速主要体现在是从内核开始启动而不是从硬件初始化开始,在当今硬件越来越复杂,开机自检越来越慢的条件下,kexec 可算是提高生产力的一大发明。 kexec 的操作分为两步: 加载内核到内存 运行刚才加载的内核 第一步的语法为 kexec -l 内核文件名 –initrd=initrd文件名 –append=内核参数。注意等号必不可少,否则,虽然 kexec 不报错,但是内核启动时会失败;第二部用 kexec -e 即可。通过查看 /sys/kernel/kexec_loaded 的内容可以判断是否已经加载内核。 目前遇到的问题有这几个: cciss HP SmartArray驱动在重启内核时会失败,导致无法正常进行下去 没搞明白如何用 kexec 加载 xen hypervisor 相信很快就会搞明白的。 同时提一下,发行版提供的 kexec 软件包带有 /etc/init.d/ 脚本,可以把正常的 reboot 操作转变成 kexec … Continue reading
优秀Linux发行版应该具备的基本素质(待续)
发行版内包含的软件足够多、足够新,以避免发生用户因为找不到合适的软件而被迫打破发行版风格的事件。具体的说,RedHat EL包含的软件太少,导致很多人必须编译才能弄到够自己用的软件,就是很不好的。 有优秀的软件包格式和依赖关系解决工具。举个例子,yum只考虑要安装的软件包及其依赖关系,却不考虑本机已经安装了的软件包,很容易发生解决不了的版本冲突问题;另外yum老版本的速度也太慢了。 配置文件的风格应尽量使用include conf.d/*风格,以实现最大的可扩展性,方便插件类的软件单独成为一个软件包 配置文件的文件名应该固定,不应在配置文件名上包含任何与具体情况相关的信息。大家可以对比一下,debian的/etc/network/interfaces文件,可以用man interfaces命令查看其格式;而/etc/sysconfig/network-script/ifcfg-eth0则无法man 配置文件的内容应该清晰明了,默认内容中应包含注释信息 文件系统目录树结构符合FHS规范。我很奇怪,在已经有一个/etc的情况下,为啥会二次发明一个/etc/sysconfig和/etc/default目录。特别是前者,简直包罗万象,已经包含了/etc几乎所有的功能。
无责任猜测某视频分享网站的系统架构
今天听了 lighty modcache 的讲座,晚上和 suchasplus 谈论这个讲座时,注意到以下细节,于是我开始自说自话的猜测他们的系统架构。 modcache 本身不会自动删除磁盘缓存文件,需要 tmpwatch 程序配合或者被动 PURGE 缓存目标的老化只根据 refresh-pattern 决定,没有多余的信息和缓存目标保存在一起,缓存目录中的文件格式很简单 从这些细节中,我猜测该视频分享网站有个主控端,负责通过发请求或者直接推送文件到缓存目录的方法推送文件到前端缓存服务器 ,而这些傻得可爱的前端缓存不会主动删除缓存文件。这样,主控端对“某台前端服务器拥有哪些内容”了如指掌,配合性能测量机制,可以动态的向客户端发送指向不同前端服务器的播放列表,从而达到均衡各服务器、各网段负载的目的。在网络流量低潮,还可以偷偷的向前端发送热门内容文件,或者遥控前端服务器删除过期内容等。 这样看来,其实前端的服务器并不能算做传统意义上的反向代理缓存服务器,而是 web 服务器,但为什么用缓存代理的方式来实现这个功能呢?我认为主要是可以通过向缓存代理发送一个 GET 请求的方式,轻松的向该前端服务器推送内容;缓存目录中的文件没有特殊格式和多余信息,恐怕也是出于这个考虑。 声明:本文为无责任猜测。如果与实际情况相同,并不表明我窃取了该企业的机密;如果不同,则说明我已经独立发明了一种较通用的大型网站系统架构。
刚才和Dieken讨论了关于二进制/源代码发行版方面的争论
本来在讨论企业环境下的全规范化管理,然后聊到开发环境的规范化管理,具体又谈了svn的webdav、file、svnserve的身份验证功能,然后聊到了关于各个需要身份验证的软件是否有可扩展的身份验证机制、是否需要自己写验证接口程序等,最终谈到二进制发行版和源代码发行版的问题。我们的态度是: 源代码发行版对于个人使用来说具有最高的灵活性,但对于规范化管理是极为不利的,如果将这样的发行版用于企业环境,对sysadmin的要求会有进一步的提高。 聊天记录摘录如下: dieken 说: 以前版上多次争论过源码发行版和二进制发行版 我觉得从可维护性上,源码发行版很不利的,只有大家统一用一个二进制版本,出了问题才好查 所以能用标配的坚决不自己造轮子 七月 说: 关键是在实施过程中如果有过多的可控制余地,则这个可控制的配置选项本身也将成为构建的目标的一部分 但是往往大家并不把它这么看 dieken 说: 没大明白你这句话 怎么把选项本身作为构建目标的一部分? 把编译选项放入包信息里? 七月 说: gentoo的USE参数好像可以指定带某些库、不带某些库吧?类似于./configure的–with和–without这类东西的 dieken 说: 怎么作为构建目标的一部分? 七月 说: 事实上这些参数也是目标的组成部分 它的控制粒度是configure参数,但打包的时候并没有在包名上标明这些参数。从而造成信息的丢失 dieken 说: 哦,明白你的意思了,你是说出了问题时必须能容易精确的得到当初的构建参数吧 这样能容易的复制出出问题的环境,进行调试 cmmi 有一个级别是“可重复”,我对这一点印象特别深刻 七月 说: 是的。但问题是人们往往不把这些东西当做目标的一部分。如果你亲自下载源代码编译,可能印象还会更深刻一点;gentoo全自动化编译却忽视了这个 dieken 说: 这一点 gcc … Continue reading
我的确定fastcgi数量的方法
这里主要讨论php-fastcgi 1 将 nginx 各项参数加到足够大,php 加到足够多 2 根据日志、各进程执行时间等,找出一天内的访问最高峰(请求/秒) 3 req per second / avg process time=amount of PHP needed 将数值适当放大,留出余量 4 worker_processes 大概是和 CPU、CPU 核的数量相关的。参考 mysql 的并发线程参数 5 根据 worker_processess * (worker_connections-2)=PHP数量 的公式,反算出 worker_connections 6 同时要保证worker_rlimit_nofile 留余量,要比 worker_connections 大
nginx的极端测试
将各项参数减少,发现 worker_rlimit_nofile最少是10 worker_connections最少是2 才能正常启动 如果想正常工作, worker_rlimit_nofile最少12 worker_connections最少 3 TCP连接数不能超过worker_connections-2 猜测那两个是用于master进程和worker进程之间的通信吧 php-cgi进程少的情况下,对PHP的请求会依次被送去执行,后来的就等待 等待超时的就HTTP 504 Gateway Timeout php-cgi进程没有在运行的情况下,对PHP的请求会得到502 Bad Gateway的回答