WEB应用的架构发展:
-
单体架构
在web应用的早期,我们把说有的业务都放在一个项目中。将这个含有所有业务的项目打包成一个War包放在tomcat中。即一个项目就只存在一个服务器中。 下图为单体架构。 解释: 1.一个台服务器中可以有一个或者多个tomcat,我们可以通过修改tomcat的端口号同时启动多个tomcat。 2.一个tomcat中可以有多个war包,即多个项目或多个应用。每个应用之间是相互独立的。应用直接无法通信。 例如,淘宝有一个war包,美团有一个war包。他们都是相互独立的应用。
-
MVC(纵向拆分)和后台三层结构
MVC
由于web应用的耦合性高、业务越多类越多、代码越多不易于开发。后面就出现了MVC架构。 M:Model 模型,专注于数据和业务。 V:View 视图,专注于视图,即界面的结构、行为和美化。 C: Controller 控制器,专注于模型和视图直接的适配和控制。 将web应用的开发分为了3层。 解释: 1.以前在MVC架构的出现,都是在servlet中直接编写前端代码,通过字符拼接的方法得到前端页面返回给用户。(servlet相当于现在的Controller) 2. 现在, - MVC架构中前端页面发起请求 - Controller层接收前端的请求 - Controller处理得到结果,将结果封装成Model(数据模型) - Controller指定View(视图模板),渲染数据。得到前端页面。注:这里的视图模板可以为JSP页面,也可以是其他的视图模板。 - 返回页面给用户。
后台三层架构
后台的三层架构为Controller层、service层、Dao层:
Controller层:负责接收请求、调用服务(service)、返回数据模型(model)和选择视图模板(view)。(可以称作控制器、路由等)
service层:主要负责业务处理。处理数据,调用持久化层(Dao),将结果返回给controller层。
Dao层:主要负责持久化数据,即将数据存储到磁盘、数据库中。
下图为后台三层架构和MVC结构
-
模块化(横向拆分)
为了区别业务和系统功能,就有了模块化。可以将一个系统分为多个功能模块。不同的功能模块负责不同的业务。
-
微服务架构(业务拆分,服务细分)
拆分前:订单--交易--支付--物流--评论(一个购物服务) 拆分后:订单服务、交易服务、支付服务、物流服务、评论服务。将这些服务相互调用实现购物服务的功能。 每个服务专注于提供自己的这个服务。 解释: 1.实际就像将上面单个应用的中模块一一拆分为一个个的服务,微服务(微应用)。
-
分布式
将不同的服务放在不同的服务其或者相同服务器的不同端口(即不同域中)。通过不同域中服务的相互调用实现某项业务功能,就是分布式。 分布式要解决的问题。 - 服务的如何注册? - 服务的如何发现? - 服务间如何调用? - 服务间如何通信? - 如何路由? - 服务突然崩了怎么办? - 并发量太大怎么办? - 等一些列问题
下图为服务间的调用图(未用服务中心):
下面两个图为使用了服务中心的架构图: