javaEE架构

1.传统三层架构(all in one项目)

传统三层架构大致可以分为表现层,业务层和持久层(数据访问层)。其中表现层负责接受请求和转发请求。业务层负责处理请求(注:事务管理,日志记录等AOP类型的操作均封装在这一层)。持久层主要负责数据库与实体之间的操作。

struts典型的mvc三层架构:模型层,视图层,控制层。

SpringMVC中的MVC指的是什么:当一个请求到达服务器时,由中央控制器DispatcherServlet(控制层)查找要访问的controller,然后controller->调用service->调用dao,之后将获取的数据返回到jsp页面(视图层)。

即:严格来说在SpringMVC中控制器是DispacterServlet,模型层是controller(即该模型层又可以看成一个MVC架构),视图层是jsp页面。

另外,利用框架可以简化各层的开发:表现层使用SpringMVC或者struts2,持久层使用Mybatis或Hibernate,使用spring管理表现层,业务层和持久层三层之间的关系。

2.集群架构(属于水平拓展)

由于传统的三层架构中存在许多问题,比如业务层中的不同模块占用系统资源相差太大,导致占用系统资源,可以使用集群解决问题。(相当于备份多个文件,多台服务器反问的是同一个项目资源,集群架构的目的也是为了系统资源的高可用性。)

在集群架构中存在一个重要的角色就是反向代理服务器,他的任务是实现负载均衡,接收用户请求,转发到目标服务器,其中反向代理服务器可以使用nginx实现(简单来说也就是一个实现负载均衡的算法)。

说明:

(1)集群架构相当于把同一个项目部署到多个服务器上(相当于复制备份),然后通过负载均衡服务器nginx将请求分别均衡的派发到不同的tomcat服务器上,实际上不同服务器上运行的是同一个web项目。

(2)大部分能企业通过nginx实现负载均衡算法。

软件层面负载均衡项目:nginx, apache的httpd;

硬件负载均衡器:f5.

(2)已经存在两台服务器,如果其中一台服务器的挂掉了,第二台服务器是正常的状态,负载均衡服务器会将所有请求转到第二台服务器,所以访问第二台服务器没有问题。

(4)如果你在访问第一台服务器时,正在购物,此时已经有多件商品被加入购物车了,且购物车数据是通过session存储的,倘若此时你访问的这台服务器挂掉了,那么负载均衡服务器将你的请求派送到另一台服务器上,那么此时你的购物车里面的数据依然还存在,因为集群的服务器之间的session是共享的。

(5)不同的Tomcat服务器之间如何做到session共享?

tomcat服务器本身就支持session共享,但是需要在集群的tomcat服务器的配置文件server.xml中做相同的如下配置:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"><Manager className="org.apache.catalina.ha.session.DeltaManager"             expireSessionsOnShutdown="false"otifyListenersOnReplication="true"/><Channel className="org.apache.catalina.tribes.group.GroupChannel"><Membership className="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4"port="45564"frequency="500"dropTime="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto"port="4000"autoBind="100"selectorTimeout="5000"maxThreads="6"/><Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"><Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/></Sender><Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/><Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/><Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/><Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>

好处:高可用。

弊端:如果该项目很大,且并发量高,包含多个可拆分的模块(子系统)那就不适用集群架构了。

3.分布式架构(垂直拆分)

分布式架构特点:多个模块完成一个功能,每个模块又可以搭建集群,从而实现高可用。

说明:

分布式架构与集群架构的区别:

(1)集群架构是将同一个完整的项目部署到多台服务器上,通过负载均衡完成请求的派发。而分布式架构是将项目拆分成不同的模块(子系统),然后将不同模块存放在不同的服务器上,所以分布式架构很大的一个特点就是分开还能合作完成一个请求。(注:现在云计算就有分布式的的概念。)

