高可扩展性、高性能、大数据量、高并发、分布式的系统架构---memcached浅谈 weir 2015-07-02 15:36:00.0 java,分布式 1581 Memcached又是一个缓存神器,这个东西可以减轻数据库的访问压力,前面我们介绍的varnish是为了缓存静态资源的,而今天要谈的memcached是为了缓存动态资源的,话句话说是为了缓存查询数据库的数据。我们经常用到的缓存框架有哪些,对于java来说用的比较多的应该是ehcache,oscache等吧,但这些都是适用于但系统架构,而memcached则是为了分布式架构而生。作为高访问量的系统来说,经常去查询数据库肯定是不行的,特别是对实时性要求不高的数据,总是去访问数据库这将是一个灾难。 Memcached也是存放在内存里面的,还要做到分布式处理这本身就是一个挑战,这几年又出现了一个有竞争性的家伙redis,我对其不甚了解查了一些资料大概也是做此类方面的工作,对数据库缓存放入内存来提高性能。其实对数据库的数据做缓存限制范围有多少完全取决于实际项目的应用范围和应用场景,什么数据可以做缓存其实跟业务有很大的关系,可能最具共性的就是用户的session信息了包括权限。 Memcached也提供java开发API也很容易与spring继承,单单是从开发来看memcached还是挺简单的,如果要使用到大型的分布式架构中还是有很多挑战的,memcached也是基于配置的各种配置优化参数很多,用好用熟练这都需要实际项目的经验积累和不断的各项参数的调优,这是一个繁琐复杂的过程。 我们再浅层次的了解一下memcached的分布式是怎么实现的,我们知道如果是大型的系统数据库肯定也是要做集群和分布式处理的,各个业务可能分布在不同的数据库里面,而我们还要将memcached也做成分布式的,感觉这个问题很难实现,而memcached所谓的分布式则是分成了服务器和客户端,而真正做分布式的是在客户端,一个memcached的服务端只是做了某个数据库的缓存,这样一来memcached组成的服务端好像也是一个数据库的集群一样,然后客户端就会从这个集群里面查找缓存下来的数据而不是去访问真正的数据库。 我个人在扯一点闲外化,我肤浅的认识像memcached的服务端完全可以由数据库本身来胜任,不知道我这种想法是不是具有可行性,反正是使用内存的数据库软件本省接管了像memcached服务端的工作,再提供一些调用的API作为像memcached的客户端调用一样。这样一来好像memcached就被集成到了数据库软件里面了他就没必要单独存在了,感觉这样是可以实现的,也就是说分布式数据库加上高性能的数据缓存,可能这里带来的问题是缓存和数据库绑定在一起会产生一些问题,想到这里就好了能力有限,如果遇到真正的高手再多多请教了,也真诚的欢迎和大家探讨交流。