如果您正在分析任何给定的微服务体系结构,并且您将服务A和服务B合并在一起,以避免由于B崩溃而导致A无法工作(因为它严重依赖于B,并且根据项目规范,如果B有故障,A就无法完成请求),如果进行了足够的迭代,您不是最终会得到一个整体体系结构吗?
这是我们公司最近提出的一个问题,恐怕他们正在做一个短视的决定。
体系结构摘要:
-这是我们第一个使用微服务体系结构的系统
-我们有一个n
数量的微服务(具体地说,每个微服务都是在集群中的kubernetes pod中运行的JAR)
-每个JAR公开单个服务(例如。auth
、users
、images
...)通过HTTP API
-99%的服务需要用户授权,但不需要身份验证(这是在另一层完成的,我们的服务假定如果请求到达它,请求头包含有效的用户令牌
-为了将用户令牌转换为有形的东西(例如用户信息),我们向users
服务发出请求-目前,每个服务都这样做是为了验证用户是否满足某些特定于服务的条件。
现在,在一次会议上,几位高级开发人员提出了他们的担忧,即如果用户
由于某种原因(不一定是与软件相关的原因,我们假设为这些服务分配的机器有故障)而失败,一切都将停止工作,这使得(在他们看来)这是一个带有额外步骤的准整体架构。为了避免这种情况,他们建议将users
服务转换为静态库,并将其作为依赖项添加到所有需要它的服务中,因此每个服务本身都包含此功能,而不是依赖于远程API。
但这不是更多的规范问题而不是架构问题吗?这并不像Images
API(从技术上讲)没有Users
就不能工作,只是根据当前的项目规范,它没有指定在这种情况下它应该做什么,因此它只是失败,就像服务本身有缺陷一样。
我个人之所以认为这是一个短视的决定,是因为人们可以争辩说微服务之间的任何通信都可以被视为这种风险。这种情况只是一个非常明显的潜在失败点,也是“什么能打破”分析的第一次迭代。如果有足够的考虑,那么如果没有指定“计划B”(例如,如果无法从image
服务获取图像,请使用预定义的占位符图像),那么许多服务使用的任何endpoint都可以以相同的方式处理
我对你的话题有两点评论:
>
re:规范。当一件特定的事情失败时,您定义了一种“替代”行为。
示例:images服务向users服务请求作者信息,以显示有关谁上载了图像的信息。
如果您开始将其用作库,那么您将陷入这样的境地:一旦更改了“用户服务”库,您就必须在所有服务中对其进行升级,否则模式或业务逻辑的差异将随着时间的推移而显现出来。在最坏的情况下,为升级创建顺序依赖项······
我认为您只需要接受您的用户服务是体系结构的关键部分,并真正努力使其高度可用,即确保它至少部署在几个不同的主机上(如果您支持它,甚至可以部署在地区上)
我来自一个角度分明的世界,在那里我可以将逻辑提取到服务/工厂,并在控制器中使用它们。 我试图了解如何在React应用程序中实现相同的功能。 假设我有一个验证用户密码输入的组件(它的强度)。它的逻辑相当复杂,因此我不想将其写在组件中。 我应该在哪里写这个逻辑?在商店里,如果我使用flux?还是有更好的选择?
应用程序服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端。 应用程序服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端。支持 ASP.NET、ASP.NET Core、Java、Ruby、Node.js、PHP 或 Python等主流编程语言,用户可以无需管理底层基础设置,即可简单、高效、安全和灵活地对应用进行部署、
我的应用程序服务无法相互通信。我拥有的是一个由身份验证服务、发现服务器、api网关和商家服务组成的应用程序。我使用eureka服务器和客户端依赖关系进行服务发现。每个服务都用docker进行容器化,我使用K8进行编排。 当我向服务器发送请求时,我得到的响应是: 以下是我的尤里卡属性和K8配置文件: 发现服务器文件 身份验证服务application.properties文件 商户服务 API 网关
我有两个应用程序服务计划在同一地区、同一资源组和同一订阅中运行。我在应用程序服务计划a中有一个web应用程序,我想将其移动到应用程序服务计划b。单击“更改应用程序服务计划”时,门户会告诉我“未找到应用程序服务计划”。 应用程序服务计划a正在标准上运行:1小。应用程序服务计划b正在标准上运行:2大。将应用程序服务计划a更改为标准:1大,在尝试移动应用程序服务时不会显示应用程序服务计划b。 这里有什么
我正在为多租户SAAS模型设计web应用程序,由于一些规定,我们决定每个租户有一个数据库,我们正在考虑为我们的中间件提供微服务。但我有点困惑,微服务架构谈论的是“每个微服务都有自己的数据库”。下面是我的问题 如果我将共享数据库用于微服务,这违反了微服务设计的概念/目的,即它们都应该被隔离,任何更改都应该限于该微服务 我可以想到一个层,它模仿我的数据库表作为DTO,每个微服务都通过这个层与数据库通信