- 博客(57)
- 资源 (5)
- 收藏
- 关注
原创 git submodule 如何同步更新
git submodule 更新后,在父仓库里如何同步更新,其实只需要在一个地方(modules)调用一个命令(git pull origin master)即可
2022-04-27 11:52:26
12947
原创 高性能测试工具WRK的高级使用方法
WRKgithub地址:https://github.com/wg/wrk 简介:基于事件机制的高性能http压力测试工具,除了能针对单个url进行测试外,最重要的就是能够构造不同的url,不同的参数进行测试。或者发送携带body的POST请求,在有些场景下不要太帅。说明wrk高级的地方就是使用了luajit,在不同阶段抛出来几个回调函数,只需要针对这些函数操作即可构造想要请求。典型的回调函数有以
2017-10-27 20:57:33
15749
1
原创 nginx中开启keepalive后应答反而为close的原因
nginx中开启keepalive后应答反而为close的原因现象和原因采用nginx作为服务器向用户提供查询服务,由于业务原因,只需要应答header就可以,不需要响应body。 在header_filter_by_lua中ngx.header["Content-Length"] = nil, 在body_filter_by_lua中设置ngx.arg[1] = nil。 通过以上两个简单
2017-10-12 15:50:56
15544
原创 探测站点是否正在使用指定的CDN
前言一般来说,CDN厂商都会给客户提供一个接入域名,让客户在域名托管处修改业务域名的CNAME到接入域名就可以实现CDN的启用。 比如:域名未xxxx.yy 那么: 阿里云接入域名为:xxxx.yy.kunlunca.com. 百度云接入域名为:xxxx.yy.bdydns.com. 360的接入域名为:xxxx.yy.open.360cdn.cn. 等等,还有网宿,蓝讯,腾讯,金山云等
2017-06-16 18:46:28
1836
原创 指向指针数组的指针数组-4个*指针
前言C语言中,一般在项目中,指针非常常见,即*p, 表示指向一个变量的地址;也很常见两个指针的变量,即**p , 这表明此指针指向一个元素为指针的数组。 但是在nginx中,有一个指针定义为:void ****conf_ctx这实际上表示此指针指向一个元素为指针数组的指针数组。 所以写一个小程序来实现一个指向指针数组的指针数组的指针。内存布局代码/*默认认为m
2017-05-24 11:19:36
911
原创 我的VIM配置
近来,键盘敲的手疼,所以贴出VIM配置,看看是什么原因导致的手疼,是键盘太差了,还是vim配置有问题。set nuset ts=4set expandtabset autoindentset shiftwidth=4set encoding=utf-8set termencoding=utf-8set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2
2017-05-23 19:37:05
430
原创 nginx的指令开发时变量处理二
前言上一博 nginx指令开发时变量处理一 介绍了一种指令中出现变量的处理方法,今天再介绍一种方法。步骤假设命令如下: my_test_var $arg_channel 意思是:通过url的请求参数中channel来确定做某件事。 模块名为:ngx_http_my_test_var_module 1. 配置结构体如下typedef struct { ngx_array_t *v
2017-05-12 00:19:03
433
原创 nginx指令开发时变量处理一
nginx 指令中变量处理指令参数都是常量对于nginx的指令来说,如果指令的参数都是常量,解析这些参数就比较容易了,使用nginx自带的ngx_conf_set_xxx_slot函数,或者自定义解析函数都很容易解析配置。随便举两个例子如下:ngx_conf_set_off_slotngx_conf_set_size_slotngx_conf_set_msec_slot指令参数是变量但是如果指令
2017-05-11 00:08:38
791
原创 开发nginx模块时对普通文件的操作
序言开发nginx http模块时,有时候需要从指定的文件读取信息,这个时候,如果是新手,则肯定用操作系统文件系统函数来操作文件,比如用fopen打开文件,用fseek,fread等读取文件信息,最后用fclose关闭文件。这样操作文件也是可以工作的,但是如果代码中间有return的时候,我们需要确保打开的文件关闭,否则会造成文件句柄没有关闭,资源浪费,而且这种方式和nginx的异步回调风格有点不符
2017-05-09 21:24:29
2491
原创 go-map的并发问题
go 语言的map是引用传递的、如果多个goroutine同时读写,必然导致冲突,所以一般我们在并发操作map的时候,一定要加锁,但是如果map里的value是还是map,那么并发操作这个value- map是不是也一样回引起冲突呢?答案是:是的,go里所有map的并发操作都需要加锁,这样才不会引起冲突,见如下代码。我对map td操作加了锁,对得到的value-map进行了写操作,没有加锁,通过
2017-05-08 22:00:36
4076
1
原创 nginx字符串和redis字符串比较
nginx 字符串结构体1、ngx_str_t { u_char *data; size_t len;}redis的字符串结构体struct sdshdr { unsigned int len; unsigned int free; char buf[];};可以看出,redis的字符串比nginx字符串多了一个free字段,用来表示当
2017-05-07 23:21:39
1036
原创 抓取taobao的IP库
目的和地理位置相关的应用、和智能调度相关的应用、都离开一个准确的IP库,如果是单个ip库查询,我们可以去ip138或者ip.taobao.com或者ipip.net或者其他站长工具查询,但是需要我们需要一个完整的ip库,则可能需要自己去抓取一份、或者购买商业的ip库。 最近试着用go语言写一份抓取完整ip库的程序、数据源是ip.taobao.com。从各大州ip地址中心获取最初的ip分段、依次对各
2017-05-06 23:02:54
2723
原创 nginx stream模块初探
前言nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。这完全就是抢HAproxy份额的节奏,鉴于nginx在7层负载均衡和web service上的成功,和nginx良好的框架,stream模块前景一片光明。stream 模块编译stream模块默认没有编译到nginx, 编译nginx时候 ./configure –with-stream 即可官
2017-05-05 19:38:59
90375
4
原创 程序员的出路在哪
马太效应在程序员的世界里依然奏效、具体就是、越牛逼的程序员越吃香、职位、待遇和机会也越好。至于其他的程序员、请祈祷互联网浪潮持续、不要发生泡沫破灭的危机。程序员的世界里拿到没有办公室斗争?错,严重的错,程序员也是人、也要和别人打交道、程序员中为啥觉得斗争少,其实是因为,程序员可以无节制的换工作,此处不留爷,自有留爷处,所以一看情况不妙,立马跳槽。程序员也是拉帮结派的、也有一人得道,鸡犬升天的现象,所
2017-05-04 19:48:24
2721
原创 控制远程服务器的工具anyhost
说明如果想同时控制多个远程服务器,又不想安装重量级的puppet,salt等运维级别的工具,可以使用此工具,需要的环境是python2.6和paramiko包。代码位置:https://github.com/zhiyuan2007/anyhost依赖 python 2.6 or higher paramkio (yum install python-dev && easy_install
2017-05-04 16:40:50
743
原创 go实现ketama哈希
ketama-hashimplement ketama hash in golangIntroduction闲来无事,用go语言实现ketama思想的一致性哈希,测试服务器节点增加和减少时命中率能有多少。
2017-05-04 13:41:53
1098
原创 安装go最新版本go1.8
最近想学习下go语言,把安装环境过程记录如下:假定要把go安装到/home/xxx/golang目录下:1. 安装go 编译器cd /home/xxx/golang下载:wget https://storage.googleapis.com/golang/go1.4-bootstrap-20161024.tar.gz解压:tar zxvf go1.4-bootstrap-
2017-03-16 16:04:41
9227
原创 openssl源码安装后,编译nginx-1.9.7或者openresty找不到OpenSSL的解决办法
问题:nginx编译找不到openssl现象:源码安装openssl的目录是/usr/local/ssl/就算把/usr/local/ssl/lib 添加到 /etc/ld.so.conf内,并且ldconfig -v,发现nginx编译时依然报找不到openssl的错误,如下#./configure --with-http_ssl_modul-----------------
2016-12-14 20:02:08
12784
2
原创 nginx-upload-module文件上传模块问题处理
git地址:git@github.com:vkholodkov/nginx-upload-module.git下载地址:https://github.com/vkholodkov/nginx-upload-module/archive/2.2.0.tar.gz编译问题: 错误:‘ngx_http_request_body_t’没有名为‘to_write’的成员解决方法:参照此博客htt
2016-10-26 16:42:50
4507
原创 nginx-rtmp的点播系统搭建
基于:和nginx-rtmp的点播系统步骤如下: 1. 安装openresty和nginx-rtmp模块 2. 下载视频播放器jwplayers(免费版)并配置 3. 配置nginx.conf 和访问页面 4. 运行并解决问题安装openresty和nginx-rtmp模块 openresty官网:http://openresty.org/en/ nginx-rtmp下载:h
2016-07-23 13:06:18
2947
原创 一种openresty在init_by_lua_file阶段读取redis到共享内存的方法
前提: 关于 openresty 或者 ngx_lua 请参考:http://openresty.org/en/问题: 使用openresty读取redis内的数据时,在init_by_lua_file中是不能连接redis的,所以有时候只能在rewrite或者access阶段读取redis数据,用什么办法在初始化阶段读取呢?解决办法:采用在init
2016-07-08 13:28:08
12745
原创 redis del命令支持正则删除(pattern)
1、redis的del命令不像keys命令一样可以支持正则,所以有时候,想要删除一些无用的key的时候,只能用管道和linux命令组合起来达到目的,使用的例子见最下面。 2、redis的作者antirez说过不想del 支持正则匹配的原因,因为正则匹配是个耗费时间的操作,删除key的写操作和keys*命令的读操作又不同,所以删除操作可能导致线上服务受到影响。
2016-05-22 18:31:37
46978
原创 bind9支持edns-client-subnet
基于bind9的edns-client-subnet, 服务器和dig都已经实现,同时提供了测试配置和结果。
2015-10-06 11:55:52
8289
1
原创 python线程join的正解
几个事实1 python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样 2 如果创建线程,并且设置了daemon为true,即thread.setDaemon(True), 则主线程执行完毕后自动退出,不会等待子线程的执行结果。而且随着主线程退出,子线程也消亡。3 join方法的作用是阻塞,等待子线程结束,join方法有一个参数是
2015-09-29 16:29:58
25138
7
原创 虚拟机迁移或者克隆后没有网卡的问题
之前采用vmware的时候,克隆了几个虚拟机,可以启动, 就是没有网卡,不能上网。当时在网上查找了一个解决办法给搞定了。现在采用parallels的时候,pvm从一台mac 迁移到另一台上,还是能开机,不能联网。又上网找了一下, 解决方法和之前是一样的。解决办法:主要是修改 /etc/udev/rules.d/70-persistent-net.rules即可一般,系统会自
2015-09-10 16:24:15
4930
原创 nginx学习(一)
最近开始做CDN相关的业务,后台全部是nginx相关的知识,比如所有网站的缓存都是架构在nginx服务器上,各种转发,代理,缓存,负载均衡等功能全部由nginx支持。很多的访问控制策略需要采用nginx内嵌lua来做,另外,关于CDN还有大量的逻辑和业务需要在nginx上进行定制开发,所以掌握nginx是深入开展CDN业务的基础。所以打算用一段时间,一边学习,一边开发业务,把整体学习心得都
2015-06-09 20:32:29
547
原创 百度面试经历,包括问的问题和我的答案
百度一面也是一个面试官面的,面的很详细,有项目的问题,有具体的问题,还有一些在电脑上直接编码的问题,这些题目有些作对了,也有做的不全面的,但是面试官很好,给我较好的评价,让我准备下二面。下面就直接说说二面,稍有点难受,题目和回答如下,最后的结果是没有通过。二面是另一个面试官主面,开始面试官就说今天很忙,事多,让我等他一会,我当然没有问题了,因为我专门请假来面试。一会,面试官打开电脑,查看了我的
2015-04-22 14:10:26
1739
原创 C++实现一个类并包含构造函数,拷贝构造函数,赋值函数,析构函数
前言,在c++面试过程中,最能考察类的基础知识的莫过于写一个具有类的必要函数的类。这个面试题是一些面试官非常喜欢的,不但要写出来,还有很多知识点可以考察。定义一个类如下class String { public: String(const char *str=NULL); ~String(); String(const String &others);
2015-04-18 15:51:42
2087
转载 跳台阶面试题
之前一直不会思考这类型的题,正好看到july的博客有此题的解法,描述和解题思路很清楚,拷贝过来加深印象原文 http://blog.youkuaiyun.com/v_july_v/article/details/6126444跳台阶问题题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。首先我们考虑最简单的情况。如果只有1
2015-03-26 11:22:04
551
原创 linux下进程间通信IPC几种方式性能比较
在项目中,经常会遇到单机上进程间的通信,常用的进程间通信方式一般有以下几种1 socket 2 unixsocket3 共享内存(share-memory)4 管道(pipe)5 消息队列(message-queue)6 文件(file)7 消息总线(比如zeromq)8 其他中间件(比如redis, memchache, 数据库等)如果项目仅仅是消息的传递,对
2014-09-24 16:57:19
11037
原创 redis源码修改之zincrby,hincrby命令
在项目中大量使用zincrby命令,原因就是要统计日志中某个指标的计数值,且需要按顺序返回topn。正常来说,一个指标调用一次zincrby(zincrby default:type 1 typeA) 就可以正常工作。实际情况是由于日志生成的太快,redis cpu利用率经常100%,而且还丢数据。是否可以一次性增加多次指标的累计值,比如zincrby default:type 1 t
2014-07-16 14:08:31
4289
原创 redis高级命令
sort 命令1 修饰符 desc 降序排列2 允许元素按照字段序列排序 alpha ,此时的排序相当于字符串排序, 数字转化为字符 12 排在 2 的前面3 可以指定避开某些元素,然后开始排序,并返回前n个, 语法为 sort key skip count 。 比如 sort list 3 10 表示大于3 的元素的10个。4 sort list limit 0
2014-06-18 15:33:47
527
原创 redis基本操作命令(一)
version: 2.61 string 普通命令: set get incr incrby mset mget append getrange setrange(相当于substr) setrange(一次设置一个字符) decr decrby incrbyfloat strlen mset 和msetnx 都是批量操作k v, 都是原子操作
2014-06-18 15:29:38
815
编码的奥秘--很好很强大
2011-01-12
more effective c++ 电子书
2011-01-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人