IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

服务接入层小结

五四陈科学院-坚信科学,分享技术 2012-01-24 13:41:14 累计浏览 1,996 次
本机暂存

    access,layer

     接入层

     是指普通用户与核心业务逻辑中间的过程。现在常见的服务接入层,像nginx、lvs、php这些都可以算是。

    观点

     一种观点认为:接入的量不应该影响系统的正常运行,也就是不能接入不能处理的用户请求,类似上图中前图。

     另一种观点认为:接入层应该尽量接入所有用户,类似上图中后图。

    做法

     nginx:

     nginx如果用做proxy,后端挂其他服务的话,是一个纯粹的NIO server。对用户来说,nginx是长连接(http 1.1),对后端服务来说,nginx是短连接(http 1.0)。

    default: proxy_connect_timeout 60s; 向后端服务创建连接的超时时间

     default: proxy_read_timeout 60s; 后端返回请求响应超时时间

     default: proxy_send_timeout 60s; 大请求发到后端超时时间

    nginx通过上面的三个设置,当后端有响应不过来的时候,进行超时处理(记录日志),当发现超时很多了,就需要提升后端的处理能力了。

    那么,nginx自身的处理能力是否有上限呢?当然有!

    worker_processes 1;

     worker_connections 1024;

    max_clients = worker_processes * worker_connections

    当超过max_clients的用户扑上来的时候,如果幸运后端没有能力问题,那就会看到nginx在日志中要求你增加worker的提示。

    php-fpm:

    pm = dynamic/static; dynamic时有最大进程最小进程之说,static时没有。只有一个上限。

     pm.max_children = 50;强制的一个阀门,后面的设置里,进程数不能大于这个。

     pm.start_servers = 20;启动时启动的fastcgi进程。

     pm.min_spare_servers = 5;最小fastcgi进程数量,dynamic有效

     pm.max_spare_servers = 35;最大fastcgi进程数量,dynamic有效

    php没有异步进程概念,如果要使用php作为接入层,需要自己完成NIO扩大接入能力(接触到的ICE、thrift在php中都是同步操作)。而接入能力就取决于上面的配置。

    java:

     java优秀的NIO框架netty。

     servlet3.0实现了异步请求的context,目前还没有在平常框架中进行使用。一般的用法为comet push server,性能未知。

     一般来说,用java做接入层很容易变成了业务层。(但是,为什么不呢?)

    tomcat 7.0.x提供了servlet3.0的这一特性,CometProcessor interface。

     resin 4.x提供了servlet3.0的这一特性,GenericCometServlet。

    从名字看,大家都一致性地认为这一特性适合用来做comet server。(理论上可接入无限用户,直到费尽cpu、内存,服务器死机、jvm oom)

    想快点找到作者也可以到Twitter上留言: @54chen

    或者你懒得带梯子上墙,请到新浪微博:@54chen

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 107,164)
  2. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (累计阅读 33,895)
  3. 记录一个软中断问题 (累计阅读 16,955)
  4. 解析nginx负载均衡 (累计阅读 16,622)
  5. server日志的路径分析 (累计阅读 11,241)
  6. Nginx模块开发入门 (累计阅读 11,170)
  7. 检查nginx配置,重载配置以及重启的方法 (累计阅读 10,896)
  8. Cacti 添加 Nginx 监控 (累计阅读 10,644)
  9. fsockopen 异步处理 (累计阅读 10,345)
  10. 使用Squid缓存视频 (累计阅读 10,339)