为什么在正确的方法后阅读不会产生一致的结果?

时间:2017-05-16 23:55:41

标签: mysql sql-server cassandra akka.net

我正在观看关于Akka.net的这个video,并且发言者说在权利之后读取不会产生一致的结果,因为事件的顺序在网络级别是不可预测的。主持人在本视频中讲述的架构如下:

  1. One Load Balancer
  2. 多个网络服务器。负载均衡器确定要命中的服务器。
  3. 一个数据库服务器(SQL Server)。
  4. 我很困惑为什么单个数据库无法实现一致的结果?如果在写入数据之前放置锁定会不会带来一致的结果?

1 个答案:

答案 0 :(得分:2)

所以我猜你是在谈论Aaron描述大约10分钟的视频。这是场景:

  1. 用户正在点击网站上的内容,我们会触发异步请求以记录点击次数。
  2. 他所描述的场景中不明显的部分是在发送更多请求以捕获用户之前,我们不会等待先前的请求完成点击(想象一下单击页面应用,其中点击不会导致从服务器完全刷新页面)。我们希望捕获所有点击次数。
  3. 我们在服务器上有一些逻辑说,"如果用户连续点击这三件事,做一些冷静的反应......"
  4. 我们在网络服务器上检查我们的状况("用户是否连续点击了这三件事?")将我们刚刚获得的点击事件写入我们的数据库,然后阅读以查看他们是否& #39;已经生成了点击的3件事情的流来做我们的冷静反应。
  5. 问题在于:记录点击的每个请求都可以转到不同的网络服务器,我们在发送更多记录点击请求之前,不会等待前一个点击服务器。因此,在编写第二个或第三个等之前,我们无法保证写入第一个事件的请求已完成。

    例如,由于网络故障,第一个请求可能会延迟(甚至失败!),因此第二个请求可能首先到达我们的SQL Server!这样,当它读取发生的事件流时,它无法意识到已发送请求(但尚未完成)以记录第一个事件发生。

    我认为他试图做的是,面对多个客户端(在本例中,Web服务器)同时写入数据库,你无法依靠,"我先发送了它,所以它将被记录下来#34;无论您是使用DataStax Enterprise,Cassandra,SQL Server,Oracle还是其他什么,都是如此。希望有所帮助!