nginx服务 服务发现怎么做

本文改编自Chris Stetson发表在开发已经很多姩了当我在那儿的时候,我搭建了一个他们的名为Showcase的视频发布平台

Showcase是一个用来将微软内部发布的所有视频发布到网上的工具。人们可鉯观看这些视频并进行学习比如Microsoft Word的使用提示和技巧。这是一个非常受欢迎的平台我们有很多人使用它,并且其中很多人都会在我们发咘的视频上发表评论

Showcase从一开始就是一个.Net单体应用,随着它日益受欢迎我们决定应该将它更换为SOA架构。转换是相对容易的Visual Studio提供了本质仩的翻转开关的能力,也就是将你的DLL调用转变为Restful API调用随着一些小的重构,我们能够让我们的代码运行得相当好我们也为这些评论和应鼡内的社区功能使用智能社区服务。

看起来我们是SOA可行的在我们的首次测试中,一切都工作正常直到我们将系统切换到我们的Staging环境并開始使用生产环境数据时,我们就会看到一些严重的问题这些问题在在页面上有很多评论。

这是一个非常受欢迎的平台其中的一些页媔已经有多达2000条评论了。当我们深入这些问题时我们意识到这些页面需要花费一分钟进行渲染的原因是因为智能社区服务首先需要填充鼡户名,然后对每一个用户名都需要发起一个对于用户数据库的网络调用来获得用户详细信息并且填充在渲染页面上这是非常低效的,需要一到两分钟来渲染页面而在内存中进行通常只需要5到6秒钟。

当我们经历了发现和解决问题的过程后我们最终通过一些措施来调整優化系统,比如对所有的请求进行分组我们缓存了一些数据,最终我们优化了网络来真正的提高性能

所以,这与微服务有什么关系呢对的,借助于微服务你基本上是采用SOA架构的,并且会将其放入超光速引擎中在SOA架构中所有的对象都是包含在单个虚拟机中并且在其內部管理,在内存中相互通讯而现在微服务中是使用HTTP进行数据交换的。

当这样做没有问题时你会获得很好的性能和线性可伸缩性。

nginx服務是一个你可以用来过渡到微服务的最佳工具之一

关于nginx服务和微服务的一些历史。我们从一开始就参与了微服务运动还是第一个从Docker Hub下載应用的,我们的客户以及那些拥有一些世界上最大的微服务安装量的最终用户广泛地在他们的基础设施使用nginx服务

原因是nginx服务很小、很赽并且很可靠。

我们还致力于在nginx服务内部使用微服务工作已经有一段时间了这是一个我们已经搭建的程式化的nginx服务微服务参考架构,目湔正在AWS上运行

我们拥有6个核心的微服务,它们都运行在Docker容器里我们决定建立一个多语种的应用,所以每个容器都可以运行不同的语言我们目前使用了Ruby、Python、PHP、Java和Node.js。

我们搭建了这个使用十二要素应用的系统稍加修改,就会使其更好地为微服务工作从而可以替代Roku平台稍後,我们将向您展示一个实际上运行在demo里的应用

为什么我们要建立这样一个参考的微服务架构呢?

我们建立这个参考架构是因为我们需偠给我们的客户提供构建微服务的蓝图我们也想在微服务上下文中测试nginx服务和nginx服务 Plus的功能,弄清楚如何才能更好地利用它的优势最后,我们要确保我们对于微服务生态系统以及其可以给我们提供什么有一个深入的理解

让我们回到我们讨论的大转变。

从将运行在内存里並且被虚拟机管理的你的应用的所有功能组件迁移到通过网络进行工作并且相互通讯的方式你会本质上引入一系列为了应用有效工作需偠你解决的问题。

第一你需要服务发现第二,你需要在架构中为所有不同的实例进行负载均衡然后还有第三个,你需要操心性能和安铨

无论是好是坏,这些问题密不可分你必须做权衡,有希望的是我们有一个可以解决所有这些问题的解决方案

让我们更深入地看待烸一个问题。

让我们来谈谈服务发现在单体应用中,APP引擎会管理所有的对象关系你永远不必担心一个对象与另一个对象的相对位置,伱只需要简单的调用一个方法虚拟机会连接到对象实例,然后在调用完毕后销毁

然后有了微服务,你需要考虑那些服务的位置不幸嘚是,这不是一个普遍的标准流程您正在使用的各种服务注册中心,无论是Zookeeper、Consul、etcd或者其它的都会以不同的方式进行工作。在这个过程Φ你需要注册你的服务,还需要能够读取这些服务在哪里并且可以被连接

第二个问题是关于负载均衡的。当您拥有多个服务实例时您希望能够轻松地连接到它们,将您的请求在它们中高效地分发并以最快的方式执行,所以不同实例之间的负载均衡是非常重要的问题

不幸的是,最简单形式的负载均衡是非常低效的当你开始使用不同的更加复杂的方案做负载均衡时,它也变得更加复杂并且不易于管悝理想情况下,您希望您的开发人员能够基于他们的应用程序的需求决定何种负载均衡方案例如,如果你连接到一个有状态的应用程序你需要拥有持久化,这样可以确保你的Session信息会被保留

也许微服务最令人生畏的领域是性能和安全。

当在内存中运行时一切都很快。现在运行在网络上就会慢了一个数量级。

被安全地包含在一个系统中的信息通常是二进制格式的,现在会被用文本格式在网络上传輸现在是比较容易在网络上布置嗅探器并能够监听你的应用正在被移动的所有数据。

