【问题标题】:Architectural style for hybrid of client-server and publish-subscribe客户端-服务器和发布-订阅混合的架构风格
【发布时间】:2012-10-03 15:22:11
【问题描述】:

我正在为基本的在线协作 IDE 构建 Java 应用程序。在此应用程序中,客户端将命令发送到服务器,服务器将这些命令序列化,然后将结果返回给每个客户端。我正在尝试确定能够最大限度地提高性能、效率和代码简单性的架构风格。

目前,我正在使用客户端-服务器模型和发布-订阅模型之间的一种混合。客户端向服务器发送命令(即编辑代码、远程编译等的请求)。对于特定的客户端命令,在服务器响应命令之前,客户端的文件实际上并没有改变。由于该项目的主要目标之一是 IDE 允许实时协作,因此每次输入的击键都会发送客户端命令。这是客户端-服务器方面。

但是,由于客户端还必须接收从其他客户端转发给它们的事件,因此它不是纯粹的客户端-服务器设置。我正在使用 ExecutorService 类来实现这种发布-订阅行为。

我的问题是 - 是否存在与此类应用程序相对应的特定架构风格?我可以采取另一种方法来实现应用程序目标吗?或者,也许,我已经在使用最好的建筑风格了?

【问题讨论】:

  • 对我来说,他们不是对手。基本上,“客户端-服务器”更多的是关于工作负载分配,而“发布-订阅”是关于消息分发实现。 Quake 服务器也一样 :)

标签: architecture client-server publish-subscribe


【解决方案1】:

混合样式在复杂系统中很常见。最重要的是确保所使用的样式所提升的质量属性相互补充,并且不会产生张力。显然,需要解决造成的紧张局势。

似乎有一个隐藏的质量属性,“在服务器响应命令之前,客户端上的文件实际上并没有改变”,这表明您为什么选择使用除了发布-订阅之外的调用返回样式。我确实担心这里会出现阻塞调用以提高性能,但您还需要担心数据完整性问题。

稍微考虑一下,您似乎可以使用带有正确消息集的纯发布-订阅样式。

就“使用正确的风格”而言——关注您的质量属性,并具体说明您的设计决策促进和抑制的内容。根据您在此处所写的内容,我认为需要充实一些额外的场景才能真正为一种风格而不是另一种风格提供强有力的理由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 2014-11-05
    • 2019-07-01
    • 2013-05-21
    • 1970-01-01
    • 2015-12-16
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多