作者注:本博文是系列文章的第一篇:

  1. Introducing the NGINX Microservices Reference Architecture (this post)

  2. MRA, Part 2: The Proxy Model

  3. MRA, Part 3: The Router Mesh Model

  4. MRA, Part 4: The Fabric Model

  5. MRA, Part 5: Adapting the Twelve‑Factor App for Microservices

  6. MRA, Part 6: Implementing the Circuit Breaker Pattern with NGINX Plus

所有六个博客,以及一个关于微服务应用程序的Web前端的博客,都被收集到一个免费的电子书中。

另请查看有关微服务的其他NGINX资源:

  • A very useful and popular series by Chris Richardson about microservices application design

  • The Chris Richardson articles collected into a free ebook, with additional tips on implementing microservices with NGINX and NGINX Plus

  • Other microservices blog posts

  • Microservices webinars

  • Microservices Solutions page

  • Topic: Microservices

介绍

NGINX从一开始就参与了微服务运动。NGINX的轻巧,高性能和灵活性非常适合微服务。

NGINX Docker映像是Docker Hub上排名第一的应用程序映像,您今天在Web上找到的大多数微服务平台都包含一个演示,它以某种形式部署NGINX并连接到欢迎页面。

因为我们认为转向微服务对于客户的成功至关重要,我们NGINX已经启动了一个专门的程序来开发支持Web应用程序开发和交付这种地震转变的功能和实践。我们还认识到,实现微服务有许多不同的方法,其中许多方法都是新颖的,并且特定于各个开发团队的需求。我们认为需要使用模型来使公司更容易开发和交付自己的基于微服务的应用程序。

考虑到这一切,NGINX专业服务部门正在开发NGINX微服务参考架构(MRA) - 一组可用于创建自己的微服务应用程序的模型。

MRA由两部分组成:三个模型中的每一个的详细描述,以及实现我们的示例照片共享程序的可下载代码,Ingenious。三种型号的唯一区别是用于为每种型号配置NGINX Plus的配置代码。这一系列博客文章将提供每个模型的概述说明; Ingenious示例程序的详细描述,配置代码和代码将在今年晚些时候推出。

我们构建此参考架构的目标有三个:

  1. 为客户和行业提供随时可用的蓝图,用于构建基于微服务的系统,加速和改进开发

  2. 创建用于测试NGINX和NGINX Plus中新功能的平台,无论是内部开发还是外部开发,分布在产品核心中或作为动态模块

  3. 为了帮助我们了解合作伙伴系统和组件,我们可以从整体上了解微服务生态系统

微服务参考架构也是NGINX客户专业服务产品的重要组成部分。在MRA中,我们尽可能使用NGINX开源和NGINX Plus共有的功能,并在需要时使用NGINX Plus特有的功能。NGINX Plus依赖关系在更复杂的模型中更强,如下所述。我们预计,MRA的许多用户将受益于NGINX专业服务的访问以及NGINX Plus订阅的技术支持。

微服务参考架构概述

我们正在构建参考架构以符合Twelve-Factor App的原则。这些服务设计为轻量级,短暂的和无状态的。

MRA使用行业标准组件,如Docker容器,各种语言 - Java,PHP,Python,NodeJS / JavaScript和Ruby - 以及基于NGINX的网络。

迁移到微服务时,应用程序设计和体系结构的最大变化之一是使用网络在应用程序的功能组件之间进行通信。在单片应用程序中,应用程序组件在内存中进行通信。在微服务应用程序中,该通信通过网络进行,因此网络设计和实施变得至关重要。

为了反映这一点,MRA已经使用三种不同的网络模型实现,所有这些模型都使用NGINX或NGINX Plus。它们的范围从相对简单到功能丰富且更复杂:

  1. 代理模型 (Proxy Model)- 一种简单的网络模型,适用于实现NGINX Plus作为微服务应用程序的控制器或API网关。该模型建立在Docker Cloud之上。

  2. 路由器网格模型(Router Mesh Model ) - 一种更强大的网络方法,每台主机上都有一个负载均衡器,可以管理系统之间的连接。该模型类似于Deis 1.0的体系结构。

  3. 织品模型 (Fabric Model) - MRA的皇冠上的明珠,面料模型在每个容器中都有NGINX Plus,处理所有入口和出口交通。它适用于高负载系统,并支持所有级别的SSL / TLS,NGINX Plus提供减少的延迟,持久的SSL / TLS连接,服务发现以及所有微服务中的断路器模式。

我们的目的是您使用这些模型作为您自己的微服务实现的起点,我们欢迎您提供有关如何改进MRA的反馈。(您可以从添加到下面的评论开始。)

以下是每种模型的简要说明;我们建议您阅读所有描述,以便开始了解如何最好地使用一个或多个模型。未来的博客文章将详细描述每个模型,每个博客文章一个。

