微型与单片服务器架构
我们当前正在开发我们的新产品/项目,它是针对某些特定工业/服务企业的客户端-服务器应用程序。我们正在构建一个服务器(仅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它可能是一个单一的,而是独立的进程。这就是我们所说的微型服务器(类似于微型内核,几乎不需要做任何事情)。服务器实际上只是在侦听和响应,而所有步骤都由不同的进程来处理。 …