初识大型互联网公司分布式系统架构

1,小型网站

网站之初是由一些容易的技术如: Linux+Apache+mysql+php写出来,

2,网站演变

当项目发展后需要替换一些技术,和框架

当用户数量上来后,导致性能越来越差,越来越多的数据导致存储空间不够(数据或者是文件),这个时候就需要更换CPU,更换内存,更换硬盘。如下图

应用程序服务器:主要处理的业务逻辑,所以需要更换更快的更强大的CPU

数据库服务器:数据库服务器主要处理的是数据的缓存和检索,所以需要更快的硬盘和更大的内存

文件服务器:因为用户量上来了,需要存储的东西多了,所以需要更换更大的硬盘

这样处理的好处是,不同的服务器分担不同的角色,系统的并发处理能力和系统的数据存储空间得到了很大的改善

 

3,数据库分布式

用户再次增长的时候,随着数据的访问量增长时,数据库的压力太大导致访问延时可以在在数据库中加一个数据库

当业务需求(读取/写)不同的时,问题处理方式不同。

这里说的是读取,可以在数据库服务器中加一个,这里缓存的数据读取有两种方式

       本地访问:速度相比远程访问快,缓存空间相比较小

       远程访问:速度相比本地访问慢,缓存空间相比较大

分布式可单独的常用缓存组件有:redis,memcache   (性质一样,都是key和value)

 

4,分布式会有一些安全性的问题

一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找

缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段被攻击等失效,这样在失效的时候,也会给后端系统带来很大压力。这就叫做雪崩。

解决办法:

1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

3:做二级缓存,A为原始缓存,B为拷贝缓存,A失效时,可以访问B,A缓存失效时间设置为短期,B设置为长期

缓存击穿:如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

解决办法:

1:对查询结果为空的数据进行缓存

2:缓存时间设置短一点,或者该key对应的数据增加了之后清理缓存。

3:对一定不存在的key进行过滤。

 

 

 

 

 

 

 

 

 

 

阅读更多

没有更多推荐了,返回首页