代理模型简介

代理模型是一种相对简单的网络模型。它是初始微服务应用程序的出色起点,或者是转换中等复杂的单片遗留应用程序的目标模型。

在代理模型中,NGINX或NGINX Plus充当入口控制器,将请求路由到微服务。当创建新服务时,NGINX Plus可以使用动态DNS进行服务发现。当使用NGINX作为API网关时,代理模型也适合用作模板。

如果需要进行服务间通信 - 并且大多数应用程序都处于任何复杂程度 - 服务注册表提供集群内的机制。(有关服务间通信机制的详细列表,请参阅此博客文章。)Docker Cloud默认使用此方法;为了连接到另一个服务,服务查询DNS并获取IP地址以发送请求。

通常,代理模型适用于简单到中等复杂的应用程序。它不是负载平衡最有效的方法/模型,特别是在规模上;如果您有严重的负载平衡要求,请使用下面描述的模型之一。(“Scale”可以指大量的微服务以及高流量。)

编辑器 - 有关此模型的深入探索,请参阅MRA,第2部分 - 代理模型。

路由器网格模型

路由器网格模型中等复杂,非常适合强大的新应用程序设计,也适用于转换不需要Fabric模型功能的更复杂的单片遗留应用程序。

通过在每个主机上运行负载均衡器并主动管理微服务之间的连接,路由器网状网模型采用比代理模型更强大的网络方法。路由器网格模型的主要优点是服务之间的更高效和稳健的负载平衡。如果使用NGINX Plus,则可以实施活动运行状况检查以监视各个服务实例,并在关闭时优雅地限制流量。

Deis Workflow使用类似于路由器网格模型的方法在服务之间路由流量,NGINX实例在每个主机上的容器中运行。当新的应用程序实例被启动时,进程从etcd服务注册表中提取服务信息并将其加载到NGINX中。NGINX Plus也可以在这种模式下工作,使用各种位置及其相关的上游。

