J2EE企业级应用架构发展
一. 准备工作
1. 本文参考 J2EE企业级应用架构
二. 架构发展
1. 原始版
用户+服务器【单台虚拟机】+数据库【mysql或者oracle】,用户访问量比较少。
特点:单节点【只有一台机器】,几乎无容灾【如果机器挂了只能重启】,负载能力低【访问量比较少】,维护简单【只有一台服务器,所以对应用监控比较简单,数据库管理比较简单,企业部署成本比较低】
2. 动静分离版
加入Nginx,通过Nginx来访问静态资源,用户通过REST API来访问Web应用,通过ajax获取数据,提交数据,极大减少了和用户交互的流量,html、js、css大资源通过Nginx传送给用户,降低交互流量,Nginx还负责均衡,同时增加服务器部署,可以提高访问量。使用了框架spring,Struts,mybatis,节省开发时间。
特点:Nginx访问静态资源,Nginx负载均衡,应用分离,依赖框架,安全性低【暴露REST API】,Session 持久化问题【部署了多台服务器,Session持久化成为问题】。
3. 缓存版
加入高速缓存,支持key-value形式的查询,可以达到6w/s查询量。基于请求的缓存,当http请求发起,先去查询高速是否有结果,没有的话,查询数据库,写入高速缓存,返回给用户;将Session存于高速缓存里头,当多台机器访问应用时,将session的id在高速缓存进行查询。
特点:大量使用缓存、Nginx接收Https、Session 持久化、一致性问题【数据同步问题】、缓存失效问题【设置session失效时间】,虽然还存在后两者的问题,但是极大提高企业负载能力。
4. 分布式服务
分布式架构,拆分业务功能,保证功能不变的情况下,将应用拆分前端web应用和后端服务,后端服务又拆分多个小应用,共同提供服务,将服务封装起来,提供逻辑。web如何将多个应用提供给远程调用,这时候就要提供服务总线\注册中心进行应用管理,例如分布式框架dubbo。
特点:小型机虚拟化【将服务器部署在虚拟机中】、请求处理与业务拆分、应用服务化、同步异步拆分、数据库读写分离【查询映射到读库上】、运维难度大大增加。消息中间件:例如mq、Metaq中间件,将大量异步操作发送到中间件,后台均匀消费这些请求,同步异步拆分提升吞吐量。调度中间件:ScheduleX。
缺点:当出现高并发的时候,对于小型机压力很大。
5. 弹性计算
采用Docker容器级虚拟化,使得服务器资源实时分配。当负载大时候,docker虚拟并启动应用。新增Hadoop日志搜集平台,将日志写入日志平台。通过与Docker配合极大提高负载性能。
特点:容器级虚拟化、应用资源动态分配、离线数据采集分析系统、数据库读写分离、硬件成本下降、异地容灾。数据库新增了于hadoop进行交互,极大提升了性能。