许久没写blog了
292020-12
人越老也就越懒了,一方面估计是微信朋友圈很方便,随手一写就ok了,另一方面是不知道写什么了,技术上的东西更新太快,也没啥特别好记录的,就这样吧,随心一点就好
292020-12
人越老也就越懒了,一方面估计是微信朋友圈很方便,随手一写就ok了,另一方面是不知道写什么了,技术上的东西更新太快,也没啥特别好记录的,就这样吧,随心一点就好
052018-07
022016-11
使用mojo作为生产服务的时候可以使用mojo自带的hypnotoad服务,类似apache的workers模式,可以根据参数产生指定的进程来加大并发能力。
以下是ab测试为1 worker,4 works和8 works的并发情况。
服务器硬件环境:I5 6300U, 4核心,4G内存,运行在VM虚拟机上
服务器软件环境:CentOS 6.5 64位, Perl 5.24 64位
ab范例
ab -c 200 -n 10000 http://192.168.100.10:8080
服务端:一个查询和写入redis数据的功能
1 work:Requests per second: 68.74 [#/sec] (mean)
4 works:Requests per second: 202.60 [#/sec] (mean)
8 works:Requests per second: 420.37 [#/sec] (mean)
16 works:ab崩溃了一次,第二次测试降低到4 works都不如,同时有请求出错的情况。
对于mojo来说,如果你服务端用的不是异步的写法,那么多works可以帮你缓解并发的问题。
212016-10
前端使用了NGINX反向代理,结果发现log里面的ip地址都是127.0.0.1,在网上找了一圈没找到结果,后来看了下源码,发现配置文件中有个 TransparentProxyIPs的变量,当这个设置为真的时候,就从X-Forwarded-For里面获取IP。 如下:
my $ip = $trusted ? $app->getheader(‘X-Forwarded-For’) : $remoteip;
官网的说明
剩下的就很简单了,在mt-config.cgi中加入
TransparentProxyIPs 1
重启perl的相关服务,一切就OK了
212016-10
因为有现成的模块,所以直接使用就可以了
#!/usr/bin/perl -w
use Imager::QRCode;my $qrcode = Imager::QRCode->new(size => 2,margin => 2,version => 1,level => 'M',casesensitive => 1,lightcolor => Imager::Color->new(255, 255, 255),darkcolor => Imager::Color->new(0, 0, 0),);my $img = $qrcode->plot("www.google.com");$img->write(file => 'google.jpg', type=>'jpeg') or die $img->errstr;
092016-10
很久以前本blog使用的是MT4的版本,正好更换了主机,借重装OS的机会,也把MT升级一下,结果发现MT已经开始收费了,网上找到了MT5的下载,却找不到最新的6,于是先升级到5,结果发现一堆问题,因为新的OS使用了是Perl5.24了,但从Perl5.16开始,有些语法就有了变化,具体点说在Perl5.16以前可以defined(@array)和defined(%hash)来判断是否存在的函数取消了,如果你使用了Perl5.24而出现类似Can't use 'defined(@array)' 这样的错误信息,那就说明你的程序写法太古老了。
后来发现MT6其实还是可以免费申请的,只要你接受它的授权条件就可以了,于是赶紧下载6,很顺利的升级了上去,而且在Perl5.24下工作的也很好,另外6可以直接使用PSGI,现在无论是执行速度还是写作时候的便利性都比4方便了很多。
如果你也还在用mt的话,不妨升级到6
092016-10
mojo确实是perl下一个很强大的web框架,基本上涵盖你需要使用的大部分功能,不管是要使用fcgi模式还是cgi更或者是websocket都能很快的实现,
传统mojo的开发需要不停的关闭和重服务,这对开发来说是很不友好的。不管不用担心,mojo早就想到了这一点,跟nodejs下的geddy一样,mojo有个叫morbo的服务可以做自动加载重启的工作。而使用起来也很简单,如果你装好了mojo,那morbo也就自带了,你只需要执行
morbo yourapp.pl
当你修改过代码后,mojo就会自动帮你重新加载,你只需要把重心放在开发上就ok了。
但是在winodws上使用morbo而恰好你又使用了EV的话可能就会出现下面的情况
Server available at http://127.0.0.1:3000
EV does not work with ithreads.
这是因为EV是不支持线程的,具体愿意可以去看EV的文档。
这个时候也不用慌,只需要在你的用户的环境变量中设置一下
MOJO_REACTOR=Mojo::Reactor::Poll
是不是炒鸡煎蛋,
162016-02
通过apt-get安装了mysql5.6后发现,有个软件依赖的mysql版本为5.5,删除5.6之后装5.5出现
子进程 新的 pre-installation 脚本 返回了错误号 1
的问题。
折腾半天无果,最后参考http://www.cnblogs.com/xusir/p/3342722.html
sudo rm -rf /var/lib/mysql/ sudo rm -rf /etc/mysql/ sudo apt-get autoremove mysql* --purge
总结就是降级的时候没有把以前的东西删除干净,所以把东西删除干净后在执行
sudo apt-get install mysql-server mysql-common
问题解决到此解决
042016-02
最近有个项目需求要用到mongodb集群和切片,网上有很多不错的文章,但对原理感兴趣的可以看下http://www.lanceyan.com/tech/arch/mongodb_shard1.htm
本人以实战为主,以下是干货设置部分
以下操作只是在一台机器上做的,如果有多台机器则需要每台机器都按这样的步骤操作
首先要规划到数据库位置,我这里启用了一个mongos,2个配置服务器,3个数据库切片。
习惯上大家都是放在/data中,所以以下为创建所需目录的部分
mkdir -p /data/mongo/mongos/log
mkdir -p /data/mongo/config/data
mkdir -p /data/mongo/config/log
mkdir -p /data/mongo/config1/data
mkdir -p /data/mongo/config1/log
mkdir -p /data/mongo/shard1/data
mkdir -p /data/mongo/shard1/log
mkdir -p /data/mongo/shard2/data
mkdir -p /data/mongo/shard2/log
mkdir -p /data/mongo/shard3/data
mkdir -p /data/mongo/shard3/log
这样就创建好了我们所需要的目录。
132016-01
在perl高于5.12版的时候编译会出现
日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |