vlambda博客
学习文章列表

轻松理解Spring、RPC、SOA、集群、分布式、kafka相关概念


目录

1、Spring
2、RPC(远程过程调用/Remote Procedure Call)
3、SOA(面向服务架构/服务治理/Service Oriented Architecture)
4、集群、分布式
5、MQ(消息队列中间件/Message Queue)
6、kafka

来源: blog.csdn.net/qq_40798777/article/details/104298804



1、Spring

Spring 是一个开源的轻量级的应用开发框架,目的用于简化企业级应用程序开发,减少侵入。控制反转是Spring框架的一个核心设计模式,可以将组件的耦合度降至最低,即解耦。便于系统日后的维护和升级。Spring 为系统提供了一个整体的解决方案,开发者可以利用它本身提供的功能外,也可以与第三框框架与技术整合应用,可以自由选择哪种技术进行开发。Spring 框架提供约20个模块,可以根据应用程序的要求来使用。

核心容器 由 spring-core,spring-beans,spring-context,spring-context-support 和 spring-expression(spEl) 等模块组成,他们的细节如下:

  • spring-core 模块提供了框架的基础部分,包括 IOC 和依赖注入功能;

  • spring-beans 模块提供 BeanFactory,工厂模块的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦;

  • context 模块建立是在由 core 和 beans 模块的基础上建立起来的,它以一种类似于 JNDI 注册的方式访问对象。Context 模块继承自 Bean 模块,并且添加了国际化、事件传播、资源加载和透明的创建上下文等功能。Context 模块也支持 Java EE 的功能,比如 EJB、JVM 和远程调用等。ApplicationContext 接口是 Context 模块的焦点。spring-context-support 提供了对第三方库集成到 Spring 上下文的支持,比如缓存(EhCache、Guava、JCache)、邮件(JavaMail)、调度(CommonJ、Quartz)、模块引擎(FreeMarker、JasperReports、Velocity)等。

  • spring-expression 模块提供了强大的表达式语言,用于在运行时查询和操作对象图


数据访问/集成层 包括 JDBC(Java Data Base Connectivity),ORM(Object Relational Mapping),OXM(Object XML Mapping),JMS(Java Message Service)和事务处理模块,它们的细节如下:

  • JDBC 模块提供了 JDBC 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析;

  • ORM 模块提供了对流行的对象关系映射 API 的继承,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 sping 的其他功能整合,比如前面提到的事务管理;

  • OXM 模块提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等;

  • JMS 模块包含生产和消费消息的功能;

  • 事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理


Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:

  • Web 模块提供面向 Web 的基本功能和面向 Web 的应用上下文,比如多部分(multipart)文件上传功能、使用 Servlet 监听器初始化 IOC 容器等。它还包括 HTTP 客户端以及 Spring 远程调用中与 web 相关的部分;

  • Web-MVC 模块为 Web 应用模型视图控制和 REST Web 服务的实现;

  • Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式;

  • Web-portlet 模块提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。


框架可以理解成由别人包装好的一系列工具,你拿过来就能用。好比买房子时,需要选择一套满意的户型,在这个户型的基础上,再去买家具进行装修。在这里,框架就好比户型,由别人规定好的,你只要选择你想用的那个框架,然后拿过来用即可。


为什么要使用框架?

因为方便,高效,能够屏蔽底层细节,以及提供一种开发的思想。还拿上面的房子的例子来说,各个售楼部的几种户型都是经过专业设计师设计,结合多方面因素定下来的。我们没有那么多的专业知识,自己设计房子的户型相对来说也不太实际。因此为什么使用框架这个问题就类似于买房为什么不自己设计户型,而选择别人设计好的户型。因为方便,因为效率问题。设计户型他们更专业,更合理,我们直接用。


