性能

Nginx Unit 初探及其性能对比分析

1. Nginx Unit 初探

Nginx Unit 是一个开源的,以 Nginx 为基础、支持多语言的 Web 服务器,它支持 Python,PHP,Go 等多语言应用程序,可以在不中断服务的情况下完成部署配置更改,以多种语言运行代码。而它运行多种语言的能力是基于内部路由器进程之间的隔离,路由器进程可终止传入的 HTTP 请求,以及应用程序进程的分组,路由器进程是持久的,不重新启动。

它具有以下特征:

使用 RESTful JSON API 进行动态重配置服务器;

同时支持多语言,多版本应用;

即将支持的特性有:

动态语言的进程管理功能;

TLS 支持;

TCP,HTTP,HTTPS,HTTP/2 路由和代理。…

                

PHP框架最新性能压力测试比较

有人说PHP性能低?go语言性能高?到底谁高谁低数据说话!我们就来实际对比一下各PHP框架及一款go语言框架的性能是怎样的。

硬件: CPU:Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz 16核心。内存:16GB。

操作系统:Ubuntu 18.04

PHP版本:7.4

压力测试命令: ab -n 100000 -c 1000 -k $url

PHP框架最新输出hello world压力测试结果:

框架 版本 方式 web服务器 RPS 最高日/PV
laravel 8.x web nginx 1000  8640w
                

在PHP 7.4中使用预加载–Opcache Preloading

PHP 7.4增加了预加载(Opcache Preloading)的支持,这一功能可以显著提高PHP程序的运行性能。

它是如何工作的:

  • 为了预加载文件,您需要编写一个自定义PHP脚本
  • 此脚本在服务器启动时执行一次
  • 所有预加载的文件都在内存中可用于所有请求
  • 在重新启动服务器之前,对预加载的文件所做的更改不会生效

简单来说就是把PHP代码完全加载到内存中来达到提升性能的目的。

让我们深入研究一下。…

            

PHP Socket 深度探索

Socket(套接字)一直是网络层的底层核心内容,也是 TCP/IP 以及 UDP 底层协议的实现通道。随着互联网信息时代的爆炸式发展,当代服务器的性能问题面临越来越大的挑战,著名的 C10K 问题(http://www.kegel.com/c10k.html)也随之出现。幸亏通过大牛们的不懈努力,区别于传统的 select/poll 的 epoll/kqueue 方式出现了,目前 linux2.6 以上的内核都普遍支持,这是 Socket 领域一项巨大的进步,不仅解决了 C10K 问题,也渐渐成为了当代互联网的底层核心技术。libevent 库就是其中一个比较出彩的项目(现在非常多的开源项目都有用到,包括 Memcached),感兴趣的朋友可以研究一下。

由于网络上系统介绍这个部分的文章并不多,而涉及 PHP 的就更少了,所以石头君在这里希望通过《Socket深度探究4PHP》这个系列给对这个领域感兴趣的读者们一定的帮助,也希望大家能和我一起对这个问题进行更深入的探讨。首先,解释一下目前 Socket 领域比较易于混淆的概念有:阻塞/非阻塞、同步/异步、多路复用等。

1、阻塞/非阻塞:这两个概念是针对 IO 过程中进程的状态来说的,阻塞 IO 是指调用结果返回之前,当前线程会被挂起;相反,非阻塞指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。…