Architecture 我应该为这个…使用队列吗。。。?

Architecture 我应该为这个…使用队列吗。。。?,architecture,message-queue,Architecture,Message Queue,我正在开发一个处理“敏感”数据(即信用卡号)的应用程序,为了实现PCI合规性,我们需要确保我们的数据库与公共服务器分开 为了让数据进入并被存储,中间需要有一些东西——我不想让数据直接从Web /应用服务器上写入或读取——所以我想知道队列/工作者体系结构是否合适。 基本流程是: 数据从客户端->发送到API API服务器将数据放入“请求”对象->排队 Worker(在“内部”网络上)接收请求,写入数据库,执行工作,更新数据库,然后将“响应”对象排入队列 API服务器接收此响应对象,然后将响应发送回

我正在开发一个处理“敏感”数据(即信用卡号)的应用程序,为了实现PCI合规性,我们需要确保我们的数据库与公共服务器分开

为了让数据进入并被存储,中间需要有一些东西——我不想让数据直接从Web /应用服务器上写入或读取——所以我想知道队列/工作者体系结构是否合适。 基本流程是:

  • 数据从客户端->发送到API
  • API服务器将数据放入“请求”对象->排队
  • Worker(在“内部”网络上)接收请求,写入数据库,执行工作,更新数据库,然后将“响应”对象排入队列
  • API服务器接收此响应对象,然后将响应发送回客户端
  • 从本质上说,我希望数据能够返回到同一个“请求”,这样整个过程就可以在一个请求中完成,但这似乎违背了消息队列的异步性质,可能更适合作为严格“协议”本身的“web服务”

    编辑我需要补充以下内容:

    • 耐久性-如果队列或任何“崩溃”,它应该能够恢复“排队”项目
    • 安全性-需要保护敏感数据-传输很好,因为我们可以在传输层(TLS、SSL、IPSec)上使用某些东西,但是在发送方(公共网络)存储卡号并不理想
    • 当然是速度

    那么,我是不是走错了路?

    虽然我不能说你应该,但听起来你肯定可以使用一个

    队列将为您提供组件之间的隔离级别。如果这是通过认证所必需的物理要求,则可以显示这两台机器通过特定网络连接,并且只有特定端口打开,等等

    耐久性是队列软件的一个共同特征,传输级安全性也是如此

    速度是一个模糊的问题。一般来说,队列系统中的消息,无论是商业消息还是开源消息(不必说自己的消息),都只需要几毫秒的时间就可以传输,并且具有持久性等特性,这会为加密增加一点额外的开销。假设您的消息粒度正确(即它们不“太小”,协议不“太健谈”),那么您应该做得很好

    有许多商业和开源的消息和队列系统,谷歌是你的朋友找到他们

    左外场的另一种选择是使用现代的休息式建筑。最好充实的例子之一是


    祝你好运

    我可能误解了这个问题,但归结起来,我认为你可能想得太多了。有几种方法可以将web应用程序服务器公开到internet,同时在防火墙后保持数据库的安全,使用某种SOA可以增加隔离,并有望减少某种sql注入攻击的可能性,但这不是自动的。引入一个队列,该队列可以配置为持久队列,为您提供所需的恢复,有些队列可以配置为同步队列,以便满足“一步”操作或至少psuedo一步操作。但事实是,在提交事务之前,当队列中的信息被写入某个地方(通常是数据库或文件系统)时,会添加另一个“安全漏洞”。所以在你假设的发生碰撞的情况下,是的,它是可恢复的,但企业内部有权访问临时存储该信息的文件系统区域的人员可能会查看它。

    纯粹出于兴趣:您正在使用的PCI规范-它是否提供了任何建议支持的方法(或要避免的方法)的指导?感谢您的意见,对DayTrader的引用——看起来像是我可以深入研究的东西,以了解事情可能如何进行。