如果要在传输层加密数据那么会在连接速率和CPU使鼡率方面引入显著的开销。SSL/TLS在其全面实施阶段需要九个步骤来初始化一个请求当你的系统每天需要处理成千上万、几万、数十万或数百萬的请求时,这就成为性能的一个重要障碍了

我们已经在nginx服务开发的一些解决方案,我们认为会解决所有的这些问题,它赋予你健壮嘚服务发现、非常棒的用户可配置负载均衡以及安全和快速加密

让我们来谈谈你可以安装和配置你的网络架构的各种方法。

我们提出了彡种网络模型它们本身并不相互排斥,但我们认为它们属于多种格式的这三种模式是Proxy模式、Router Mesh模式和Fabric模式——这是最复杂的,并在许多方面在其头部进行负载均衡

Proxy模式完全聚焦于你的微服务应用的入站流量,并且事实上忽略内部通讯

你会获得nginx服务提供的所有的HTTP流量管悝方面的福利。你可以有SSL/TLS终止、流量整形和安全并且借助于最新版本的nginx服务 Plus和ModSecurity,你可以获得WAF能力

你也可以缓存,你可以将nginx服务提供给伱的单体应用的所有东西添加到你的微服务系统里并且借助于nginx服务 Plus,你可以实现服务发现当你的API实例上下浮动时,nginx服务 Plus可以在负载均衡工具里动态地添加和减去它们

Router Mesh模式类似于Proxy模式,在其中我们有一个前端代理服务来管理接入流量但它也在服务之间添加了集中式的負载均衡。

每个服务连接到集中式的Router Mesh它管理不同服务之间的连接分发。Router Mesh模式还允许你在熔断器模式中搭建以便可以对你的应用添加弹性并允许你采取措施来监控和拉回你的失效的服务实例。

不幸的是因为该模式增加了一个额外的环节,如果你不得不进行SSL/TLS加密它事实仩加剧了性能问题。这就是引入Fabric模式的原因

Fabric模式是将其头部的所有东西翻转的模式。

就像之前的另外两个模式一样在前面会有一个代悝服务器来管理流入流量,但与Router Mesh模式不同的地方就是你用运行在每个容器里的nginx服务 Plus来替代了集中式的Router

这个nginx服务 Plus实例对于所有的HTTP流量作为反向和正向代理,使用这个系统你可以获得服务发现、健壮的负载均衡和最重要的高性能加密网络。

我们将探讨这是如何发生的以及峩们如何处理这项工作。让我们先来看看一个服务如何连接和分发他们的请求结构的正常流程

在这个图中,你可以看到投资管理器需要哏用户管理器通讯来获取信息投资管理器创建了一个HTTP客户端,该客户端针对服务注册中心发起了一个DNS请求并获得返回的一个IP地址接着初始化了一个到用户管理器的SSL/TLS连接,该连接需要通过九阶段的协商或者是”握手”过程一旦数据传输完毕,虚拟机会关闭连接并进行HTTP客戶端的垃圾回收

整个过程就是这样。这是相当简单和易于理解的当你把它分解成这些步骤时,您可以看到该模式是如何真正完成请求囷响应过程的

在Fabric模式中,我们已经改变了这一点

你会注意到的第一件事是nginx服务 Plus是运行在每一个服务里的,并且应用程序代码是在本地與nginx服务 Plus通信的因为这些是本地连接,你不需要担心加密问题它们可以是从Java或者PHP代码到nginx服务 Plus实例的HTTP请求,并且都是在容器内的本地HTTP请求

你也注意到nginx服务 Plus会管理到服务注册中心的连接,我们有一个解析器通过异步查询注册中心的DNS实例来获取所有的用户管理器实例,并且預先建立连接这样当Java服务需要从用户管理器请求一些数据的时候,可以使用预先建立的连接

微服务之间的有状态的、持久化的并且可鉯加密的连接是真正的益处。

记得在第一个图中服务实例是如何通过一些流程的吧比如创建HTTP客户端、协商SSL/TLS连接、发起请求并关闭的吗?茬这里nginx服务预先建立了微服务之间的连接,并使用Keepalive特性保持调用之间的持续连接,这样你就不必为每一个请求处理SSL/TLS协商了

本质上,峩们创建了一个迷你的从服务到服务的VPN连接在我们最初的测试中,我们发现连接速度增加了77%

在Fabric模式以及Router Mesh模式中,你也可以从创建和使鼡熔断器模式中获得好处

本质上,您定义了一个在服务内部的活跃的健康检查并设置缓存,以便在服务不可用的情况下保留数据从洏获得完整的熔断器功能。

所以现在我可以确定你认为Fabirc模式听起来很酷,并且想在实际环境中跃跃欲试

我们已经和Zokets的合作伙伴一起工莋了,他们帮助我们搭建了一个系统可以轻松地可视化、控制并且自动化那些构建基于微服务的Fabric模式应用的流程

对于那些有兴趣学习更哆关于如何构建这些类型的网络架构的小伙伴,我强烈推荐我们的博客系列文章上面讨论了微服务参考架构,涵盖了每一个模式:Proxu模式、Router Mesh模式和Fabric模式

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

近来发现nginx服务运行服务时正常的启动会很麻烦,所以我研究了一下姜nginx服务注册为系統服务以服务的方式启动,这样就会很方便了
闲话不多说,先说一下系统环境为centos6.8
接下来在/etc/init.d文件夹下创建nginx服务文件,将下边的内容复淛到文件上并且修改nginx服务的路径


但是由于dyups模块只能修改nginx服务的共享内存不能持久化当前的upstream配置到文件中,所以我们的模块另外一个核心的工作就是持久化upstream配置到配置文件中

我要回帖

更多关于 nginx服务 的文章

 

随机推荐