近期,老是听到同事说同步的事情。当初还不知道“同步”是怎么一回事情,很想弄一个明白。今天我特地去找了一个在公司年代较久的PM了解情况。终于大概明白了“同步”的缘由。
原来,我们的系统因为有大量的并发,大量的客户压力,所以大量的采用了缓存技术,缓存技术本身对于大型系统来说是在正常不过了。但是一般的大型系统因为有分布式计算的需要,所以在缓存的使用上就要有些讲究了,特别是本地缓存。因为本地缓存在分布式计算下往往面临着一个回避不了的问题:“同站点集群的应用程序中,不同数据副本”的问题了。秉着有问题就要解决的基本原则,干脆给这些本地缓存加一个沟通机制,使各个本地缓存通过“沟通”来达到状态相同,所以“同步”就出现了。
“同步”出现的同时,随之而来的也是问题。当“同站点集群”中,机器数量不是很多时,同步还可以维持集群内部的数据同步问题,当同集群下机器数量扩大时,难免会有性能问题。这只是其一。其二,一旦集群中一台机器出现同步问题,那就意味着集群中所有的机器副本可能都有问题,在无法保证副本正确性的情况下,一般我们采取的动作普遍应该是重启了。这样成本就太高了。
那么既要使用缓存减轻数据库压力,又要能取代“同步”的技术有吗?我相信很多公司肯定需要了和我们一样的问题。也有很多牛人也有很多的方案可供选择。我们先分析一下同步的原因“需要同步,是因为我们没有统一的数据副本,没有统一的数据副本,是因为我们把数据都保存在了本地。找到问题的源头了吧?我们如果把数据副本集中式的管理不就什么事情都没有了吗?是的,问题的核心就在这里。业内最普遍的选择是使用分布式缓存。将数据副本集中,统一的管理。现在的分布式技术相对成熟,有大家熟知的memcache等为代表的内存式缓存,如果你有重启机器cache不丢失的需要,那么tt server也是好的选择之一。(ps:听说微软也在写分布式缓存组件?还不知道这个组件有多少的可用度?不过个人还是喜欢将dc和dfs放到linux上。)