前言

架构是对项目开发的一种规范,一种设计约束。
我们常常听说的关于 javaEE 的 MVC,其实是一种设计模式,目的是使得 HTML 代码和 Java 处理逻辑分离。MVC 一般用于服务器渲染(SSR),现在流行的趋势是前后端分离,也就是说 MVVC 模式大行其道,各有各的好处吧。

一、传统三层架构

1.1 概念

javaee 技术架构 javaee架构图_微服务

传统三层架构草图

上图是我绘制的该架构草图,可以看见每一层都紧紧联系,不可以跨层调用。

下面是每层的详细解释:

  • Web 层:也称做表现层,该层作用是和用户请求交互,响应用户请求,和 Service 层逻辑交互。
  • Service 层:处理业务,这里直接调用 DAO 层进行相关操作,比如进行复杂的多个表之间的处理操作等等。
  • DAO 层:数据访问对象(Data Access Object)。该层直接连接数据库,实现了ORM(Object Relational Mapping),也封装了对数据库的直接操作。一般而言,一个数据库操作不适宜太复杂,简单的增删改查即可,复杂的交给上层 Service 层处理。

1.2 优缺点

优点:

  • 耦合性低:逻辑上各层都关注各自的点,不存在各自混合的情况,降低了层与层之间的依赖
  • 结构清晰:开发人员可以只关注架构中的某一层;有利于标准化;可以在每层很容易的使用新的实现来代替,比如Web层可以使用 SpringMVC 或者 struts,DAO 层可以使用 Hibernate 或者 MyBatis 等等
  • 重用性高:层次从高到低,可谓是一对多的调用
  • 可维护性高:逻辑清晰,容易维护

缺点:

  • 性能低:往往完成某个简单的持久层操作,需要层层递进才能完成,远远没有直接操作数据库直接。
  • 复杂性高:往往某个修改,会导致级联的操作,为了保证该架构,可能每一层都要修改
  • 开发成本:来自复杂性高

二、集群架构

集群概念

集群,cluster,在数学逻辑上是两个以上的具有相同逻辑的单位的集合。

什么意思呢?比如你有两台数据库,他们具有一样的表结构、触发器等等,他们之间被某个东西操控,那么可以称这些数据库为数据库集群。
同理,多个具有相同功能的服务器的集合,称之为服务器集群。
通俗的来讲,在某种意义上来说,连锁店也能称之为集群。比如 KFC 分店,他们都能提供一样的服务,卖可乐、卖鸡腿等等。

在服务器架构中的应用

服务器集群就是为了分担单个服务器的压力而产生的,我们需要考虑的也就是多个服务器的任务分配,也就是将用户请求分配给谁来处理,
而负责分配的就叫做 负载均衡,它能检测集群中每个服务器的压力情况,有选择的分配任务。

三、分布式架构

分布式概念

分布式,计算机的一种算法。分布式计算是计算机科学中一个研究方向,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件

所以通俗的说,分布式就是将一个问题拆解许多小问题,将算力负载均衡,问题大的就得到更多的算力(在计算机中也就是CPU资源)。

在服务器架构中的应用

我们知道,在逻辑上讲,一个服务器的代码可以分成许许多多独立的模块,比如登陆模块、注册模块、个人信息模块等等。
设想一下在双 11 期间,淘宝的交易模块将会非常沉重,基本每时每刻都有成千上万的交易,甚至某些时刻几百万也说不定。假如我们使用集群,很多模块比如登陆什么的就会白白占用计算机资源,因为此时它根本就没有用到,用到的仅仅是交易模块。
这个时候,分布式就诞生了。它将服务器模块拆分成许多小模块,各自部署在一台服务器上,各自的服务器只专心负责被部署的模块,而所有服务器整体构成了整体意义上的最终服务器。
回到淘宝的交易模块,可以对交易模块进行集群操作,多台服务器只处理这一个模块,这样充分利用服务器的性能,可以极大的缓解交易模块的压力。
当然了,范围缩小一点,即使你只有一台服务器,可是线程很多,你也可以将大部分线程专用于处理交易模块。这涉及到计算机算力的分配,也是分布式的一种小范围体现。

服务器分布式,涉及到协同工作,需要考虑的:

  1. parallelism
  2. fault tolerance
  3. physical
  4. security / isolated

四、微服务架构

微服务是分布式架构的一种,只不过它的颗粒度更小,可以独立部署而不影响其他服务。协同性在微服务上的体现很小。