3)各系统能够分担整体访问流量,解决了并发问题。
4)子系统发生故障,不影响其他子系统的运行情况,提高了整体的容错率。
这种架构的 缺点 如下。
1)拆分后的各系统之间相对独立,无法进行互相调用。
2)各系统难免存在重叠的业务,会存在重复开发的业务,后期维护比较困难。
3.分布式架构
将系统演变为垂直应用架构之后,当垂直应用越来越多时,重复编写的业务代码就会越来越多。此时,我们需要将重复的代码抽象出来,形成统一的服务,供其他系统或者业务模块调用,这就是 分布式架构。
在分布式架构中,我们会将系统整体拆分为服务层和表现层。服务层封装了具体的业务逻辑供表现层调用,表现层则负责处理与页面的交互操作。分布式系统架构如下图所示。
这种架构的 优点 如下。
1)将重复的业务代码抽象出来,形成公共的访问服务,提高了代码的复用性。
2)可以有针对性地对系统和服务进行性能优化,以提升整体的访问性能。
这种架构的 缺点 如下。
1)系统之间的调用关系变得复杂。
2)系统之间的依赖关系变得复杂。
3)系统维护成本高。
4.SOA架构
在分布式架构下,当部署的服务越来越多时,重复的代码就会变得越来越多,不利于代码的复用和系统维护。为此,我们需要增加一个统一的调度中心对集群进行实时管理,这就是SOA(面向服务)架构。SOA系统架构如下图所示。
这种架构的 优点 是通过注册中心解决了各个服务之间服务依赖和调用关系的自动注册与发现。
这种架构的 缺点 如下。
1)各服务之间存在依赖关系,如果某个服务出现故障,可能会造成服务器崩溃。
2)服务之间的依赖与调用关系复杂,增加了测试和运维的成本。
5.微服务架构
微服务架构 是在SOA架构的基础上进行进一步的扩展和拆分。在微服务架构下,一个大的项目拆分为一个个小的可独立部署的微服务,每个微服务都有自己的数据库。微服务系统架构如下图所示。
这种架构的 优点 如下。
1)服务彻底拆分,各服务独立打包、独立部署和独立升级。
2)每个微服务负责的业务比较清晰,利于后期扩展和维护。
3)微服务之间可以采用REST和RPC协议进行通信。
这种架构的 缺点 如下。
1)开发成本比较高。
2)涉及各服务的容错性问题。
3)涉及数据的一致性问题。
4)涉及分布式事务问题。
将一个大的应用系统拆分为多个可以独立部署的应用服务,需要各个服务远程协作才能完成某些事务操作,这就涉及分布式事务的问题。总的来讲,分布式事务会在3种场景下产生,分别是跨JVM进程、跨数据库实例和多服务访问单数据库。
1.跨JVM进程
将单体项目拆分为分布式、微服务项目之后,各个服务之间通过远程REST或者RPC调用来协同完成业务操作。典型的场景是商城系统的订单微服务和库存微服务,用户在下单时会访问订单微服务。
订单微服务在生成订单记录时,会调用库存微服务来扣减库存。各个微服务部署在不同的JVM进程中,此时会产生因跨JVM进程而导致的分布式事务问题。商城系统中跨JVM进程产生分布式事务的场景如下图所示。
2.跨数据库实例
单体系统访问多个数据库实例,也就是跨数据源访问时会产生分布式事务。例如,系统中的订单数据库和交易数据库放在不同的数据库实例中,当用户发起退款时,会同时操作用户的订单数据库和交易数据库(在交易数据库中执行退款操作,在订单数据库中将订单的状态变更为已退款)。
由于数据分布在不同的数据库实例中,需要通过不同的数据库连接会话来操作数据库中的数据,因此产生了分布式事务。商城系统中跨数据库实例产生分布式事务场景如下图所示。
3.多服务访问单数据库
多个微服务访问同一个数据库,例如,订单微服务和交易微服务访问同一个数据库就会产生分布式事务,原因是多个微服务访问同一个数据库,本质上也是通过不同的数据库会话来操作数据库,此时就会产生分布式事务。商城系统中多服务访问单数据库产生分布式事务的场景如下图所示。
跨数据库实例场景和多服务访问单数据库场景,在本质上都会产生不同的数据库会话来操作数据库中的数据,进而产生分布式事务。这两种场景是比较容易被忽略的。
为了让小伙伴们更好的了解本书,在文章最后冰河附上几张精美的图片。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
Docker步步实践
目录文档:
①Docker简介
②基本概念
③安装Docker
④使用镜像:
⑤操作容器:
⑥访问仓库:
⑦数据管理:
⑧使用网络:
⑨高级网络配置:
⑩安全:
⑪底层实现:
⑫其他项目:
5402924)]
⑧使用网络:
[外链图片转存中…(img-TVsOWmtF-1711195402924)]
⑨高级网络配置:
[外链图片转存中…(img-c20hvkgy-1711195402925)]
⑩安全:
[外链图片转存中…(img-HWhHDkdQ-1711195402925)]
⑪底层实现:
[外链图片转存中…(img-yMcbQ2sF-1711195402925)]
⑫其他项目:
[外链图片转存中…(img-adVfpSbG-1711195402926)]