分布式笔记(一)

1.前言

之前博客中对分布式进行了一个初步介绍,今天也是跟朋友交流中,深刻体会到,现在这个行业中,对各框架的认识使用十分重要。所以也是决心开展几期对分布式的学习介绍,希望能帮助各位看官。

img

2. 传统垂直应用架构

2.1 垂直应用架构介绍

​ 随着公司业务越做越大,应用的规模也是不断新增,如果使用传统垂直应用架构显然无法应对复杂业务。为了应对这些问题,就需要将应用的各个功能模块进行抽取,并将公共方法做成一个单独的公共模块,从而实现程序上的解耦,有效的降低了代码的冗余量。

​ 而传统垂直应用架构改造的就是对应用进行服务化改造,而改造的真正技术架构就是分布式服务框架。

​ MVC垂直架构图如下:

  • View层:也俗称视图,其主要目的就是与用户进行视觉交互,根据数据等变化,对页面进行更新。
  • Controller层:控制层,对页面的Web请求进行分发,对应各接口,从而分配到对应的业务逻辑。当数据发生变化,控制器也会调用对应的视图来显示新的数据
  • Model层:模型层,Model是程序的主要部分,当数据发生了变化,该层需要通知视图。

​ 在MVC架构中,是不包含数据访问层的,这里需要注意。所以平时在开发中,需要我们单独去实现数据库连接池和统一的数据库访问接口从而连接数据库。虽然说着很简单,但是实际做起来相当复杂。程序员是懂程序员的,所以ORM框架就流行起来了,例如Hibernate、Mybatis等屏蔽了底层的数据连接池,同时封装了JDBC,降低了开发JDBC的成本。

在这里插入图片描述

2.2 垂直架构的优缺点

​ 在开发MVC架构应用程序的时候,会统一打成一个war包,然后部署到Web容器中,不同的应用功能也是通过本地API进行调用,不存咋说跨进程的远程服务调用。

采用该模式开发的优点在于,如果项目不大,并且不会后续进行大量扩展,采用垂直应用架构能实现快速开发,成本低的目的。

其缺点也是对应的:

  1. 当复杂应用时,维护成本高,部署效率低,如果服务应用稍微大一点,部署时间也是随之增长的,过程中如果程序编译出错就会导致整个应用程序部署失败。
  2. 代码高耦合,例如一些不同功能模块采用了相似方法,如果没有约束,就会导致本身存在的方法反复编写,导致代码复杂度大大提高。
  3. 系统稳定性不高,项目只会越做越大,那么功能业务也会越来越复杂,对程序和服务器来说都是一种挑战,例如:访客量激增、负载均衡、服务雪崩等。因为垂直架构是将不同应用模块都部署到一个进程中,那么当某个接口出现报错,就有可能导致服务宕机,造成内存浪费,从而导致应用的正常使用。

3.RPC框架

RPC框架的应用,就是为了应对垂直架构应用的增多,将各个核心业务单独抽取出来,公共模块单独设置,实现服务的共享,降低开发和运维成本。拆分出来的应用单独进行部署,接口也是从本地API调用变成跨进程的远程方法调用。

3.1 RPC框架介绍

RPC是一种进程间通信方式,调用远程服务就类似调用本地服务。

3.2 RPC框架理解

RPC框架图如下:
在这里插入图片描述

  • RpcServer:负责导出远程接口

  • RpcClient:负责导入,远程接口的代理实现

  • RpcProxy:远程接口的代理实现

  • Invoker:客户方实现,负责编码调用信息和发送调用请求到服务方并等待调用结果返回

    服务方实现:负责调用服务端接口的具体实现并返回调用结果

RPC框架其核心技术:

  1. 远程代理对象:服务是通过调取本地代理类,从而实现调用远程服务的目的,也就是所谓的JDK动态代理。
  2. 远程服务提供者是需要通过某种方式来提供服务调用相关的信息
  3. RPC通信是跟具体协议无关的
  4. 序列化,因为涉及到远程通信,这里就需要将对象转换成二进制进行数据传输。

RPC服务发布者主要过程:

  1. 与客户端建立TCP连接,接收客户端信息
  2. 将客户端发送的信息反序列化成对象,传送给实现方法,从而进行逻辑运算得到结果
  3. 然后将结果对象序列化为二进制,通过Socket发送给客户端
  4. 远程服务调用完毕后,释放Socket等连接资源,避免资源浪费

RPC客户端本地服务代理的主要职责:

  1. 将本地调用接口转换成JDK动态代理,从而实现远程调用
  2. 创建Socket客户端,根据具体地址连接远程服务提供者
  3. 将远程服务调用所需的参数,接口,方法进行编码发送给服务提供者
  4. 同步阻塞等待服务端返回应答,等应答完毕后返回

3.3 RPC不足

​ 没有任何技术是绝对的,多少存在一些不存,虽然RPC框架能让本地方法调用远程接口就类似于调取本地方法一样快捷,但是也存在一系列问题。

  • 通常开发使用RPC,通过简单配置的URL地址进行远程服务调用,但是当服务复杂且繁多的时候,那么URL配置管理就会变得十分困难,而负载均衡器的单点压力也越来越大。
  • 且当服务数量变多后,开发人员也不清楚服务之前谁先启动睡,例如A需要远程调用B,但是A先启用了,B没启用,那么程序运行到这一块的时候就会出现问题,这里就需要花时间去理清业务调用路径。
  • 消耗性能,因为需要进场序列化和反序列化,那么就会牺牲一定的性能,而且在跨服务调用的时候,受网络延迟的影响。
  • 开发过程中,由于RPC框架的远程调用过程发生在不同的进程和机器之间,就会造成程序调试的困难性。
  • RPC框架往往需要引入三方依赖,如序列化库、网络库等。因此就会增加应用的复杂性。同时不同RPC框架之间可能存在兼容性问题。

4.SOA服务架构

4.1 SOA服务架构介绍

​ SOA是一个面向服务的架构,也是一种设计架构的设计模式,它能将应用程序的功能划分为一系列可重用、自治的、松耦合的服务,这些服务可以通过网络进行通信,以实现业务逻辑为目的。

​ 在SOA服务架构里面,是把应用分解成多个服务,这些服务互相独立。每一个服务对应的是一个特定的业务流程,而这些服务的通信是通过标准的接口进行通信,并且实现了不同平台不同开发语言之间的调用。也正是因为这样的设计,大大提高了系统的开放性,可维护性。而SOA服务架构的核心就是复用和组合,将多个服务进行拆分,从而实现了部分公共服务的复用,避免了代码重复,同时也可以对这些服务进行排序组合,实现更加复杂的业务流程。

​ 其中SOA服务架构中各个服务采用的是接口化进行通信,例如常用的REST协议。

4.2 SOA的优缺点分析

根据SOA服务架构的介绍,可以了解到SOA的优势在于:

  1. 可复用性:将应用差分成多个服务,从而实现部分服务的重复利用。
  2. 灵活性:根据服务的拆分,可以对服务进行单独部署,单独开发拓展和修改,极大提高了应用开发的灵活性。
  3. 组合性:不同服务进行划分,可以创建复杂的业务流程,从而实现特定的业务流程。
  4. 简易维护性:因为服务划分,各个服务之间独立性得到了提高,即使对某个服务进行修改,也不会影响到其他服务的正常使用。

但是SOA服务框架也存在一些问题:

  1. 复杂性:SOA服务框架涉及到了多个独立的服务之间的通信和协调,这就增加了系统的复杂度。
  2. 安全性:因为SOA服务框架中的服务是通过网络进行通信的,这就十分考验各服务之间的通信验证,例如身份认证、授权、加密等安全措施。
  3. 依赖管理:在SOA服务架构中,不同的服务可能以来于其他服务的功能,这种依赖关系需要进行有效的管理和版本控制,以确保系统的稳定性和一致性。

5.微服务架构

5.1 微服务架构介绍

​ 微服务架构是一种将应用程序拆分为一组小型、独立服务的架构模式。每个服务都运行在自己的进程中,并通过轻量级的通信机制进行相互通信。例如HTTP或者消息队列。这些服务都是可以独立部署的。

​ 微服务的特点也随之表现出来

  • 服务拆分:将应用程序拆分多个小服务,这样小服务就只会关注本身的业务,且在部署中,也是单独部署,不会影响其他服务。
  • 低耦合:服务与服务之间通过接口进行通信,从而实现低耦合的关系。
  • 容错性:即使一个服务崩溃,也不会影响到其他服务继续使用。
  • 多样技术:因为服务之间关联不大, 各服务之间可以选用合适自己的技术或者依赖,从而最大程度上发挥技术的优势。

总的来说,微服务架构通过将应用程序拆分为小型、独立的服务,提供了一种灵活、可伸缩和可重用的方式来构建和组织复杂的软件系统。然而,开发和维护微服务架构需要考虑到分布式系统的复杂性和挑战

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

"匠"人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值