以新浪微博为例,最开始是一个前端和一个后端开发出来的一个应用,特点就是集中式应用,数据库,应用程序,文件系统部署到一台机器上.
image.png慢慢的随着产品的推广,用户越来越多了,单台服务器的CPU,内存,带宽跟不上了,于是就把应用程序,数据库和文件系统分开进行部署,部署到三台机器上,于是又可以用了.
image.png后来用户更加多了,尤其是访问首页的,次数越来越多,如果每次都去读取数据的话,一定会消耗大量的时间,系统的瓶颈就卡在读取数据库上面,因为对于一些不变化的数据,我们就不读数据库了,存入缓存,一开始是存入到本地缓存,后面存入到其他机器上,形成分布式缓存.
image.png后来进来了很多明星,带进来一大波粉丝,用户量越来越大,处理用户的请求一台机器已经无法满足了,我们需要进行横向扩展,于是就使用nginx进行反向代理,横向部署多台应用服务器,去处理用户的请求.
image.png后来粉丝越来越多,一开始主要是明星发微博,用户看微博,后来用户也想要发微博了,单台数据库无法承载这么大的压力.于是数据库分为多台,一主2从,主从复制,主数据库只用于写入微博,从数据库只用于读取微博.
image.png再到后面,公司越做越大,与外界的合作越来越多,业务越来越复杂,实现的业务流程越来越多,为了方便合作和效率提升,将应用程序拆分多个模块,形成多个微服务,微服务之间通过消息队列和NOSQL进行解耦,并且配置单独的搜索引擎来帮助用户实现搜索的需求.
image.png小结: 以前的系统都是做给超市,银行,饭堂里面的人用的,用户不是很多,但是随着用户量增加,一开始是进行垂直扩展,就是增加服务器的性能,比如银行就是这么干的,但是随着用户增多,以及硬件的增长极限,开始进行水平扩展,更加的经济和实惠.海量用户的并发访问是软件分布式架构成长的驱动力.
网友评论