微服务架构中的云设计模式-第2部分

这是一系列有关微服务架构中云设计模式的文章的第二部分。 这是转到第1部分的链接:

微服务架构中的云设计模式-第1部分
在本文中,我想写一篇关于最重要的云设计模式以及如何在不知情的情况下进行研究的研究。

补偿交易

也称为“传奇模式”。 这是与软件开发更相关的模式。 这个想法是,对于任何对交易的调用(核心银行业务中的交易就是一个很好的例子),在第一个交易失败的情况下都会调用一个补偿交易。

使用Neflix Hystrix,您可以向Java指定主方法失败时必须调用的方法。 这非常有用,因为使用Hystrix,我们可以遵循断路器模式,并且不会在一段时间内称事务失败。

补偿消费者

几个使用者订阅了相同的主题或队列,而调度程序负责通过某种队列任务分配器(例如Round Robin,广播或其他)将呼叫分配给使用者。这是非常重要的模式,如果您想实现完全针对事件的架构。 使用此模式的产品的一个很好的例子是分布式流媒体平台Kafka。

Netflix :Netflix OSS提供Eureka,这是Netflix的服务发现。 Eureka存储并维护注册到服务名称的微服务与标识该服务的ip和端口的关系。 Eureka和Ribbon将负责通过Zuul(外部网关)和Ribbon(反向网关)将呼叫传播到微服务。

Kubernetes :提供元素Service,该元素存储注册到该服务的所有Pod的私有IP。 稍后,服务及其kubectl-proxy负责将调用重定向到最终的pod。

计算资源整合

将彼此所需的资源放在一起,例如在同一台服务器中。 通过这种替代,服务之间的呼叫等待时间将最小。

Netflix :它没有为此模式提供任何库。 开发人员的职责是知道要在哪个服务器中放置和执行服务。

Kubernetes :您可以选择在机器集群内部的哪个服务器中定位和执行Pod。 如果您未指定服务器,Kubernetes将为您做出决定。

命令和查询责任分离

如果要实现良好的Lambda架构,则是最重要的模式之一。 将负责读取数据的代码和算法与负责写入数据的代码分开。 读取数据要比写入数据快得多,因此,为了最小化客户端等待服务器返回其呼叫的时间,我们向事件总线发送了向事件总线写入数据的事件,例如Kafka或RabbitMQ。 通过此决定,将以不同的方式处理数据写入。 换句话说,在Lambda体系结构中不建议使用CRUD模式。

这种模式是面向软件开发的,因此Netflix和Kubernetes对此模式不提供任何特殊的质量。

活动采购

此模式与先前的模式有关: 命令和查询责任分离。 该模式特别覆盖了写入路径,从而使通过Kafka或RabbitMQ等事件总线写入数据的可能性成为可能。 遵循这种模式,我们可以实现完全面向数据处理的lambda架构,其中将对数据进行大规模处理。 出于与先前模式中所述相同的原因,Netflix和Kubernetes不为此模式提供任何解决方案。

外部配置存储

这种模式建议我们将所有配置文件放在我们的软件包或FATJARS之外,其范围是允许更改应用程序的属性配置,而不必再次打包一个工件。 这不是新模式,因为在旧的Web服务器中,您已经可以将配置文件定位在EAR之外。

Netfix:您可以通过两种方式实现此模式:

  • Netflix Archaius:外部配置文件的netflix解决方案。 Netflix提供了自己的Java库,以Archaius的方式获取道具。 如果要在更新文件时刷新配置道具,则必须使用Archaius获取文件。
  • Spring Cloud Config Server:将所有配置文件放在fatjar之外,尤其是在远程git服务器中,您可以在其中保留属性。 这样,您将所有props文件都位于包之外的同一商店中。

Kubernetes:集群管理器提供工具安全性映射和配置映射。您必须将此文件关联到部署文件,并且kubernetes会自动将此文件作为vm args放入pod中。 它们被设计为两个范围:

  • 配置映射:将配置属性存储在文件中。 当它们作为vm args启动时,它们将提供给Pod。
  • 安全映射:与配置映射相同,但旨在存储用户和参数。 实际上,您必须将密码存储在BASE64中。

重要:如果要查看与容器关联的所有配置属性,只需阅读容器的日志,第一行显示属性。

运行时重新配置模式

此模式与上一个模式有关:外部配置存储,但指定属性自动更改时,应用程序必须刷新其配置属性。 除非在Java应用程序中,否则此模式的行为如下:

Netflix :遵循先前模式的相同论点:

  • Archaius:可让您安排道具自动更新的时间。 必须使用Archaius类进行配置。
  • Spring Cloud Config Server:您必须调用Spring Cloud提供的终结点POST / refresh,以刷新@RefreshScope中的bean。 该bean将采用新的属性配置。

Kubernetes:更新文件时:配置映射和安全性映射,新属性将使用此文件推送到Pod,但是您必须指定Pod才能获取新文件,将这种刷新操作委托给Pod语言。

感谢您阅读本系列文章的第二部分。 我希望这些讲座可以帮助您更好地了解微服务和云架构,以及为什么以我们了解它们的方式进行设计。