2014年6月

ZeroMQ发布/订阅模型

在前面一篇文章中ZeroMQ介绍已经介绍了ZeroMQ,以及相应的Python接口zmq,还介绍了一个REQ/RES模型,这篇文章就介绍ZeroMQ另外一种模型。

Publish/Subscribe

Publish/Subscribe是一个很经典的模型,发布消息端就是Publish端,接收消息端就是Subscribe。Publish只管发布消息,甚至都不需要知道是否有Subscribe存在。在现实生活中天气预报就是可以应用这个方式。
看下面两种典型的模型。

- 阅读剩余部分 -

《Linux System and Performance Monitoring》CPU篇

前言: 原文《Linux System and Performance Monitoring》,本文尝试翻译文章中的CPU篇,并且省略了一些地方,也在一些地方加了自己的理解。

转载请注明出处: http://www.firefoxbug.com/?p=2760

Introducing the CPU

The utilization of a CPU is largely dependent on what resource is attempting to access it. The kernel has a scheduler that is responsible for scheduling two kinds of resources: threads (single or multi) and interrupts. The scheduler gives different priorities to the different resources. The following list outlines the priorities from highest to lowest:

  • Interrupts – Devices tell the kernel that they are done processing. For example, a NIC delivers a packet or a hard drive provides an IO request
  • Kernel (System) Processes – All kernel processing is handled at this level of priority.
  • User Processes – This space is often referred to as “userland”. All software applications run in the user space. This space has the lowest priority in the kernel scheduling mechanism.

In order to understand how the kernel manages these different resources, a few key concepts need to be introduced. The following sections introduce context switches, run queues, and utilization.

- 阅读剩余部分 -

ZeroMQ介绍

ZeroMQ号称史上最快的消息队列,可是我学习了下,我心里更加觉得它就是一套通信机制,通过各种模型的组合以及它的快来实现各种牛逼的功能,其实学习下来,其中有几个模型和zookeeper很像。同样,和zookeeper学习一样,各个模型都举出例子来,用python来实现,重点就是在于理解各个模型的设计以及组合。

- 阅读剩余部分 -

Python Gevent应用

Gevent介绍

看了下gevent,最好的资料还是gevent程序员指南,亲自用了下gevent,因为是第一次真正接触coroutine,所以还是有点抽象,碰到了一些问题。

关于coroutine

淺談coroutine與gevent

gevent应用

场景:有100个url,要对这100个url并发发起请求,通过个url丢进去,然后执行完成后,100个url请求的结果独立返回给我,如果是true那么就是返回请求的结果,如果是false,那么返回错误的原因。

- 阅读剩余部分 -

Nginx Pugre返回404

之前一直都是认为purge返回404的原因就是因为所请求的资源并没有被cache,今天在测试过程中无意发现这点认识有错误。

基础环境

  • 确保编译Nginx的时候添加了proxy_cache和purge模块
  • 测试域名: www.cdnhub.org
  • 测试URL: http://www.cdnhub.org/1.txt
  • 资源路径: echo "firefoxbug" > /var/www/cdnhub/1.txt
  • Cache文件安装域名存放,在/home/cache下面
  • 具体查看Nginx配置文件

- 阅读剩余部分 -

通过Nginx配置文件抵御攻击

前言

大家好,我们是OpenCDN团队的Twwy。这次我们来讲讲如何通过简单的配置文件来实现nginx防御攻击的效果。

其实很多时候,各种防攻击的思路我们都明白,比如限制IP啊,过滤攻击字符串啊,识别攻击指纹啦。可是要如何去实现它呢?用守护脚本吗?用PHP在外面包一层过滤?还是直接加防火墙吗?这些都是防御手段。不过本文将要介绍的是直接通过nginx的普通模块和配置文件的组合来达到一定的防御效果。

验证浏览器行为

- 阅读剩余部分 -

针对ddos攻击实用命令

查看连接数汇总

# netstat -n|awk '/^tcp/{++S[$NF]}END{for (key in S) print key,S[key]}'
LAST_ACK 10
SYN_RECV 15
ESTABLISHED 462
FIN_WAIT1 2
FIN_WAIT2 1
TIME_WAIT 989

### 查看ESTABLISHED连接数

# netstat -na | grep ESTABLISHED  | awk '{print$5}' | awk -F : '{print$1}' | sort | uniq -c | sort -rn

### 查看TIME_WAIT连接数

# netstat -na | grep TIME_WAIT  | awk '{print$5}' | awk -F : '{print$1}' | sort | uniq -c | sort -rn

### TIME_WAIT连接数过高

#### TIME_WAIT原因:

TCP/IP协议设计中主动关闭的一方在发送最后一个 ack 后就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间

#### 解决

vim /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1 开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 修改系統默认的 TIMEOUT 时间

注意:改变以上系统配置可能会引发未知的TCP错误,建议不要修改。

### iptables限制某个IP访问80

iptables -A INPUT -p tcp -d 192.168.1.1 --dport 80 -j DROP