加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

并发 – 没有中央控制点的冗余?

发布时间:2020-12-15 04:58:03 所属栏目:Java 来源:网络整理
导读:如果可以向多个客户端提供服务,如果提供此服务的服务器发生故障,另一个服务器就会占用它 – 没有某种集中的“控制”,它会检测主服务器是否已关闭并将客户端重定向到新服务器? 是否可以不使用集中式接口/网关? 换句话说,它有点像问你可以设计一个节点平衡器
如果可以向多个客户端提供服务,如果提供此服务的服务器发生故障,另一个服务器就会占用它 – 没有某种集中的“控制”,它会检测主服务器是否已关闭并将客户端重定向到新服务器?

是否可以不使用集中式接口/网关?

换句话说,它有点像问你可以设计一个节点平衡器而没有集中控制来指导客户端吗?

解决方法

这个答案概述了网络应用程序的高可用性,而不是Erlang特有的.我不太了解OTP框架中的可用内容,因为我是该语言的新手.

这里有一些不同的问题:

>必须将客户端连接移动到备份计算机
>会话可能包含州数据
>如何检测崩溃

问题1 – 移动客户端连接
这可以通过许多不同的方式和网络架构的不同层来解决.最简单的方法是将其编码到客户端,这样当连接丢失时,它会重新连接到另一台机器.

如果您需要网络透明性,您可以使用某种技术在不同计算机之间同步TCP状态,然后将所有流量重新路由到新计算机,这可能对客户端完全不可见.这比第一个建议要困难得多.

我相信这两者之间有很多事情要做.

问题2 – 状态数据
您显然需要将会话状态从崩溃的计算机转移到备份计算机.这很难以可靠的方式进行,并且您可能会丢失最后几个事务,因为崩溃的计算机可能无法在崩溃之前发送最后一个状态.您可以通过这种方式使用同步调用来确保不丢失状态:

>交易/消息来自客户端进入主机.
>主机更新某些状态.
>将新状态发送到备份计算机.
>备份机器确认新状态的到来.
>主机确认客户成功.

在某些情况下,这可能是昂贵的(或者至少不够响应),因为您甚至在向客户端确认任何内容之前依赖备份计算机及其连接,包括延迟.为了使其性能更好,您可以让客户端在连接时检查备份机器收到的事务,然后重新发送丢失的事务,使客户端负责排队工作.

问题3 – 检测崩溃
这是一个有趣的问题,因为崩溃并不总是很明确.什么事真的崩溃了?考虑一个关闭客户端和服务器之间连接的网络程序,但它们仍然处于启动状态并连接到网络.或者更糟糕的是,如果服务器没有注意到,客户端会与服务器断开连接.以下是一些需要考虑的问题:

>客户端应该连接到备份机吗?>如果主服务器更新某些状态并将其发送到备份计算机,而备份与真实客户端连接,那么会有数据竞争吗?>主机和备用机器可以同时启动,还是需要关闭其中一台机器并移动所有会话?>在这个问题上你需要某种权威,一些协议决定哪一个是主人,哪一个是奴隶?谁是那个权威?你如何分散它?>如果您的节点失去了它们之间的连接但两个都继续按预期工作(称为网络分区)怎么办?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读