我们当前正在开发我们的新产品/项目,它是针对某些特定工业/服务企业的客户端-服务器应用程序。我们正在构建一个服务器(仅C语言和Linux),该服务器在带有Java前端的TCP之上运行自定义协议。我们大约有20%的人员从事编码工作,并且面临着必须在微型或单核内核体系结构之间进行选择的情况。
我知道Micro vs. Monolithic通常与内核体系结构有关,但是我们专门讨论服务器。
为什么要使用自定义服务器而不是现有服务器?
- 我们的UI需求非常重要且非常动态,因此基于Web / Web浏览器的解决方案不合适。
- 统计处理在客户端非常重要,因此,浏览器也无济于事。(当然,我们可以在服务器端进行处理,然后将处理后的数据传递给客户端,但这将意味着服务器上的大量负载和客户端资源的浪费)。
- 此外,利用至少三种技术(JS / HTML / CSS)来管理单个事件,就可以像在沙漠风暴中扫除房屋一样获得整个体验-您扫除n次,灰尘积聚n + 1次。
微型和整体服务器呢?你在说什么?
考虑以下(假设的)客户端请求:
request-id: 123
request-service: HistoricDataSets
request-message: Fetch all records upto the year 2010
收到此类请求后,服务器通常会这样做(为简单起见,我们忽略了诸如线程和派生之类的并发技术):
- 解析请求字符串
- 确定动作(
HistoricDataSets LIMIT Year (2010)
在我们的例子中为Fetch ) - 与持久层(在我们的示例中为Oracle)交互并获取数据。
根据协议格式化数据。例如:
response-id:123
成功:true
响应文本:DataSets用这样格式化的数据响应客户端。
这就是我们所说的单片服务器(类似于单片内核,其中所有OS工作都在内核空间中完成)。
再次考虑到相同的请求,这一次是服务器(我们为简单起见,我们仅假设共享内存为IPC):
- 将请求放入
Parser
进程的共享内存 - 在
Parser
解析字符串,确定任务和指示Executioner
执行任务的过程。 - 在
Executioner
然后将数据传递到Fomatter
方法,该方法中,数据格式化为一个协议串后,返回到服务器。 - 服务器将其分派给客户端(响应)。
当然,相反的Parser
,Executioner
而且Formatter
它可能是一个单一的,而是独立的进程。这就是我们所说的微型服务器(类似于微型内核,几乎不需要做任何事情)。服务器实际上只是在侦听和响应,而所有步骤都由不同的进程来处理。
选哪一个?我们感到困惑!尽管已经尝试和测试了单片服务器(大多数HTTP-Web服务器?),并且易于编程,并且可以很好地处理并发性。表面上看,微型服务器看起来很快速,并且符合UNIX的一个程序可以完成一项任务的原则,但是开发却很复杂,尤其是。注意并发。
问题
-每种方法的利弊是什么(可能是)?
-什么时候使用?(也可以将其解释为一个普遍的问题:何时使用IPC?)
-如果选择了Micro kernel,那么哪些功能需要成为核心服务器的一部分,而没有呢?
相似/相关问题
- 巨大的整体应用的危险
- 外部Vs嵌入式浏览器(切向)
- 将Monolithic应用程序转换为多线程(切线)的建议
一些信息可能会有所帮助:
- 我们的潜在客户可以分为两类:
- 大型:每分钟大约1,700-2,000个请求
- 小型:每分钟大约650-700个请求
- 可以假设每个请求周期(请求和后续响应)的数据量是正态分布的,平均数约为1.20 MB,最坏的情况约为250-300 MB。
- 该产品概念相对较新,但具有影响核心运营的能力,因此我们希望客户预算仅在部署后一定时间(9-12个月)后才具有灵活性,这限制了客户愿意使用的硬件数量。提交,特别是 小的。
- 每个客户都有自己的客户端-服务器堆栈。服务器将在由客户团队管理的客户硬件上运行,而客户将部署在职能员工的计算机上
- 客户端和服务器应用程序都必须进行远程更新
PUSH
如果产品点击,可能非常需要服务器的实时服务!