Java开发网站项目系统架构的演变

Java开发网站项目系统架构的演变,第1张

Java开发网站项目系统架构的演变

简单梳理一下 从古到今(?)项目架构的变化并阐述相应原理

一、单体应用架构(All-In-One)

web项目最早期的使用,也应用于现在一些很小简单项目,将所有的应用,数据库,文件作为一个整体打包部署在一台机器上。

优点:

1.功能集成在一个项目工程中 不容易出现技术难度高的bug

2.架构简单 前期开发成本低 周期短 部署简单 小型项目的首选

3.用人成本低 单个程序员就可以完成整个项目的开发维护

缺点:

1.不适用于大型项目(废话)不易拓展 维护 成本高!

2.系统性能拓展只能通过扩展集群节点,不仅麻烦,也有技术瓶颈

3.系统启动慢:一个启动进程包括所有的功能模块,启动周期重启周期过长

4.系统错误隔离性差,可用性差: 任何一个模块的错误都可能导致整个系统的雪崩

二、垂直应用架构(Vertical Application)

当项目的访问量逐渐增加,将多个功能拆分成不同的应用模块,从而减轻单一服务器的压力,各个项目可以独立拓展,具有一定的灵活性

优点:

1.项目架构相对还是简单,开发成本低,周期短,部署简单

2.通过垂直拆分,服务器压力骤减,负载均衡,可容纳更多的访问压力

3.功能拓展方便

缺点:

1.各个应用模块中必包含许多重复的功能,会导致重复开发工作

2.模块中互相有数据重复,需要互相调用,但是因为垂直架构把系统之间分的太开,调用麻烦

三、分布式SOA架构(Service-Oriented Architecture)

第一个正式提出面向服务的架构,

将重复公用的功能抽取为组件部署在网上,通过调用IP地址,向不同的业务系统提供服务

采用WebService,rpc等方式进行通信

 

优点:

1.将重复的功能抽取为公共服务组件,提高开发效率,减少大量的重复开发

2.减少各个接口之间的耦合性,方便拓展应用

缺点:

1.后期维护难度高,因为互相调用,关系复杂

2.技术难度较大,对于团队要求高

3.对于功能的抽取难易加以界限,在设计架构上较为复杂困难

四、微服务

        微服务架构是一种松耦合的、有一定的有界上下文的面向服务架构。也就是说,如果遇到一个功能变更, 但其要求每个服务都要同时修改,那么它们就不能称之为微服务,因为它们紧耦合在一起;如果你需要掌握一个服务的上下文场景使用条件,那么它就是一个有上下文边界的服务,这个定义一般来自DDD(领域驱动设计)。

 

 

优点:

1.独立性:每个微服务的构建、部署、扩容、缩容、数据库都是独立的,可用性高,一个服务的宕机并不会导致整个项目的雪崩

2.敏捷性:可快速拓展新需求

3.技术栈灵活:不同的开发语言都可以使用

4.高效开发:交给不同的专攻团队节省大量时间

缺点:

1.微服务过多,服务治理成本高,维护成本高

2.难度技术高,对于团队技术要求高

3.数据一致性,模块互相独立,数据库的互相独立导致数据一致性较差  

4.沟通成本高,各个模块的团队需要经常沟通协商功能的开发,例如分解应用的复用功能等等

五丶重要的分布式的CAP原理

CAP理论由 Eric Brewer在ACM研讨会上提出,而后CAP被奉为分布式领域的重要理论。分布式系统的 CAP理论,首先把分布式系统中的三个特性进行了如下归纳:

Consistency (一致性):数据一致更新,所有数据的变化都是同步的

Availability (可用性):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求

Partition tolerance (分区容忍性):某个节点的故障,并不影响整个系统的运行

然而任何分布式系统只能同时满足两点,俗称三进二原则:

CA  :放弃分区容错性,加强一致性和可用性,其实就是传统的关系型数据库的选择

Orarcle 5以后支持集群

MySQL使用MyCat第三方插件

AP   :放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此。最终一致。Eureka,Redis

CP  :放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用。Zookeeper

六、SpringCloud概述

        Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉 了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发具包。

 

Spring Cloud Netflix组件 

  组件名称                      作用

  Eureka                    服务注册中心

  Ribbon                    客户端负载均衡

  Feign                      声明式服务调用 OpenFeign

  Hystrix                    客户端容错保护

  Zuul                         API服务网关

Spring Cloud Alibaba组件

  组件名称                      作用

  Nacos                     服务注册中心 ,配置中心

  Sentinel                  客户端容错保护

Spring Cloud原生及其他组件

  组件                             作用

  Consul                         服务注册中心

  Config                          分布式配置中心 

  Gateway                        API服务网关

  Sleuth/Zipkin                  分布式链路追踪

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5708678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存