(2)简单的分布式架构仍然存在问题,如果其中一个tomcat服务器挂掉了,则其中一个模块则不可运行了,所以考虑到分布式集群架构,即将一个大系统分成多个独立的模块,部署到多个服务器上,每个模块再考虑存放在多个服务器上形成一个集群,如此才能实现高可用性。如下图:

好处:高可用,效率高。

弊端:模块之间的关系不易于管理。

4.微服务架构(垂直划分)

根据产品的业务功能模块划分服务的种类,客户端可以通过基于HTTP或者RPC的方式调用微服务,目的是为了降低所产生的性能开销。同时每个模块仍然可以搭建集群,从而实现高可用。

3.1 SOA架构

说明:

(1)由于基于soa架构的项目,表现层和服务层是不同的工程,所以要相应一个请求需要两个系统之间进行通信,SOA架构实现系统之间的通信有三种方式:

(2)webservice通信:webservice通信是基于soa介意的,效率低,项目中不建议使用。

(3)使用restful形式的服务:http+json的方式,很多项目中都有应用,但是当服务过多时,服务之间调用关系复杂混乱,不利于维护。

(4)使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计系统之间的调用关系,调用次数。(由于dubbo阿里公司已经停止更新,建议使用springcloud)。

3.2 Dobbo

如下图:dubbo体系结构图:

如下是一个典型的基于SOA电商项目架构图:

说明:如果服务与服务之间存在调用,dobbo可以通过名字去鉴别因为编码时每个模块之间都有调用关系,且该关系也被dobbo掌握。

3.3 SpringCloud

SpringCloud是一个基于 Spring Boot 实现的服务治理工具包;Spring Boot 专注于快速、方便集成的单个微服务个体;Spring Cloud 关注全局的服务治理框架。

解释一下这张图中各组件的运行流程:

(1)所有请求都统一通过 API 网关(Zuul)来访问内部服务。

(2)网关接收到请求后,从注册中心(Eureka)获取可用服务。

(3)由 Ribbon 进行均衡负载后,分发到后端的具体实例。

(4)微服务之间通过 Feign 进行通信处理业务。

(5)Hystrix 负责处理服务超时熔断。

(6)Turbine 监控服务间的调用和熔断相关指标。

SpringCloud和Dobbo的区别:

(1)Dubbo的注册中心可以选择zookeeper,redis等多种;

Spring Cloud:的注册中心只能用eureka或者自研;

(2)Dubbo通过rpc协议远程调用,直接通过socket通信,效率高

SpringCloud通过http协议调用。

