1. 高流量站点NGINX与PHP-fpm配置优化(译)

    原文:Optimizing NGINX and PHP-fpm for high traffic sites

    译者:youngsterxyf

    使用Nginx搭配PHP已有7年的这份经历让我们学会如何为高流量站点优化NGINX和PHP-fpm配置。

    以下正是这方面的一些提示和建议:

    1. 将TCP切换为UNIX域套接字

    UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的数据拷贝和上下文切换)。

    但有一点需要牢记:仅运行在同一台服务器上的程序可以访问UNIX域套接字(显然没有网络支持)。

    upstream backend
    {
        # UNIX domain sockets
        server unix:/var/run/fastcgi.sock;
    
        # TCP sockets
        # server 127.0.0.1:8080;
    }
    

    2. 调整工作进程数

    现代计算机硬件是多处理器的,NGINX可以利用多物理或虚拟处理器。

    多数情况下,你的Web服务器都不会配置为处理多种任务(比如作为Web服务器提供服务的同时也是一个打印服务器),你可以配置NGINX使用所有可用的处理器,NGINX工作进程并不是多线程的。

    运行以下命令可以获知你的机器有多少个处理器:

    Linux上 …

    Tagged as : Nginx PHP 服务器
  2. 运营开发规范化

    今年3月底毕业,入职腾讯做运营开发,至今6个月有余。入职之时组内仅有1个运营开发的同事,到目前已扩充到5人,加3个实习生。

    入职之时的运营开发过程是这样的:

    1. 在办公机器(Windows)上编写代码,功能测试通过后,
    2. ssh远程连接到生产服务器(Linux),vim打开一个新文件,复制办公机器上的代码,粘贴到vim中,保存,
    3. 打开浏览器测试上线的功能/效果是否正确,若不正确,
    4. 直接在生产服务器上编辑代码文件,直到达到需要的功能效果,
    5. 再从生产服务器上将修改后的代码复制粘贴到办公机器(也许不会有这一步,之后所有的修改都直接在生产服务器上操作)。

    这个过程存在如下问题:

    1. 代码没有版本控制
    2. 没有与生产服务器一致的测试环境
    3. 代码部署过程繁琐
    4. 办公开发机器上代码很可能比生产服务器上代码还旧
    5. 上面4点都会导致混乱

    除此之外,当团队从1人扩充到多人后,不可避免地会遇到协作的问题,解决代码开发协作问题一般涉及如下几方面:

    1. 使用代码版本控制
    2. 规定版本控制的工作流
    3. 编码规范
    4. 项目/代码文档
    5. 定期code review

    为了解决上述问题,我陆续地做了如下工作:

    搭建Gitlab服务器、测试服务器

    个人认为开发工作规范化的第一点就是版本控制,基于版本控制可以完成很多自动化的任务。

    平时个人的代码、文档都通过Git版本控制存放在Github上 …

  3. 搭建测试服务器(源码编译方式)

    目前工作中开发流程还比较初级,甚至连测试服务器都没有,代码的变更都是直接先在开发人员的本地机器上简单测试一下,然后直接部署到生产服务器上,这就相当于生产服务器同时充当了测试服务器的角色,虽然开发的是面向公司内部的系统,但作为一个有理想有追求的码农,是不允许这样粗糙混乱的开发流程的,所以申请了台服务器,自己搭建个测试服务器。

    由于公司的服务器统一使用SUSE Linux Server操作系统,并且版本较老。与Ubuntu、Centos等Linux发行版不同,SUSE Linux没有可用的软件源(不知是否与OpenSUSE的软件源兼容?),即没法使用系统的软件包管理工具。这样问题就很多了。

    我选择源码编译的方式来安装所有涉及的软件。也许有人会说,为什么不在网络上查找RPM包然后安装呢?那么先想一下RPM包本质上是个什么东西呢?RPM包(以及DEB包)其实就是将编译好的一些程序以一定的规则打包在一起,然后系统的包管理工具(yum、zypper)按照相同的规则(在依赖满足的情况下)将RPM包里文件复制到指定好的目录里。如果RPM包的依赖没有解决,是无法成功安装的。即使安装好了,若程序依赖的动态链接库等不存在或版本不匹配,也是无法正确运行的,比如libc库的版本过低,但明显你不能轻易替换libc库,因为系统中已安装的很多程序都依赖于libc库。那么相比源码编译方式,RPM包方式的问题更难解决。

    需要安装的软件有Nginx、PHP、MySQL、Memcached、Redis、Mongodb …

  4. 编译安装MemcacheQ

    MemcacheQ是一个MemcacheDB的变种,用来提供简单的消息队列服务。(注:MemcacheDB并不是一个数据缓存解决方案,而是一个为数据持久化设计的分布式的键-值对数据存储系统,采用memcache协议,以BerkeleyDB作为存储后端,主页)。

    MemcacheQ依赖于BerkeleyDB和libevent,所以需先编译安装这两者。

    1. 从Oracle官网上下载某一版本的BerkeleyDB(这里以5.0.32版本为例)

    解压缩: tar -xvf db-5.0.32.tar.gz

    进入db-5.0.32/build_unix目录后执行: 1) ../dist/configure , 2) make , 3) sudo make install

    默认情况下,会把BerkeleyDB安装到/usr/local/BerkeleyDB.5.3目录下。

    2. 从libevent官网下载libevent …

  5. CentOS + rsync + inotify-tools实时备份配置

    现实中,服务器可能会因为各种原因而crash掉,从而造成数据丢失或者服务的暂时不可用。为了提高服务的可用性以及数据的安全性,就需要对数据进行备份,以便数据恢复或者服务的动态切换(将访问请求动态重定向到备份服务器)。

    常见的备份方法是定时的rsync任务或者远程拷贝。但这种方式,如果定时的间隔较大,那么服务器宕掉后,还是会丢失部分数据,动态切换的服务也不是宕机前的最新状态。为了支持实时数据同步,Linux 2.6.13 内核中新引入文件系统变化通知机制inotify,一旦对文件系统有改动,就会触发相关事件任务。通过结合rsync,inotify能够很好地完成实时同步任务。

    主服务器:1.1.1.1 备份服务器:0.0.0.0

    配置步骤

    1. 主服务器,备份服务器上安装rsync:

    sudo yum install rsync
    

    2. 主服务器上安装inotify-tools:

    sudo yum install inotify-tools
    

    3. 备份服务器上添加配置文件/etc …

    Tagged as : 服务器 工具 Linux

Page 1 / 1