我一直在想,当我试图登录我的Gmail或Facebook等时,登录操作是如何执行得如此之快的。我的意思是,以谷歌为例,它有超过一百万台服务器,而我几乎需要2-3秒才能登录。我现在不会对这么大的数据做任何事情,但我可能以后会做,所以我想在我有时间的时候现在就揭示这项技术。
请阅读下面的内容,这样我就知道我的理论是正确的(至少部分是正确的)。我的想法是,这些服务器分布在各个国家。假设有100台服务器在英国。当我尝试登录时,它只知道我在哪里,并将我的用户名和密码传递给这些服务器。第一个在数据库中找到我的服务器将会响应。
这种方法切断了要检查的大量数据。例如,当我搬到美国时,它如何知道首先在哪里搜索?...and服务器如何处理同时登录的成千上万的用户?
发布于 2012-03-25 22:24:59
谷歌将数据复制到全球几乎所有的数据中心。这是谷歌速度的主要原因。如果你从英国搬到美国,这些数据在美国是不可用的。当您第一次在美国登录时,将调用最近的服务器,该服务器反过来查找登录历史记录并复制来自英国服务器的所有用户数据。
注意:和你一样,即使是我的理论也没有得到证实,因为谷歌从来没有公开过这些机制
发布于 2012-03-25 22:16:44
我不知道他们实际上是如何做到这一点的,但有很多技术可以分散负载。一种特别简单的解决方案是使用用户名的散列来定位保存凭据的分区。
如果你想对认证服务器进行地理定位,你可以在GeoIP数据库中查找原始IP,比如MaxMind的。当找到本地服务器时,如果它没有用户的证书,它可以一次性地从中心场缓慢获取。
发布于 2012-03-25 22:23:15
Marcelo的分区是正确的。大多数现代大型数据库都支持以这种方式拆分数据。
为了回答问题的另一部分,您的数据可以在默认情况下复制到多个物理位置,以实现冗余。在您的IP上使用地理查找可以提示将查询发送到最近的服务器。或者,您可以使用map-reduce类型的解决方案-将作业发送到几个服务器,然后只接受最先返回的答案。
确保从RAM (通过缓存)而不是从持久存储数据库的磁盘来满足您的查询,往往会产生显著的效果。
https://stackoverflow.com/questions/9860757
复制相似问题