JavaEE架构之传统三层架构,集群架构,分布式架构,微服务架构相关推荐

  1. 集群、分布式、微服务的概念及异同

    一.什么是集群? 集群是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事:但是每台服务器并不是缺一不可,存在的主要作用是缓解并发能力和单点故障转移问题. 集群主要具有以下特征: (1) ...

  2. 互联网应用开发架构的演进历程--单体应用->集群->分布式->微服务->ServiceMesh

    1. 单体架构 1.1 单体应用 相对的,要理解什么是微服务,那么可以先理解什么是单体应用,在没有提出微服务的概念的"远古"年代,一个软件应用,往往会将应用所有功能都开发和打包在一 ...

  3. 集群、分布式、微服务概念和区别

    概念: 集群是个物理形态,分布式是个工作方式. 1.分布式:一个业务分拆多个子业务,部署在不同的服务器上 2.集群:同一个业务,部署在多个服务器上 分布式是指将不同的业务分布在不同的地方.而集群指的是 ...

  4. 集群、分布式、微服务的区别和介绍

    目录 一.集群的概念 二.为什么要使用集群? 1.集群的特点 2.集群的优势 3.集群分类及不同分类的特点 三.集群分类介绍 1.负载均衡集群 2.高可用性集群 3.高性能计算集群 四.集群与分布式区 ...

  5. 单体、集群、分布式、微服务概念理解

    单体: 单独的一个项目,所有的模块都会写在一个项目中,并且单独部署在一台服务器上,这就是一个最简单的单体架构的一个模型 集群: 单机处理到达瓶颈的时候,把单机复制几份,分别部署在多台服务器上,集群中每 ...

  6. 需要单机还是集群部署_单机、集群和分布式(微服务结构)的区别

    一.单机 单机就是所有的业务全部写在一个项目中,部署服务到一台服务器上,所有的请求业务都由这台服务器处理.显然,当业务增长到一定程度的时候,服务器的硬件会无法满足业务需求.自然而然地想到一个程序不行就 ...

  7. 浅谈分布式和微服务架构

    文章目录 一.微服务简介 1.微服务的诞生 2.微服务架构与SOA架构的区别 二.CAP理论 三.分布式事务 四.服务拆分 总结 一.微服务简介 1.微服务的诞生   在微服务概念出现之前还有一个概念 ...

  8. 分布式的微服务架构中的核心理念

    [1]微服务是什么 提到微服务,就没法不提到这位"大神"--马丁·福勒,他没有直接给微服务下一个精准的定义,而是给出了微服务特点的描述:根据业务模块划分服务种类. 每个服务可以独立 ...

  9. 创建微服务架构的步骤_插图版:领域驱动的微服务架构设计工作坊实施步骤

    本文参考了我的同事肖然.王威和刘尚奇于2017年7月22日在ThoughtWorks北京办公室所讲授的"领域驱动的微服务架构设计--实战工作坊"的课程内容,同时参考了我的同事亢江妹 ...

  10. 如何利用 “集群流控” 保障微服务的稳定性?

    作者:宿何 微服务的稳定性一直是开发者非常关注的话题.随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战.应用高可用服务 AHAS ...

最新文章

  1. R语言生成螺旋形(spirals)仿真数据实战:螺旋线型线性不可分数据集、螺旋线型不可分数据集可视化、为散点图中的每个数据点添加类标签信息
  2. php 请求转发 重定向,PHP怎么实现页面重定向?(图文+视频)
  3. Apache https服务器配置笔记
  4. CentOS更换网卡设置
  5. rust布料怎么弄_布料“难弄”,你需要从这六方面解决!
  6. mfc 弹簧_弹簧活性样品
  7. Emmet快速编写HTML代码
  8. [论文阅读] TransFuse: Fusing Transformers and CNNs for Medical Image Segmentation
  9. 永中office属于职称计算机吗,2017职称计算机考试WPS_Office检测练习及答案13-中华考试网...
  10. AngularJS+ASP.NET MVC+SignalR实现消息推送
  11. OmniPlan Pro 4 for Mac(项目流程管理)
  12. 51单片机入门——8X8点阵LED
  13. java编写个人所得税_个人所得税JAVA算法
  14. idea中创建scala的worksheet第五章
  15. 端游开发用什么技术可以让用户更短时间内体验游戏?端游分发...
  16. Error: docker-ce-cli conflicts with 2:docker-1.13.1-209.git7d71120.el7.centos.x86_64
  17. TensorFlow : Mac Python3 TensorFlow binary was not compiled to use: AVX2 FMA
  18. 【必备】2015年IT销售顾问和售前工程师必看书单
  19. Android中实时获取声音频率
  20. 组成原理---存储体系

热门文章

  1. JSP-----------简易购物车代码
  2. c语言程序设计陈彦君,2008 年度焦作学科研成果奖励登记表(论文).doc
  3. Python3.x爬虫下载网页图片
  4. 虎从风跃,龙借云行--神行者Wi10无线移动硬盘开启WIFI无线存储共享新时代_MID论坛_太平洋电脑网产品论坛...
  5. 苹果微信多开_怎样才能下载两个微信
  6. sourcetree的使用方法
  7. 史兴国对谈顾振清:NFT艺术有哪些可以抵御加密寒冬的“武器”?
  8. 粮仓分布式多点测温的简单参考方案
  9. vue项目上传图片的方法
  10. 区块链技术以太坊简介