场景:
我想要一个服务结构应用程序,该应用程序可以在被请求时返回文件,例如[GET] /{fileId}/read
。
假设fileId
与customerId
相关联,例如
=======================
customerId | fileId
=======================
1 | 1
-----------------------
1 | 2
-----------------------
1 | 3
-----------------------
2 | 4
-----------------------
2 | 5
这些是不同的组合(同一fileId
上没有2个customerId
)。
我希望customerId
为比例单位。换句话说,customerId=326
的负载不应影响customerId=913842
的性能,但是customerId=326
的负载可以影响其自身的性能。
我在理解状态服务,可靠的参与者,参与计划等方面经验不足。
我想知道是否可以实现将这些文件存储在节点的物理磁盘上以进行直接访问的方法。看起来像这样:
Node0 Node1 Node2 Node3 Node4
\ / | \ /
Customer1 Customer2 Customer3
\
\
|
|
|
[GET] /3/stream
,文件3
可能直接存储在Node1
的{{1}}磁盘上,因此可以快速流式传输。
这是否有可能,或者还有什么更好的方法?
答案 0 :(得分:0)
我不建议您使用节点磁盘作为服务的存储。
首先,由于包含您的数据的节点可能会丢失\替换,因此您需要处理一种在服务运行的地方备份和还原这些文件的方法。另外,重新启动后节点中的临时磁盘可能会丢失数据(常见的情况)。
第二,要使服务如您所述彼此隔离,您需要使用PlacementContraints将服务固定到特定节点或NodeType,这将降低服务的可靠性,因为它们将依赖于正在运行的节点如果失败,则无法将它们放置在其他节点中。另外,您可能没有充分利用节点资源,因为您需要为客户端分配节点。
第三,要使其真正隔离,您必须将服务直接提供给客户端,并且客户端需要知道如何根据客户ID查找每个服务,从而使客户端通信与您部署服务的方式相结合。集群中的服务。如果您使用代理服务器,则将负载放在代理服务器中。
这些只是我在此设计中看到的几个问题。
有许多方法可以处理文件,但是您并没有明确说明为什么要存储这些文件。我能指出的是:
按照这些指示进行操作: