月度归档:2016年02月

Varnish 入门

本文将介绍 varnish 的工作流程,安装以及 varnish 的配置三个方面的内容。首先简单的介绍 varnish 以及其工作流程,大概了解其内部原理,然后介绍了 varnish 的安装方法,最后详细介绍了 varnish 的配置语言 VCL 以及如何对 VCL 进行调试。

Varnish 简介

Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来。

挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好,这是 Varnish 最成功的应用案例。 继续阅读

Varnish安装及调优

最近公司做活动推广,流量暴增,后端服务器压力山大,导致用户的请求响应时间延长,客户因此抱怨声音很大。
为尽快解决问题,在安排人员不断优化后端代码的同时,考虑在nginx前增加varnish缓存层,只透传部分动态请求过去,直接减少后端服务器的压力。
在实际使用中,真正感受到了varnish服务器强大的威力!在不断的调优缓存命中率后,后端服务器cpu直接从80%降到了20%,再大的并发前端也可以直接消化,后端服务器表示毫无压力。有了这玩意,可以再也不用在后台写定时任务,不断重新生成静态页面了,直接丢缓存里完事!此外,varnish还支持一种叫“神圣模式”,在后端服务器报错返回500的时候,varnish还能继续优先返回过去缓存的内容,为用户屏蔽部分错误,这东东有时真算是救命稻草啊。
但同时,也趟了n多的坑,varnish中的VCL语言太过强大和灵活,稍微运用不好就会中枪。而网上公开的大多数varnish配置文件都是一大抄,根本无法直接用于生产。在研究了几天,翻阅了大量各种资料后,才总算把遇到的问题都解决了。 继续阅读

通过Baratine将Lucene库暴露为微服务

将一个现有的应用或库暴露为一个web服务,并且无需进行任何代码改动,这是一种人们渴望已久的概念。Baratine是一个开源的框架,能够用于创建由松耦合的微服务所构成的平台。通过使用Baratine,可以通过以下两个步骤实现这一概念。

  1. 实现服务端的部分(SOA)
  2. 随后实现一个客户端库负责通信

通过以上方法,Baratine就能够将一个现有的库或应用转换为一个独立的web服务。Baratine服务将与现有的库进行通信,而Baratine客户端将负责接受由外部发来的请求。

在本文中,我们将探索使用Baratine的一种场景,即将Apache Lucene这个非常流行的开源Java搜索库暴露为一个高性能的web服务。

Apache基金会是这样描述Lucene的:“一个完全由Java编写的高性能、特性完善的文本搜索引擎库,这一技术适用于几乎任何需要进行全文搜索的应用,尤其是跨平台的应用。” 继续阅读

深入理解Apache Flink核心技术

Apache Flink(下简称Flink)项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多人的关注。本文将深入分析Flink的一些关键技术与特性,希望能够帮助读者对Flink有更加深入的了解,对其他大数据系统开发者也能有所裨益。本文假设读者已对MapReduce、Spark及Storm等大数据处理框架有所了解,同时熟悉流处理与批处理的基本概念。 继续阅读

中国运营商IP范围 路由表

附获取IP地址段shell:

#!/bin/sh
FILE=/home/ip_apnic
rm -f $FILE
rm -f CNC
rm -f OTHER
rm -f CHINANET
rm -f CRTC
wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O $FILE
grep 'apnic|CN|ipv4|' $FILE | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt
do
    mask=$(cat << EOF | bc | tail -1
pow=32;
define log2(x) {
if (x<=1) return (pow);
pow--;
return(log2(x/2));
}
log2($cnt)
EOF)
        echo $ip/$mask
        echo $ip/$mask>> cn.net
        NETNAME=`whois $ip | grep ^netname | sed -e 's/.*:      (.*)/1/g' | sed -e 's/-.*//g'`
echo $NETNAME;
        case $NETNAME in
        CNC)
                echo $ip/$mask >> CNC
        ;;
        CNCGROUP)
                echo $ip/$mask >> CNC
        ;;
        CHINANET)
                echo $ip/$mask >> CHINANET
        ;;
        CHINATELECOM)
                echo $ip/$mask >> CHINANET
        ;;
        CRTC)
                echo $ip/$mask >> CRTC
        ;;
        *)
                echo $ip/$mask >> OTHER
        ;;
        esac
done

手动方式如下:

wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz

tar xzvf ripe-dbase-client-v3.tar.gz
cd whois-3.1
./configure
make

完成上述编译安装工作后,我们开始获取IP地址段;

mkdir data

#中国网通:
./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP > data/cnc

注意,下面这条是专门取网通路由表的,很重要.基本上用这个.

./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP-RR > data/cnc-rr

中国电信:

./whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET > data/chinanet

中国铁通:

./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CRTC > data/crtc

中国移动:

./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CMCC > data/cmcc

打开获取后的文件可以看到里面的信息非常详细,甚至可以看到各个分公司的负责人、电话、电子邮件等等信息.如果想得到一份整齐干净的IP地址段文件,只要用grep和awk简单过滤就可以了.

过滤提取IP段

中国网通:

cat data/cnc-rr|grep route|sed ‘s/route://g’|sed ‘s/. //g’|sed ‘s/. //g’

所以可以得到:

219.158.0.0/20
58.16.0.0/16
221.13.96.0/19
221.7.64.0/18
58.17.128.0/17
60.11.0.0/16
60.14.0.0/15
….