编辑器 - 有关此模型的深入探索,请参阅MRA,第3部分 - 路由器网格模型(https://www.nginx.com/blog/microservices-reference-architecture-nginx-router-mesh-model/)。

最后 - Fabric模型,带有可选的SSL / TLS

我们NGINX对Fabric模型最为兴奋。它带来了一些最令人兴奋的微服务承诺,包括高性能,负载平衡的灵活性,以及无处不在的SSL / TLS,直到单个微服务的水平。Fabric模型适用于安全应用程序,可扩展到非常大的应用程序。

在Fabric模型中,NGINX Plus部署在每个容器中,并成为进出容器的所有HTTP流量的代理。应用程序与本地(localhost)主机位置通信以获取所有服务连接,并依赖NGINX Plus进行服务发现,负载平衡和运行状况检查。

在我们的配置中,NGINX Plus向ZooKeeper查询应用程序需要连接的所有服务实例。例如,使用DNS频率设置(有效)设置为1秒,NGINX Plus会每隔一秒扫描ZooKeeper,并适当地路由流量。

由于NGINX Plus中强大的HTTP处理功能,我们可以使用keepalive来维护与微服务的状态连接,减少延迟并提高性能。当使用SSL / TLS来保护微服务之间的流量时,这是一个特别有价值的功能。

最后,我们使用NGINX Plus的主动健康检查来管理健康实例的流量,并且基本上免费构建断路器模式。

编辑 - 有关此模型的深入探索,请参阅MRA,第4部分 - 结构模型(https://www.nginx.com/blog/microservices-reference-architecture-nginx-fabric-model/)。

MRA的巧妙演示应用程序

MRA包括一个示例应用程序作为演示:Ingenious照片共享应用程序。Ingenious在三种模型中实现 - 代理,路由器网格和结构。Ingenious演示应用程序将于今年晚些时候向公众发布。

Ingenious是照片存储和共享应用程序的简化版本,la Flickr或Shutterfly。我们选择照片共享应用程序的原因有以下几点:

  1. 用户和开发人员都很容易掌握它的功能。

  2. 需要管理多个数据维度。

  3. 在应用程序中很容易融入漂亮的设计。

  4. 它提供了非对称计算要求 - 高强度和低强度处理的混合 - 可以实现跨不同功能的故障转移,扩展和监视功能的真实测试。

结论

NGINX微服务参考架构对我们来说是一个令人兴奋的发展,对于我们迄今为止共享的客户和合作伙伴而言。

本文:http://pub.intelligentx.net/introducing-microservices-reference-architecture-nginx

讨论:请加入知识星球或者小红圈【首席架构师圈】或者小号【jiagoushi_pro】

微信公众号 【首席架构师智库】
适合物业仔细反复阅读。
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
微信小号 激烈深度讨论,报上你想加入的群:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.
社群已经有5000人,赶快加入讨论。
视频号 【首席架构师智库】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

知识星球 向大咖提问,近距离接触,或者获得私密资料分享。 知识星球【首席架构师圈】
微信圈子 志趣相投的同好交流。 微信圈子【首席架构师圈】
喜马拉雅 路上或者车上了解最新黑科技资讯,架构心得。 【智能时刻,架构君和你聊黑科技】
知识星球 认识更多朋友,职场和技术闲聊。 知识星球【职场和技术】

谢谢大家关注,转发,点赞和在看。

「微服务架构」基于NGINX的三种微服务参考架构相关推荐

  1. 「分布式技术专题」基于Gossip协议的去中心服务

    概述 Gossip 协议可以翻译为流言协议.它是在 1987 年发表在 ACM 上的论文 <Epidemic Algorithms for Replicated Database Mainten ...

  2. 面向对象编程、面向服务架构、基于组件开发三种编程模式的区别和适用领域

    面向对象编程(Object-Oreinted Programming) 是一种编程范式.指在设计程序时大量运用类实例对象的方式.OOP一旦在项目中被运用,就成了时刻要考虑的东西. 面向服务架构(Ser ...

  3. 「 Java开发规范 」10人小团队Java开发规范参考这篇就够了

    <菜鸟程序员成长计划>之团队高效合作[开发规范篇] 1.「 Java开发规范 」10人小团队Java开发规范参考这篇就够了! 2.「 前端开发规范 」10人小团队前端开发规范参考这篇就够了 ...

  4. 三种嵌入式开发程序架构

    三种必须掌握的嵌入式开发程序架构 前言 reference 前言 在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题.软件架构对于系统整体的稳定性和可靠性是非常重要的,一 ...

  5. 回望云计算发展 重新解读三种云服务

    本文讲的是回望云计算发展 重新解读三种云服务,云计算在非常短的时间里迅速兴起,并在个人和企业用户使用和运营计算的模式上发生了重要的演变.从概念上来说,云计算可以被视为在由虚拟化技术(虽然云计算并不总是 ...

  6. ML之FE:数据处理—特征工程之特征选择常用方法之基于搜索策略的三种分类、基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现

    ML之FE:数据处理-特征工程之特征选择常用方法之基于搜索策略的三种分类.基于评价准则划分的三种分类(Filter/Wrapper/Embedded)及其代码实现 目录 Wrapper包裹式/封装式- ...

  7. 5分钟理解Iass Pass SasS三种云服务区别

    5分钟理解Iass Pass SasS三种云服务区别 其实搞懂这个问题也不难,我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼.中间.低层三大块. 那么我们就可以把Iass(基础设施).Pass ...

  8. Iass、Pass、Sass三种云服务有什么区别

    Iass.Pass.Sass三种云服务有什么区别:                     1.第一层叫做IaaS : Infrastructure-as-a-Service(基础设施即服务)     ...

  9. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

最新文章

  1. 职场经典小故事-II
  2. 数据分析师常用的十种数据分析思路,你都知道吗?
  3. java 执行cd_Java调用Linux命令(cd的处理)
  4. nssl1321,jzoj(初中)2106-买门票【dfs,暴力,字符串】
  5. 1-3 交换变量(算法竞赛入门经典)
  6. CloudNative时代践行DevOps躲坑指南
  7. 产品经理的冬天来了嘛?
  8. Damon Edwards:IT运营是最可预测的DevOps差异化因素
  9. 一个Demo学会用Android兼容包新控件
  10. HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)
  11. 如何在Mac上自定义控制中心
  12. STM8S003F3 使用内置的Data EEPROM的操作接口
  13. Unity3D Editor Undo回退效果实现3 Odin相关
  14. 计算机视觉研究院总结了算法50经典面试题
  15. 计算机管理无用怎么办,win7系统如何将资源管理器窗口中无用的图标删除掉?...
  16. INS防封号技巧,这些注意事项如果你不知道容易被封号停用
  17. Python手写实现LDA与QDA算法
  18. MATLAB中simulink的SIL测试
  19. Linux命令操作——常用解压缩命令
  20. gis如何加入emf图片_投票 | Ansys仿真的艺术图片大赛入围作品巡展

热门文章

  1. [专利与论文-8]:2021年江苏省专业技术人员职称申报详细手册与申请流程信息收集
  2. 小程序scroll-view实现左右联动
  3. 1075 链表元素分类
  4. 服务器是虚拟机好还是单机好,比较VMware和VirtualBox虚拟机的优缺点
  5. 按关键字搜索的步骤教学
  6. 强大的数据分析工具——Pandas操作、易错点、知识点三万字详解
  7. 爬虫入门,带你用30行代码爬取高清美女写真,附安装包+源码
  8. mtk lcm驱动加载流程
  9. siki Unity - A计划 视频
  10. 蓝牙只让搜到耳机,不让搜到手机,同时不让别人搜到自己 O版本