项目架构演进

一个大的java项目架构演进过程(淘宝为例):

一:总架构

二、演进过程

1. 小型网站所有服务都在一台服务器上,俗称All in One

但随着用户越来越多,访问量越来越大,硬盘,CPU,内存等资源开始吃紧,性能满足不了,开始演进:

开始配置文件服务器,数据服务器(配置更好更快更大的硬盘),应用服务器(配置好的CPU、内存),如果文件服务器服务器挂了,还是可以访问数据和应用服务器。继续演进

很多业务数据不用每次都从数据库获取,所以加入缓存(远程单机缓存,远程分布式缓存等),80%的业务访问都集中在20%的业务数据上,俗称二八原则。缓存大大提升了性能。应用缓存的时候需要考虑几个问题:

a.具有哪种业务特点的数据使用缓存  b.具有哪种业务特点的数据使用远程缓存  c.分布式缓存在扩容时会遇到什么问题,如何解决  d.分布式缓存的算法有哪几种,各有什么优缺点

随着访问的qps不断提高,继续演进:

系统加入一个负责均衡服务器,应用服务器配置成了一个集群(cluster),使用各种负载均衡策略解决系统瓶颈;应用负载均衡时需要考虑问题:

a.负载均衡的策略各有哪些,各有什么优缺点,各适合什么场景  

当用户达到一定量时,数据库又会成为一个瓶颈,如何解决?继续演进:

使用数据库的读写分离,应用接入多数据源,Master主库,Slave从库,应用服务加入数据访问模块,写代码的人不会知道数据库的读写分离,那接下来又会引出问题:

a.如何接入多数据源    b.如何完成主从分离  c.数据库访问量大,IO频繁,主从复制,跨机房传输问题,d.应用路由问题等

用户访问持续增多,为了更好的提高服务器的访问性能,架构继续演进:

引入CDN和反向代理服务器,CDN可以很好的解决不同地区访问速度问题,反向代理可以在机房中缓存用户资源,此时用户上传下载文件性能(文件服务器)出现瓶颈,继续演进:

文件服务器演进为分布式文件服务器

a.如何不影响已部署线上的业务访问 (比如如何做到访问一个图片突然访问不到)  b.是否需要备份服务器  c.是否需要域名解析

高大上的项目都是一点一点演进的,这只是一个大题的概念,做一个入门引领还是很不错的!