TL;DR服务应该选择将偶尔需要的数据保存在其本地数据库中,还是每次都从数据来源的服务请求数据?
让我们举一些Web商店/订购应用程序的通用示例。服务A是一种用户会话管理服务。它处理用户正在做什么、他可以做什么等的业务逻辑。用户可以创建自己的衬衫以供购买。服务B是一个数据聚合器,包含大量库存和可用内容。
用户开始创建衬衫,因此service a请求service B提供可用的样式/颜色。服务B向下发送一个可能的选择列表,然后服务a为用户显示该列表。然后,用户选择一件衬衫,对其进行自定义,然后换上一件新衬衫。同样,服务A必须向服务B请求可用的样式/颜色。
现在让我们假设在用户会话的生命周期内,这些样式/颜色不会改变,我们知道这将是一遍又一遍地检索相同的数据。不仅仅是这个用户,而是所有用户。所以在这种情况下,由于样式/颜色实际上是服务B域的一部分,它们应该留在那里并驻留在那里,或者建议阻止所有这些不必要的调用,并在第一次请求时(暂时)将会话生命周期的数据保存在服务A中,以防止聊天服务。
这是一个过于简化的示例,但问题仍然存在于现实世界中。哪种架构这种设计的方式更受建议?这通常适用于例如,当一些相当静态的数据通过某些服务时,并且该服务在这些事务的生命周期内会再次需要这些数据几次。因此,我不确定服务是否应该在生命周期内暂时保存它,因为知道数据不会更改,或者不关心它是否在生命周期内更改,或者选择更多的聊天服务并每次都继续请求。
TL;DR服务应该选择将偶尔需要的数据保存在其本地数据库中,还是每次都从数据来源的服务请求数据?
我不想这么说,但这要看情况而定。这取决于您的业务需求。这取决于您是否想要一个rezilient系统。如果service B
不可用,您希望service A
如何表现?您有两种选择:
>
您希望服务A拒绝工作,因为它无法从服务B获取新数据。如果数据发生了很大变化,或者服务a中使用的数据必须始终保持超级新鲜,则可以执行此操作。
您希望Service A继续工作,可能需要通知用户数据可能不新鲜。在这种情况下,您应该通过侦听事件或缓存将数据从服务B复制到服务A。
我必须赞扬你写得很好的问题,但答案当然在很大程度上取决于你所处理的业务逻辑。这个问题与最终的一致性(一些非sql数据库(如Couchbase)提供的属性)有关。
归根结底,这是一个权衡的问题:检索最新数据的“成本”与使用现成的陈旧数据的成本。
一些因素包括:
>
数据多久更新一次?
更重要的是,当您使用过时数据时会发生什么(业务逻辑方面的)。您的用户/应用程序是否可以接受?
每次获取新数据会对您的系统产生什么影响?这样做的基础架构成本是多少(以机器/金钱为单位),以及它会导致什么样的延迟?
有一种不同的解决方案可以“回避”这种权衡。
您的问题表明您更多地采用了“旧的”“面向服务的”方法。也就是说,服务基本上是提供数据的面向数据的服务。如“库存”、“会话”、“客户”等。
另一种方法是根据业务领域分解应用程序,这与DDD有界上下文非常相似。这会导致完全不同的架构,其中数据不会与处理它的函数分开。有点像面向对象。
这将导致Shirt Configurator拥有自己的数据库,其中包含所有相关信息,包括会话、库存等。此外,还包括UI。
另一个应用程序可能是Checkout。签出可以是一个完全独立的应用程序,只需将URL返回Shirt-Configurator以获得正确的演示文稿。Checkout应用html" target="_blank">程序不必调用甚至不知道Shirt-Configurator。
等等
有关这种架构风格的更多信息:http://scs-architecture.org/
Kubernetes 设计之初就是按照 Cloud Native 的理念设计的,Cloud Native 中有个重要概念就是微服务的架构设计,当将单体应用拆分微服务后, 随着服务数量的增多,如何微服务进行管理以保证服务的 SLA 呢?为了从架构层面上解决这个问题,解放程序员的创造性,避免繁琐的服务发现、监控、分布式追踪等事务,Service mesh 应运而生。 微服务 下图是Bilgin Ibr
我读了一些文章,看了一些视频,但在为这些微服务提供服务方面,没有找到具体的建议。我的理解是,他们应该使用自己的应用程序服务器。 我的问题是它们应该部署在不同的服务器上,还是没关系。 当它们在同一台服务器(计算机)上提供服务时,不会有端口冲突吗?
在所有情况下,重要的是,如果允许用户Y访问该公司,微服务本身仍然必须检查是否允许用户Y对该公司进行某种操作。因此,此用户到公司的匹配仅用于确保用户对公司有访问权限。 我并不是真的很喜欢这些方法,因为将消息放入队列(1)意味着每个服务都必须被告知一个更改。使用Zuul验证(2)也不是真正实用的,因为它应该只是一个网关。
让我们讨论一下微服务环境的体系结构。我们正在公司内部进行讨论,我想得到一些反馈。我认真考虑的是编排层(代码复制、更多移动部件改变api)。 网络应用- 原料药- 在这种情况下,服务不允许相互对话。业务流程层中的聚合服务 网络应用- 原料药- 这里允许服务相互对话,这里存在聚合服务。 账单属于哪里
8.10. 示例: 聊天服务 我们用一个聊天服务器来终结本章节的内容,这个程序可以让一些用户通过服务器向其它所有用户广播文本消息。这个程序中有四种goroutine。main和broadcaster各自是一个goroutine实例,每一个客户端的连接都会有一个handleConn和clientWriter的goroutine。broadcaster是select用法的不错的样例,因为它需要处理三种
本文向大家介绍详解Java 微服务架构,包括了详解Java 微服务架构的使用技巧和注意事项,需要的朋友参考一下 一、传统的整体式架构 传统的整体式架构都是模块化的设计逻辑,如展示(Views)、应用程序逻辑(Controller)、业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为一个具体的应用。如图所示: 系统的水平扩展 如果要对系统进行水平扩展,通常情况下,只需要