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

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

  • 作为负载均衡服务器:
    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 进行处理。

微服务之路由网关—Nginx的更多相关文章

  1. SpringCloud与微服务Ⅸ --- Zuul路由网关

    一.Zool是什么 Zuul包含了对请求路由和过滤两个最主要的功能: 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现 ...

  2. 微服务之路由网关—zuul

    Zuul 简介Zuul 是 Netflix 公司开发的一个开源 APIGateway,其本质上是一个 WebServlet 应用.Zuul 的核心是一系列的 Filter. 为什么要使用 Zuul微服 ...

  3. .net core 微服务之Api网关(Api Gateway)

    原文:.net core 微服务之Api网关(Api Gateway) 微服务网关目录 1. 微服务引子 2.使用Nginx作为api网关 3.自创api网关(重复轮子) 3.1.构建初始化 3.2. ...

  4. AspNetCore微服务下的网关-Kong(一)

    Kong是Mashape开源的高性能高可用API网关和API服务管理层.它基于OpenResty,进行API管理,并提供了插件实现API的AOP.Kong在Mashape 管理了超过15,000 个A ...

  5. 微服务·API网关

    阅文时长 | 3.52分钟 字数统计 | 1232字符 主要内容 | 1.什么是API网关 2.微服务中的API网关 3.几种部署策略 『微服务·API网关』 编写人 | SCscHero 编写时间 ...

  6. SOA与ESB,微服务与API网关

    SOA与ESB,微服务与API网关 SOA: ESB: 微服务: API网关: 参考资料: 1.漫画微服务,http://www.sohu.com/a/221400925_100039689 2.SO ...

  7. 一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队

    一站式入口服务|爱奇艺微服务平台 API 网关实战 原创 弹性计算团队 爱奇艺技术产品团队

  8. Net分布式系统之六:微服务之API网关

    本人建立了个人技术.工作经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体.欢迎有兴趣的同学一起加入相互学习.基于上篇微服务架构分享,今天分享其中一个重要的基础组件“API网关”. 一.引言 ...

  9. (8)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Ocelot网关(Api GateWay)

    说到现在现有微服务的几点不足: 1) 对于在微服务体系中.和 Consul 通讯的微服务来讲,使用服务名即可访问.但是对于手 机.web 端等外部访问者仍然需要和 N 多服务器交互,需要记忆他们的服务 ...

随机推荐

  1. 爬虫之scrapy--基本操作

    参考博客  :https://www.cnblogs.com/wupeiqi/p/6229292.html Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘, ...

  2. Unix、Windows、Mac OS、Linux系统故事

    我们熟知的操作系统大概都是windows系列,近年来Apple的成功,让MacOS也逐渐走进普通用户.在服务器领域,恐怕Linux是无人不知无人不晓.他们都是操作系统,也在自己的领域里独领风骚.这都还 ...

  3. python 3.7 配置mysql数据库

    一. mysql驱动安装 1.mysqlclient(推荐使用)    2.pymysql 二.django操作数据库     1.django配置连接数据库         settings.py ...

  4. HybridStart发布v1.0测试版

    HybridStart是一款多webview模式的混合应用前端开发框架,本来只是作者自用的一套混合应用开发模板,为了进一步提高混合应用开发效率,近期着重在框架高通用性和易用性方面做了较大改进,比如将U ...

  5. MySQL 索引创建及使用

    索引的类型 PRIMARY KEY(主键索引):   用来标识唯一性,数据不可重复 ,主键列不能为NULL,并且每个表中有且只能有一个主键,还可以创建复合主键,即多个字段组合起来. 创建语句为: -- ...

  6. 做为一个Python程序员的基本素养

    今天在学习的过程中,明白了一些不是Python标准所必须要做的事情,二是做为一个合格的Python程序员应该所遵从的一些规范 分享给大家,有不足的地方请大家指正,此下是我学习的一点心得: 1.在给变量 ...

  7. springboot mybatis搭建

    非常easy直接写,没有搭建成分 1.目录 2. @RestController public class UserController { @RequestMapping("/hello& ...

  8. 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击

    20145203盖泽双<网络对抗技术>拓展:注入:shellcode及return-into-libc攻击 一.注入:shellcode 1.编写一段用于获取Shellcode的C语言代码 ...

  9. shell杀死指定端口的进程

    杀死端口代码如下: lsof -i: kill - PID 上面的与下面的代码作用相同. 命令如下所示(这种方式更自动化): kill - $(netstat -nlp | grep : | awk ...

  10. 基于SpringMVC拦截器和注解实现controller中访问权限控制

    SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...