技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统架构 --> 服务接入层小结

服务接入层小结

浏览:1312次  出处信息

    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

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1