Web服务器

Posted by Liber Sun on September 28, 2018

Web Serve

Tomcat

Tomcat是一款开源的应用服务器,凭借技术先进、性能稳定、体积小巧、扩展性好,深受开发人员和软件开发商的认可。

Tomcat架构

Tomcat中最顶层的容器是server,代表整个服务器。然后是Service,用于提供具体服务,一个Server包含多种Service。

Service主要包括两个部分:Connector和Container。

Connector用于处理连接相关的事情,并提供Socekt与Request、Response相关的转化。 Container用于封装和管理Servlet,并完成具体的Request请求。

注意Service可以拥有多个Connector,因为一个服务可以有多个连接,如同时提供Http和Https链接。

connector

Connector结构图

Connector使用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型,比如:Http11Protocol使用的是普通Socket来连接的,Http11NioProtocol使用的是NioSocket来连接的。

其中ProtocolHandler由包含了三个部件:Endpoint、Processor、Adapter。

1)Endpoint用来处理底层Socket的网络连接,Processor用于将Endpoint接收到的Socket封装成Request,Adapter用于将Request交给Container进行具体的处理。 2)Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现TCP/IP协议的,而Processor用来实现HTTP协议的,Adapter将请求适配到Servlet容器进行具体的处理。 3)Endpoint的抽象实现AbstractEndpoint里面定义的Acceptor和AsyncTimeout两个内部类和一个Handler接口。Acceptor用于监听请求,AsyncTimeout用于检查异步Request的超时,Handler用于处理接收到的Socket,在内部调用Processor进行处理。

Nginx

负载均衡

nginx的负载均衡属于服务器端均衡,在服务器端拥有服务实例的清单,在服务器进行负载均衡算法分配。

服务器端负载均衡

负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表。

#动态服务器组
upstream dynamic_zuoyu {
    server localhost:8080;  #tomcat 7.0
    server localhost:8081;  #tomcat 8.0
    server localhost:8082;  #tomcat 8.5
    server localhost:8083;  #tomcat 9.0
}

当然Nginx拥有丰富的负载均衡策略:

轮询 默认方式
weight 权重方式
ip_hash 依据ip分配方式
least_conn 最少连接方式
fair(第三方) 响应时间方式
url_hash(第三方) 依据URL分配方式