Spring框架正式因为Java应用开发的复杂性而创建的,大程度减少了Java应用开发工作量,同时降低应用的维护成本。


        IOC:控制反转,是一种设计模式。IOC 控制反转就是将某一接口具体实现类的控制从调用类移除,转交给第三方,即 Spring 容器;一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器控制依赖;第二层是依赖注入:将相互依赖的对象分离,在 Spring 配置文件中描述他们的依赖关系。他们的依赖关系只有在使用时才建立。


        AOP:面向切面,是一种编程思想,OOP 的延续。将系统中的非核心的业务提取出来,进行单独处理。在业务系统中除了要实现业务代码外,还是实现权限拦截、性能监控、事务管理等非业务功能。通常的做法是将非业务代码穿插在业务代码中,从而导致业务组件和非业务组件的耦合。AOP 面向切面编程,就是将这些分散在各个业务逻辑代码中的非业务代码,通过横向切割的方式抽取到一个独立的模块中,从而实现业务组件与非业务组件的解耦。


        Spring 中的 IOC 和 AOP 都是为了解决系统代码耦合度过高的问题,使代码重用度高、易于维护。比如事务、日志、安全等。



2、RPC

程过程调用区别于本地调用,远程过程调用针对于存在调用关系的两个服务处于不同的服务器。 通过 RPC 服务,使得跨服务器间的调用速度如同本地调用一样。 RPC 服务处在会话层,相对于http请求,少了表示层和应用层的解析和封装(可参考OSI七层网络模型)因此,比 http 连接更高效。 RPC 服务建立 socket 连接后,通过序列化和反序列化进行跨服务器间的信息传递。 建立 socket 连接的速度与序列化、反序列化的效率成为 RPC 性能的衡量标准。



3、SOA

SOA 致力于解决多服务凌乱问题以及复杂的数据服务(一般用于大型项目)。随着项目复杂程度的提高,服务器类型一般由集成服务器转向分布式服务器,将一个系统拆分为不同的子模块,服务之间相互调用。而随着项目的迭代升级,服务、功能的相互交互及相互调用会非常复杂,调用关系混乱较难维护。因此,SOA 应运而生。SOA 建立了“数据总线”的概念,类似于阿里的dubbo、zookeepper 注册中心,通过注册的形式简化调用关系,实时调度,提高服务调用效率。



4、集群、分布式

当一台服务器的性能不足以支持处理某些任务时,需要添加一台或多台服务器,共同处理该任务,而这些服务器的工作内容、过程完全相同。此时,服务器的集合就叫做集群。当一台服务器出现问题时,其他的服务器仍能正常工作。而分布式可以理解成:这些服务器由原来处理相同的任务变为分别负责不同的功能模块,各服务器单独负责特定的模块和功能,这些功能整合后可以协同完成某项工作。分布式服务的质量取决于三个要素:数据一致性、可用性和容错性。数据一致性和可用性往往不能兼顾,有兴趣的可去深入了解分布式的 CA、CP 原则



5、MQ

首先说一下 MQ 的特点:异步、削峰(缓存)、解耦。


异步:比如从 A 执行到 B 需要串行调用 A1,A2,A3,...,An 多处逻辑,调用链很长,而引入 MQ 后,调用关系可转变为A -》 AA -》 B,AA 则为消息队列,其中通过消息队列,A1,A2,A3,...,An 可并发执行。这就缩短了串行服务的调用链,等同于缩短了时间。而不使用多线程解决串行调用的原因就在于多线程代码的耦合度较高,且代码不好维护


缓存:当同时存在大量的请求时,MQ 可起到缓存、削峰的作用,将请求发送到队列中,依次处理,避免服务器同时处理大量请求,cpu 不够导致服务器崩溃



6、kafka

kafka 是分布式的基于发布/订阅模式的 MQ(消息队列),涉及的主要元素有:生产者、消费者、broker(一个独立的kafka服务结点)以及 Zookeeper。


生产者、消费者通过 zookeeper 上面的注册信息,寻找到对应的 broker 上,进行生产、消费操作。


消息队列分为两种模式:点对点模式、一对多模式(发布/订阅模式)。点对点模式下,生产者生产信息后,信息伴随着消费者的消费操作而消失;发布/订阅模式下,信息并不会因为消费者的行为消失,而是通过设立消息的有效期来限制。