这是有关微服务体系结构中云设计模式的系列文章的第三章。 这是该系列第一篇文章的链接:
微服务架构中的云设计模式-第1部分
在本文中,我想写一篇关于最重要的云设计模式以及如何在不知情的情况下进行研究的研究……
medium.com
健康端点监控器
一种模式,该模式指定云Web应用程序,以提供一种方式来获取有关服务的健康状况的信息,这些信息可以是一般健康状况,最后提出的异常情况,或者是该服务与其他集成(例如REDIS)的集成状况。
- Netflix:从小型创业公司到全球娱乐超级大国
- 有问题的主导文化:Netflix的《局外人》
- 选择:Bandersnatch或沉浸式剧院(您有10秒…)
- Netflix和可持续发展怀疑。
- 像MELHORES TEMPORADAS DE 2018
在微服务架构中,重要的是提供此端点以促进服务器群集内自动修复和自动扩展的属性,这要归功于这种健康状况。
服务发现者可以检查服务的运行状况,并且取决于服务的运行状况,他们可以停止对该服务的呼叫传播,直到完全恢复运行状况或将服务替换为另一服务为止。
Netflix :提供了运行时运行状况库,可让您定义一个运行状况端点并在该端点内执行任何操作,但是您可以直接使用Spring提供的端点/运行状况,而无需将其他任何库添加到类路径。
Kubernetes:开箱即用提供了有关执行Pod的节点的一些信息,但是您可以使用Prometheus或Hipster等其他工具来获取有关正在运行的Pod的更多信息。 与Netflix一样,如果您的Pod执行的是Spring应用程序,则还可以使用Spring提供的终结点/运行状况。

静态内容托管模式
将静态内容部署到基于云的存储服务,该服务可以将静态内容直接传递给客户端。 这样可以减少对潜在昂贵的计算实例的需求。 典型的用例是IBM Storage,Amazon S3,Azure Storage等。
此存储服务还以Java或javascript之类的语言提供客户端,以允许调用方下载流中的文件。
自从这种模式以来,Kubernetes和Netflix OSS都没有为该模式提供任何内容。
节流模式
控制范围中体系结构资源的消耗,使体系结构在超出范围时能够响应此事件。
控制应用程序实例,单个租户或整个服务使用的资源消耗。 即使需求的增加给资源带来了极大的负担,这也可以使系统继续运行并满足服务水平协议。
我建议在两个要点上应用此模式:
- API:我们可以在一定时期内定义使用脚本的API使用限制。 例如,一分钟内呼叫不超过100次。 您可以使用限制来限制api的使用或节省脚本计划中API的使用。
- 自动扩展:我们可以定义微服务执行率的限制,集群管理器可以从该限制引发扩展事件。 例如,我们可以配置为:当微服务以80%的执行率运行时,将引发一个事件,并且集群将扩展微服务的新实例。 以相同的方式,例如,如果执行率低于10%,则该服务的一个实例将被杀死,因此微服务将按比例缩小。

Netflix OSS:
- API:您可以在Zuul网关中从头开始开发新ZuulFilters中的节流模式。 但是在这种情况下,我建议您使用其他更高级的API网关,例如Kong或IBM Api Connect(许可产品)。
- 自动缩放服务: Netflix提供了scryer,但它已与Amazon挂钩,因此除非您希望与它挂钩,否则我不建议这样做。
Kubernetes:
- API:提供入口控制器,即Kubernetes的API网关。 该解决方案基于nginx,因此,如果您可以在nginx中开发新规则,则可以在nginx中编写一个节流过滤器。 但是,如前所述,我建议您使用其他更高级的API网关,例如Kong或IBM Api Connect(许可产品)。
- 自动缩放服务: Kubernetes提供开箱即用的自动缩放功能。 得益于这种模式,Kubernetes已成为软件开发范例中的标准PAAS,尤其要感谢其与Google和Openshift的合作,这是RedHat的Kubernetes的定制。
调度程序代理主管模式(分而治之)
当我们有一个复杂的任务可以分解为几个更简单的较小任务时,其中一些任务包括对第三方服务的调用,我们可以使用此模式,建议我们使用以下三个组件:
- 计划程序:负责按预先确定的顺序执行任务。
- 代理:负责封装分解的功能。 每个功能一个代理。 它还负责封装对第三方服务的调用。
- 主管:它监督代理执行的任务的执行,并跟踪任务执行的状态。
此模式与以下模式相关并使用以下模式:
- 重试模式:当主管检测到一个座席失败时,它可以执行一次重试。
- 程序管理器模式:与调度程序的概念有关。
- 补偿交易模式:或传奇模式。 当主管检测到一个代理已失败时,它可以针对此错误调用补偿事务。
Netflix OSS:主管使用Java和Spring Cloud以编程方式解析程序。 代理是通过Ribbon和Eureka或通过Kafka发现的其他服务。 调度程序和座席的呼叫应使用Hystrix完成。 主管还应以编程方式执行。
Kubernetes:与Netflix非常相似,因为这种模式是面向软件编程的。 调度程序和主管将在一个吊舱中执行,代理将在其他吊舱中执行。 调度程序和Pod之间的调用将通过Kubernetes中的服务传播。
对于这种模式,您可以混合使用Hystrix和Kubernetes的服务。
领导人选举模式
由一个领导者和其他领导者以高可用性模式协调,管理和控制集群中微服务执行的任务的运行状况。
Netflix OSS:该套件未针对此模式提供任何解决方案,因为Netflix面向开发。
Kubernetes:使用此模式来选择集群中的一个主服务器,管理其他节点服务器的主机以及运行Pod的多个节点服务器。

管道和过滤器图案
以云方式分而治之。 将复杂的任务分解为可以在不同的微服务中执行的几个更简单的任务,从而提高了性能,可伸缩性和可重用性。
此模式与重试模式,流程管理器模式,补偿事务模式和Scheduler Agent主管模式有关。
Netflix OSS:在不同的服务中开发不同的任务,并通过Hystrix,Ribbon和Eureka控制它们之间的呼叫。
Kubernetes:在不同的Pod和服务中执行任务。