当前位置: 首页 > 知识库问答 >
问题:

azure service fabric集群上的有状态微服务默认443端口共享问题

夹谷宜民
2023-03-14

我们有一个部署了多个微服务的集群,具体如下:集群中总共部署了7个微服务,其中3个是无状态微服务,4个是有状态微服务。实现了http.sys来公开安全的endpoint,并希望使用默认端口443公开所有这些服务endpoint。为了区分服务,在URL的。

正确的负载平衡规则和探测允许使用443端口访问,并使用FQDN url访问这些服务。

无状态微服务按预期工作正常。

但是无法使用FQDN url访问有状态的微服务。给出错误为,HTTP错误503。该服务不可用。

如果为每个服务使用特定端口,其工作正常,但我们只需要使用共享443端口进行访问。

提前感谢大家的建议。

共有1个答案

东门奕
2023-03-14

您没有明确说明如何公开这些服务,我将假设您直接从负载平衡器访问这些服务,并访问这些服务打开(和共享)的节点端口443,而不是使用这里描述的反向代理方法。

有状态服务有不同的行为,您在注册这些端口时需要正确理解:

有状态服务可能在同一主机(进程)上托管多个分区,因此每个副本分区可能希望彼此使用相同的端口。在这种情况下,文档中描述的正确方法是注册一个包含分区和副本ID的前缀,如果您遵循了文档,则可能已经注册了如下状态服务:

private ICommunicationListener CreateInternalListener(ServiceContext context)
{
 EndpointResourceDescription internalEndpoint = context.CodePackageActivationContext.GetEndpoint("ProcessingServiceEndpoint");
 string uriPrefix = String.Format(
        "{0}://+:{1}/{2}/{3}-{4}/",
        internalEndpoint.Protocol,
        internalEndpoint.Port,
        context.PartitionId,
        context.ReplicaOrInstanceId,
        Guid.NewGuid());

 string nodeIP = FabricRuntime.GetNodeContext().IPAddressOrFQDN;

 string uriPublished = uriPrefix.Replace("+", nodeIP);
 return new HttpCommunicationListener(uriPrefix, uriPublished, this.ProcessInternalRequest);
}

这将使服务可以通过如下url访问:

{scheme}://{nodeIp}:{port}/{partitionid}/{replicaid}-{guid}

另一个问题是,

  • 有状态服务可能未在负载均衡器后面的所有节点上都可用。
  • 如果它们这样做,并且它们被分区,则每个分区在所有节点上都不可用;
  • 如果分区位于所有节点上,则还必须启用辅助副本读取,否则终端节点将无法打开。

出于这些原因,您应该避免直接公开有状态服务,并将其放在代理之后,就像第一个链接中描述的那样。

 类似资料:
  • 我的应用程序本质上是一堆跨Node.js实例部署的微服务。一个服务可能会写入一些数据,而另一个服务将读取这些更新。(具体的例子是,我正在使用处理管道处理入站到解决方案中的数据。阶段1对相同的数据执行某些操作,阶段2对相同的数据执行其他操作,等等。这是一个相当常见的模式) 因此,我有一个很大的数据集(现在大约250GB,我读到过,一旦数据库变得比这个大得多,就不可能在数据库中引入分片,至少不是没有一

  • 本文向大家介绍ZooKeeper 集群中的服务器状态?相关面试题,主要包含被问及ZooKeeper 集群中的服务器状态?时的应答技巧和注意事项,需要的朋友参考一下 LOOKING :寻找 Leader。 LEADING :Leader 状态,对应的节点为 Leader。 FOLLOWING :Follower 状态,对应的节点为 Follower。 OBSERVING :Observer 状态,对

  • 我试图理解微服务。我想知道如何解决微服务架构中的一对多/多对多关系问题,以及最佳实践是什么。假设我想将学生课程应用程序转换为学生服务,将课程服务和学生服务对话转换为同一数据库中的学生表和课程服务对话课程表。 示例:学生可以注册许多课程,而且许多课程可以有许多学生(多对多关系)。我有2个微服务1:学生服务2:课程服务 学生服务有学生对象 课程服务具有课程对象 我知道学生服务部必须致电课程服务部才能获

  • 在我们公司,我们正在从一个巨大的单体应用程序过渡到微服务架构。这一决定的主要技术驱动因素是能够独立扩展服务的需求和开发的可扩展性——我们有十个Scrum团队在不同的项目(或“微服务”)中工作。 过渡过程很顺利,我们已经开始受益于这种新的技术和组织结构的优势。现在,另一方面,我们正在努力解决一个主要的痛点:如何管理这些微服务之间依赖关系的“状态”。 让我们举一个例子:其中一个微服务处理用户和注册。该

  • 我想部署我的微服务的几个实例,它们使用特定的端口,但使其可伸缩,并且不在任务定义/dockerfile中修复端口。我的微服务可以监听环境变量或命令行中提供的端口。

  • 当前体系结构: 问题: 我们在前端和后端层之间有一个两步流程。 null 微服务2(MS2)需要验证I1的完整性,因为它来自前端。如何避免对MS1进行新的查询?最好的办法是什么? 我试图优化的流删除了步骤1.3和2.3 流程1: null 流程2: 2.1用户X已在本地/会话存储中存储了数据(MS2_Data) 2.2用户X在MS1上保留数据(MS2_Data+MS1_Data) 2.3 MS1使