微服务之路由网关—Nginx

Nginx 简介
Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器,它具备有不少很是优
越的特性:web

  • 做为 Web 服务器:
    相比 Apache , Nginx 使用更少的资源,支持更多的并发链接,体现更高的效率,这点使
Nginx 尤为受到虚拟主机提供商的欢迎,可以支持高达 50,000 个并发链接数的响应。apache

  • 做为负载均衡服务器:
    Nginx 既能够在内部直接支持 Rails 和 PHP,也能够支持做为 HTTP 代理服务器对外进行服
务。Nginx 用 C 编写,不管是系统资源开销仍是 CPU 使用效率都比 Perlbal 要好的多。缓存

  • 做为邮件代理服务器:
    Nginx 同时也是一个很是优秀的邮件代理服务器(最先开发这个产品的目的之一也是做为
邮件代理服务器),Last.fm 描述了成功而且美妙的使用经验。
    而在微服务中,每一个功能可能都是一个独立的服务,若是经过传统的方式配置每一个应用,配
置文件会变得很复杂多变,因此咱们须要服务的注册与发现。服务器

注册与发现的原理
服务的注册与发现是经过服务注册表实现的,应用端(每一个服务)经过配置文件向服务注册
表提交本身的注册信息,当服务启动时,服务注册表会检索到该应用,并将该应用的网络地
址添加到表中。一样当服务终止,服务注册表会删除服务的地址。
服务注册表是经过心跳机制实现的。当其余应用访问已注册的服务时,负载均衡会经过服务
注册表,实现服务的发现。网络

为何要使用 Nginx
微服务架构中,众多服务被拆分解耦,并部署到不一样的容器以及服务器中,你可能使用了一
个服务发现系统(例如 etcd 或 Eureka)或者一个资源管理框架来管理全部这些服务,可若是
你想让你的用户去从互联网访问你的某些微服务,你就必需使用一个反向代理服务器,从而
使你的众多微服务可以被访问到。
还有一个问题是当你拥有多个服务实例时,你但愿可以轻松地链接到它们,将你的请求在它
们中高效地分发,并以最快的方式执行,因此不一样服务实例之间的负载均衡也是很是重要的
问题。架构

而 Nginx 做为一款优秀的反向代理服务器和负载均衡服务器,他的诸多优秀特性成为了咱们
选择他的缘由:并发

• 模块化设计
  Nginx 采用高度模块化设计,使得具备较好的扩展性,在 Nginx 中,除了少许的核心代
码,其余一切皆为模块。全部模块间是分层次、分类别的,官方 Nginx 有五大类型的模块:
核心模块、配置模块、事件模块、HTTP 模块、Mail 模块。负载均衡

• 高可靠性
  高可靠性是指服务可靠性。Nginx 是一个高可靠性的 Web 服务器,这也是咱们为何选
择 Nginx 的基本条件。Nginx 采用一个主进程(master)和 N 个工做进程(worker)的工做模式,而
worker 进程才是真正复制相应用户请求的进程。配置了缓存时还会有缓存加载器进程
(cacheloader)和缓存管理器进程(cachemanager)等。全部进程均是仅含有一个线程,并主要通
过“共享内存”的机制实现进程间通讯。框架

• 支持热部署
  Nginx 使用主进程和 worker 工做进程的机制,使得 Nginx 支持热部署,这个热部署包括不
中止服务更新配置文件、更新日志文件、以及更新服务器程序版本,也称为平滑升级。异步

• 低内存消耗
  Nginx 对于内存的消耗是很是小的,特别是对于非活动链接。Nginx 对于非活动链接是
指,当咱们开启持久链接功能时,用户链接再也不发送数据后就会当即转为非活动链接,直到
持久链接超时时间到达才销毁。在通常的状况下,10000 个非活跃的 HTTPKeep-Alive 链接在
Nginx 中仅消耗 2.5M 的内存,这也是 Nginx 支持高并发链接的基础。

• 高扩展性
  Nginx 的设计具备扩展性,它彻底是由多个不一样功能、不一样层次、不一样类型且耦合度极低
的模块组成。所以,当对某一个模块修复 Bug 或进行升级时,能够专一于模块自身,无须在
意其余。Nginx 支持磁盘异步 I/O(AIO)、内存映射机制(MMAP)、事件驱动机制(Event-
driven)、单线程 N 请求等等。

• 高并发
  Nginx 是异步非阻塞的。在须要进程等待的过程当中,这些闲置的进程就空闲出来待命,而
webserver 的工做性质决定了每一个 request 的大部份生命都是在网络传输中,实际上花费在
server 机器上的时间片很少,所以就表现为几个进程解决了高并发的问题。

 

Nginx 架构

Nginx 在启动后,会有一个 master 进程和多个 worker 进程。master 进程主要用来管理 worker
进程,并不处理网络请求,主要负责调度工做进程,也就是图示的三项:加载配置、启动工
做进程及非停升级。

服务器实际处理网络请求及响应的是工做进程(worker),在类 unix 系统上,Nginx 能够配置
多个 worker,而每一个 worker 进程均可以同时处理数以千计的网络请求。多个 worker 进程之
间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可
能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求。worker 进程
的个数是能够设置的,通常咱们会设置与机器 cpu 核数一致,这里面的缘由与 Nginx 的进程
模型以及事件处理模型是分不开的。代理(proxy)设计,能够说是 Nginx 深刻骨髓的设计,
不管是对于 HTTP,仍是对于 FastCGI、memcache、Redis 等的网络请求或响应,本质上都采用
了代理机制。因此,Nginx 天生就是高性能的代理服务器。

Nginx 与 Tomcat 对比

• Nginx 优势:
  负载均衡、反向代理、处理静态文件有优点。Nginx 处理静态请求的速度高于 apache。
• Tomcat 优势:  动态解析服务器,处理动态请求,是编译 JSP\Servlet 的容器,Nginx 有动态分离机制,静态请求直接就能够经过 Nginx 处理,动态请求才转发请求到后台交由 Tomcat 进行处理。

相关文章
相关标签/搜索