谈谈个人对的Java Web项目架构演进的理解

谈谈个人对的Java Web项目架构演进的理解

Java Web项目架构的演进大致经历了这样几个阶段:单体->集群->垂直拆分->SOA->微服务

单体:

顾名思义,这是一种简单的架构,很多web项目初期都是单体架构,因为项目建设初期业务单一、用户量小,单体架构已经能够满足需求。一般表现为一个应用服务、一个数据库服务,二者都是单机的,甚至是部署在同一台服务器。

单体架构的应用主要特点在于业务简单、开发简单、部署简单、维护简单。
单体架构应用的问题在于无法保证系统的高可用,当应用服务出现故障时,整个系统都将不可用。

集群:

集群架构通过将应用程序部署在多台服务器保证了系统的高可用,当一个应用服务出现故障时,其它的应用服务将保证整体系统的正常可用。一般表现为部署2个以上的应用服务,借由负载均衡将客户端请求分发到不同的应用服务上。

集群架构简单直接的通过水平扩展服务的方式解决了单体架构下的高可用问题,同时因为增加了服务数量使得系统能支撑的并发量提高。

垂直拆分

垂直拆分指的是将一个系统按照业务功能模块进一步拆分为多个子系统,比如将一个OA系统拆分为后台管理系统、业务流程系统、邮件系统。多个子系统意味着多个web容器部署,意味着多个进程,意味着多个服务,SOA的概念由此而来。

垂直拆分是从业务的维度出发,不论是单体还是集群架构,都可以按业务垂直拆分,它解决的是业务模块互相影响的问题:在同一个系统中,A模块故障->系统不可用->B模块不可用

SOA

SOA,Service-Oriented Architecture,面向服务的架构,它表达的是一种服务化的思想。
一个系统按业务功能模块拆分成多个子系统后,每个子系统独立部署为一个进程,每个进程可以看作一个服务,整个系统就服务化了。系统服务化后,各个子系统之间因为业务的需要仍然存在依赖关系,比如业务流程系统依赖邮件系统发送邮件,各子系统之间需要进行通信、交互,与拆分前相比,此时的通信是跨进程的,通信依赖的是接口和协议。

接口是采用中立的方式进行定义的,各子系统只要遵循一致的接口,它们的具体实现就可以独立于硬件平台、操作系统和编程语言,可以定制最佳的方案,灵活性提高而耦合度降低。

微服务

微服务仍然是服务化的思想,是SOA的进一步优化,它更加的细粒度。比如后台管理系统、业务流程系统中同时依赖用户的查询操作,如果在这两个子系统中分别实现查询用户,将是一种重复的工作,可以考虑将用户的相关操作从其它子系统中提取出来,作为一个独立公共的用户管理服务,供其它服务调用。

系统按业务拆分的标准、粒度没有明确的定义,暂不讨论。但进一步拆分重组后的服务一定更加轻量,数量庞大,相互调用更加复杂,同时带来了一系列新的问题。如何解决这些问题,可以借鉴大型互联网企业的方案,它们因为自身业务发展,率先走向了微服务架构的道路。例如其中一个核心问题是服务如何治理,在解决这些新问题的过程中形成了一系列微服务的解决方案,这些解决方案都有对应的组件,这些组件合并起来其实就是微服务工具包,比如spring cloud。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值