201504-27 Rabbitmq官方的六种工作模式 NEW RabbitMQ的六种工作模式:官网介绍:https://www.rabbitmq.com/getstarted.html这里简单介绍下六种工作模式的主要特点:简单模式:一个生产者,一个消费者work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。订阅模式:一个生产者发送的消息会被多个消费者获取。路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由keytopic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”... Read More >
201504-26 RabbitMQ的PHP实现代码 NEW 接下来看一下创建队列及接收消息的TP5.1示例:需要提前启动消费者,绑定交换机与队列,并指定路由键1.测试多消费者监听同一个事件,打开2个消费者,启动生产者,发现2个消费者可以同时收到消息2.测试消费者挂掉时,消息是否丢失,停掉一个消费者1,启动生产者,再启动消费者1,发现还可以读取到数据,说明数据没有丢失/** * 生产者 * @param * @return true * @throws \Excepti... Read More >
201504-25 RabbitMQ - 架构及工作原理 NEW 1. 系统架构从示意图可以看出消息生产者并没有直接将消息发送给消息队列,而是通过建立与Exchange的Channel,将消息发送给Exchange,Exchange根据规则,将消息转发给指定的消息队列。消费者通过建立与消息队列相连的Channel,从消息队列中获取消息。这里谈到的Channel可以理解为建立在生产者/消费者和RabbitMQ服务器之间的TCP连接上的虚拟连接,一个TCP连接上可以建立多个Channel。 RabbitMQ服务器的Exchange对象可... Read More >
201504-24 kafka和rabbitmq什么区别,各自适合什么场景? RabbitMQ1.RabbitMQ遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上,适合企业级的消息发送订阅。2.RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consum... Read More >
201504-17 linux中如何排查负载过高的问题 概况Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。如何判断系统是否已经Over Loadw、uptime、top 等命令都可以,我们仅举一个例子:[root@super-dev wwwdev]# uptime 20:21:00 up 184 days, 20:32, 3 users, &n... Read More >
201504-16 彻底弄懂502/503/504(php-fpm+nginx)亲测可用 环境 php7.3.5 + nginx1.16.0相信大家都遇到过50X的问题,网上也看了很多文章,总是各种不对,所以今天咱们详解各种出现50X的情况和原因502:Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。503:Service Unavailable 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含... Read More >
201504-15 Nginx中对同一IP限速限流DDOS预防 作用:Nginx通过limit_conn_zone和limit_req_zone对同一个IP地址进行限速限流,可防止DDOS/CC和flood攻击limit_conn_zone是限制同一个IP的连接数,而一旦连接建立以后,客户端会通过这连接发送多次请求,那么limit_req_zone就是对请求的频率和速度进行限制。(注意,tcp连接是有状态的,而构建在tcp之上的http却是无状态的协议)。通过打开一个网页,然后通过wareshark可以看到,一个连接建立后(即三次握手后)... Read More >
201504-14 Nginx中last和break redirect和permanent区别和联系 一.last & break (1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异。注意一点就是,他们会跳过所有的在他们之后的rewrite 模块中的指令,去选择自己匹配的location (2)last 和 break 当出现在location 内部时,两者就存在了差异 last: 使用了last 指令,rewrite... Read More >
201504-14 腾讯面试题:10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。关于中位数:数据排序后,位置在最中间的数值。即将数据分 成两部分,一部分大于该数值,一部分小于该数值。中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与1+N/2的均值(那么10G个数的中位数,就第5G大的数与第5G+1大的数的均值了)。... Read More >
201504-13 归并排序,外排序,10G文件500M内存的排序 归并排序可以是一种外排序, 外排序是指利用外存也就是磁盘进行排序的一种简称。典型的应用是hadoop 的 mapreduce 的merge 阶段归并排序的: 假设有n 个元素, 将n 个元素分程x 组, 然后对每一组的元素进行排序, 然后将这 x 组已经排好序的序列合并起来。说一下分成x 组的方式, 大概有两种: 第一种: 递归的方式, 这种情况你可能都不会去关心 x 大小。 第二种: 每组 m 个元素, x = n/m。这种方法常用在内存不够的情况下。&n... Read More >
201504-11 PHP中max_execution_time设置不生效 问题描述:max_execution_time设置了1秒,但是发现超过3秒的脚本还是跑。于是深入研究下max_execution_time不生效的原因。官网描述:https://www.php.net/manual/zh/function.set-time-limit.phpset_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中... Read More >
201504-11 中间件RabbitMQ在生产环境占用CPU过多的情况 我们项目中用的消息中间件是RabbitMQ,这个消息中间件在使用起来停方便的,也比较健壮,但是使用不当,会对服务器造成很大的压力,会把CPU占用比占到70%左右,今天就来分析一下造成这个结果的原因。要想具体查看rabbitmq里面各个服务的占用比,需要开启一个插件,就是rabbitmq_top,在服务器输入rabbitmq-plugins list可以查看安装的插件:安装好这个插件,我们就可以查询rabbitmq内部各个服务的占用比了,登录rabbitmq提供的UI管理界面,... Read More >
201504-10 Laravel神奇的服务容器 IoC 容器, laravel 的核心Laravel 的核心就是一个 IoC 容器,根据文档,称其为“服务容器”通过举例来让读者去理解什么是 IoC(控制反转) 和 DI(依赖注入)超人和超能力,依赖的产生!面向对象编程,有以下几样东西无时不刻的接触:接口、类还有对象。这其中,接口是类的原型,一个类必须要遵守其实现的接口;对象则是一个类实例化后的产物,我们称其为一个实例。我们把一个“超人”作为一个类,class Superma... Read More >
201504-09 php-fpm backlog参数优化 一、问题分析 1、分析php-fpm.slow.log发现没有执行慢的地方,然后把目光放到了nginx 与php建立连接的阶段上,使用tcpdump在服务器上抓包,发现性能差的机器上存在大量的SYN3秒超时,并且会伴有请求头的超时重传。如下图: 看来凶手已经找到了:是SYN 超时。一般SYN 超时是由于服务端backlog引起的,在我们的应用中,nginx –> p... Read More >
201504-08 php-fpm的优雅重启关闭 PHP 5.3.3 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:master进程可以理解以下信号INT, TERM 立刻终止QUIT 平滑终止USR1 重新打开日志文件USR2 平滑重载所有worker进程并重新载入配置和二进制模块示例:php-fpm 关闭:kill -INT `cat /usr/loc... Read More >
201504-07 php-fpm进程数优化看这一篇就够了 概念CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。CGI(Common Gateway Interface)全称是“通用网关接口”,WEB 服务器与PHP应用进行“交谈”的一种工具FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。从根本上来说,FastCGI是用来提高CGI程序性能的。类似于CGI,FastCGI也可以说是一种协议。FastCGI像是一个... Read More >
201504-06 PHP中 array_walk array_map array_filter区别 array_walk:array_walk — 使用用户自定义函数对数组中的每个元素做回调处理1. 用户自定义的函数处理每一个元素2. 直接修改原数组,不会创建新的数组3. 可以传递额外的参数更多信息参考官方文档:http://php.net/manual/zh/function.array-walk.phparray_maparray_map — 为数组的每个元素应用回调函数1. 回调函数,应用到每个数组里的每个元素2. 可以处理多个数组,合并处理3. 返回新建的数组4.... Read More >
201504-05 通过 PHP OPcache 让你的 Laravel 应用运行速度飞起来 Laravel 优化介绍:https://segmentfault.com/a/11900000115690121.缓存配置信息 php artisan config:cache2.缓存路由信息 php artisan router:cache3.类映射加载优化 php artisan optimize4.自动加载优化 composer dumpautoload什么是 Opcache每一次执行 PHP 脚本的时候,该脚本都需要被编译成字节码,而 OPcache 可以对该字节码... Read More >
201504-04 PHP中const和static的区别和联系 1.const是类中的常量,类外用define定义常量2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法3.const和static都属于类本身,而不属于new后的类实例,类内访问使用self::,类外使用类名::来访问;类内的$this指代类实例本身,const和static是属于类本身,所以无法用$this访问4.self::NAME指代const,self::$name指代static;const是常量,是不需要变量符号的,st... Read More >
201504-03 PHP中self与static区别和联系 PHP官方也说过,大概意思是说self调用的就是本身代码片段这个类,static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,static调用的是从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类,例子比较容易明白些。其实static就是调用的当前调用的类,比较抽象吧。self refers to the same class whose method the new operation takes place in.... Read More >