消息队列 RabbitMQ 入门介绍

一、什么是RabbitMQ?

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然:

rabbitmq01 rabbitmq02

例如一个日志系统,很容易使用RabbitMQ简化工作量,一个Consumer可以进行消息的正常处理,另一个Consumer负责对消息进行日志记录,只要在程序中指定两个Consumer所监听的queue以相同的方式绑定到同一个exchange即可,剩下的消息分发工作由RabbitMQ完成。

rabbitmq03

使用Rabbit[……]

继续阅读

使用HAProxy对MySQL进行负载均衡和状态监控

使用HAProxy已经很久了,但主要用在前端web请求的负载均衡和状态监控上,对于后端的Memcached以及MySQL却一直没有应用,最近对系统架构进行了小规模的整理,把MySQL也收编到了HAProxy下,经过一段时间的使用,体验还是不错的。

详细的HAProxy的安装配置我就不说了,主要针对HAProxy如何监控检测后端MySQL服务器的状态说两句。

我们的环境由两台master和若干台slave数据库组成,在HA的配置中,可以设置灵活的策略和进行slave的分组,如果系统更大了,将还会根据业务系统来拆分若干个master和slave组。

声明:以下内容应用和验证环境是基于 Fre[……]

继续阅读

解决 php5.4 以前版本 json_encode 方法不支持 BIGINT 选项的问题

最近开发项目时遇到 php5.4 以前版本 json_encode 方法不支持 BIGINT 选项的问题,导致大整数 json 解码后变成科学计数法,现将解决方法整理如下:

<?php
header("Content-type: text/html; charset=utf-8");
/* 解决 json_decode 方法处理大整数时变成科学计数法的问题 */
echo "<pre>";
$json = <<<EOT
{
    "foo" : "bar",
    "small" : "123456",
    "large" : 20000000000[......]

继续阅读

Beanstalkd 一个高性能分布式内存队列系统

之前在微博上调查过大家正在使用的分布式内存队列系统,反馈有Memcacheq、Fqueue、RabbitMQ、Beanstalkd以及linkedin的kafka。RabbitMQ使用比较广泛,Beanstalkd是后起之秀。Beanstalkd之于RabbitMQ,就好比Nginx之于Apache,Varnish之于Squid。后面在项目中使用Beanstalkd的过程中,更发现其简单、轻量级、高性能、易使用等特点,以及优先级、多队列、持久化、分布式容错、超时控制等特性。下面就简单介绍一下Beanstalkd,不足之处请大家指正。

设计思想

高性能离不开异步,异步离不开队列,而其内部都是P[……]

继续阅读

“由于无法验证发行者,所以WINDOWS已经阻止此软件”的解决方法

Windows7 系统都很注重系统的安全性,在提高安全性的同时,也给我们某些应用带来不便,例如在使用网银时,需要安装插件或证书,可能会弹出“由于无法验证发行者,所以WINDOWS已经阻止此软件”的相关提示,而致使无法正常使用网银或其他软件,下面分享解决此类提示的方法:

按下面两步操作,一般情况都可以解决此类问题:
1、打开浏览器“Internet选项-安全-自定义级别”,在弹出的窗口中把“下载未签名的ActiveX控件”设置为“启用”,并且把里边有关ActiveX控件项的所有选项全改为“启用”,重新打开浏览器,观察是否还出现提示。

2、如果不行,继续下一步操作。打开浏览器“Internet[……]

继续阅读

Apache 无法启动解决办法 the requested operation has failed

这两天对 Apache 无法启动做了总结,并附加对应的解决办法:

错误一:80端口占用,例如IIS、迅雷。停掉对应服务或更换 Apache 端口即可。

错误二:软件冲突,装了某些软件会使apache无法启动,如Dr.com。打开网络连接->Tcp/Ip属性->高级->WINS标签,把netbios的lmhosts对勾去掉,禁用Tcp/Ip的netbios,然后再启动应该就可以了。

错误三:httpd.conf配置错误,如果apache的配置文件httpd.conf搞错了,在windows里启动它,会提示the requested operation has failed[……]

继续阅读

PHP 判断是否为 AJAX 请求

先说前端使用 jQuery、mootools 是怎么区分 ajax 请求:

jQuery、mootools 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest

在后端可以使用 $_SERVER[“HTTP_X_REQUESTED_WITH”] 来获取。(注意:中划线换成了下划线,不区分大小写)

由此,我们可以这样来判断是否为 ajax 请求:

// php 判断是否为 ajax 请求
if(isset($_SERVER[“HTTP_X_REQUESTED_WITH”]) && strtol[……]

继续阅读

HAProxy 高可靠、高性能的 TCP/HTTP 负载均衡器

HAProxy是一款提供高可用性、负载均衡 以及基于TCP和HTTP应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。HAProxy最主要的特点是性能,HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。 HAProxy完全可以支持数以万计的并发连接。并且HAProxy的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

目前HAProxy有两种主要的版本:

1.HAProxy 1.1 – 从2002年开始就服务于很多重要站点
HAP[……]

继续阅读

PHP中include()和require()方法的区别

本文总结了PHP的include()和require()两种包含外部文件的方法的不同之处。基本上就是从:PHP性能、使用弹性以及加载失败的处理方式方面的分析。

1.PHP性能

对于include()来说,在 include()执行时文件每次都要进行读取和评估;

而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。

这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。

另一方面,如果每次执行代码时想读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),因为可以给想要包括的文件名设置一[……]

继续阅读

Windows 上安装 MongoDB

一.下载MongoDB

1.官网为:http://www.mongodb.org/;下载地址为:http://www.mongodb.org/downloads,选择需要安装的版本,我选择的是mongodb-win32-i386-2.2.3版本。

2.下载PHP 的 php_mongo.dll 包,官方下载地址为:https://github.com/mongodb/mongo-php-driver/downloads。

二.安装MongoDB

1.将mongodb-win32-i386-2.2.3.zip解压到目录D:Program Filesmongodb-2.2.3,也就是把Bi[……]

继续阅读