1.单点集中式web应用
很多中小型企业的中小型项目都是基于这样的架构,架构很简单,一般后台管理应用为主,比如CRM,OA系统等。数据库以及war包都是部署在同一台服务器上的,文件上传也是上传到本台节点。
特点:所有资源都部署在同一台电脑上,并发量小,适用于小项目。便于发布,运维工作量小。不利于扩展,项目会越做越大,war包体积也会越来越大。如果服务器宕机了,整个应用都无法访问,必须人工恢复。
2.应用服务与文件服务以及数据库单独部署
随着时间的推移,数据库以及文件的数据量增加,那么服务器的容量是有限的,原有架构已经不足以支撑,此时必须要把web应用与数据库还有文件服务拆分为三个独立的服务,以此来避免存储瓶颈。
特点:三个服务单独部署,不同服务器宕机,其他的仍然可以使用。
3.引入缓存改善读取性能
当请求并发量上去后,单台tomcat不足以支撑应用的时候,此时我们引入缓存来增加用户读取效率,把大量用户的请求引导至缓存中,而写操作仍然直接写到数据库中。
特点:把数据库中的一部分数据放入缓存,减少数据库压力,提高并发能力,减少数据库压力。
4.引入集群,使得web服务器多机负载均衡
目的是为了减少单台服务器的压力,可以部署每台tomcat来减少单台tomcat的压力,也以此作为分流,常见手段nginx+lvs,需要注意的是,要把有状态session改成无状态session,使用redis或者spring-session
特点:多台服务器构成负载均衡,减少单机的负载压力,避免单机心有余而力不足的情况发生。
5.数据库读写分离
读写请求分离,互相不影响。
连接池提供的连接数是一定的,往往用户的读请求远远大于写请求,他们会相互竞争,在这个时候往往写请求操作就进行不了,出现了数据库存储瓶颈。
特点:数据库读写分离,提高数据库的存储性能。
6.提供反向代理以及CDN加速服务
目的是可以加速网站的访问速度,尤其加速静态资源,因此可以不必向我们的服务器读取静态数据。
7.分布式文件系统和分布式数据库
分库分表,经统计与监测后数据对某些表有大量的请求的时候,为了减少压力,我们需要做分库分表。
根据业务竖向拆分或者横向拆分数据库表,常见拆分user表,order表。
竖向拆分:比如order表中某些字段经常访问,那就把这些字段归在一个表,其他不经常访问的字段归在另外一个表,也就是主表和从表,并使用外键关联
横向拆分:根据某个时间点或者业务点来拆分,比如3个月内的订单数据放在order_a中,3个月-1年内的数据放在order_b中,1年-3年的数据放在order_c中,3年前的订单数据放在order_d中,这样拆分每张表的数据体积减少,增加查询效率。当然除了根据时间还能根据地域来做拆分,具体要根据各自的业务进行。