精通Java微服务

news2024/11/16 1:30:42

第1章

微服务是在面向服务架构SOA的基础上进一步发展而来的,它比SOA做得更加彻底,其单体服务被更加彻底地划分,最大限度地实现了服务的单一职责。

1.1.2互联网

即计算机网络,连接了世界上数以万计的计算机设备(可联网设备),这些计算设备包括桌面计算机、Linux服务器(工作站)以及其他新兴的计算设备(如智能手机、智能手表、平板电脑等)。

1.1.3 网络应用架构

互联网环境下,诞生了新的应用软件架构,即基于B/S和C/S架构的应用,这两种应用的共同点是均需要网络通过向远程服务端发送请求获取数据以及相互通信。

C/S架构的软件需要在宿主机上安装才能使用,而B/S架构的软件只需宿主机接入互联网且拥有浏览器即可使用。

1.2SOA与微服务

SOA(面向服务架构)是一种软件架构、一种软件设计方法。SOA软件系统中包含了多个服务,并且服务与服务之间通过相互依赖最终提供一系列功能,一个服务通常以独立的形式存在于操作系统进程中,各个服务之间通过远程调用进行通信。

微服务架构和SOA架构类似,是在SOA基础上进行了改进,微服务架构的核心是业务需要彻底组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的服务,这些服务可以持续开发、持续集成、并完成自动化部署。

1.3 远程过程调用 

微服务中单体服务间的通信是通过远程过程调用RPC实现。

基于HTTP的远程过程调用传输的数据类型可分为两类:即XML格式数据和JSON格式数据。

TCP是一种可靠长连接

HTTP是短连接,连接一次,发送一个数据包,然后断开连接。

客户端向服务端发起的请求携带4部分数据,即请求行、请求头、空行和请求体。

第2章 Spring及Spring Could

目前微服务方案应用最广的架构即Spring体系,Spring体系包含了构建微服务所需的所有组件,如Spring Cloud、Sring Boot。

2.1Spring

Spring是基于Java编程语言的框架。Spring旨在使Java编程更加快捷、易用、安全,Spring正是由于聚焦速度、简单和效率,成为世界上应用最广的Java框架。

2.1.1 为什么选择Spring

Spring是Java后台开发人员的福音,有了Spring框架,对现代开发者而言应该是有了SpringBoot后,可以快速迭代,满足业务需求。

1.开发者的信赖

Spring发展至今备受开发者信赖。互联网发展至今,阿里巴巴、谷歌、微软等著名公司对Spring均有贡献,开发者众多,发展非常迅速且稳定。对于消费者,他们虽然并不知道自己用的服务是由Spring体系提供的,但是他们享受到了Spring在线上购物、流媒体电视等领域带来的良好的体验与服务,反观这些良好的效果,开发者更加信赖Spring,正如“滚雪球”一样,Spring的受众越来越多。

2.灵活

Spring具有多种可插拔的组件及第三方库,使其具有足够的灵活性,通过组合不同的组件(包括第三方库),开发者可以构建任何可以想得到的应用,如构建安全的Web应用,响应式Web应用或微服务Web应用。Spring框架的核心功能:控制反转(IoC)和依赖注入(DI)为Spring的功能实现提供了基础,保证了Spring的灵活性。

3.高效

Spring项目SpringBoot的出现,改变了开发者进行Java编程的方式。从根本上简化了开发流程,减少了代码量,提高了开发效率。SpringBoot集成必要的组件,如应用上下文、自动配置的嵌入Web服务器,使微服务开发如同编写输出Hello World的程序一样简单。在SpringBoot中集成SpringCloud等相关组件,独立的Spring Boot项目即可构成微服务体系,显著提高微服务开发效率。

4.安全

Spring在处理安全问题方面响应迅速且非常负责,这保证了Spring具有更高的安全性,互联网安全室非常重要的一个领域,而Spring在安全方面做得非常出色,Spring Security是一个开箱即用的安全组件,提供了工业标准的安全集成方案。

5.良好的生态

Spring社区是一个庞大的、全球性和多样化的社区,涵盖了从初学者到经验丰富的专业人士等不同开发阶段的开发人群,无论在哪个学习阶段,均可从社区获取帮助以及相应的学习资源。

2.1.2 Spring的功能

 

 1.微服务

微服务是一种现代软件开发方法,微服务中的应用代码分片管理、独立交付、即微服务中的应用是彼此独立的模块,可以单独运行,是弱依赖,如果服务之间没有相互调用关系,则服务是独立进行开发和交付的,相互不影响,保证了项目的独立快速交付,这也是现代互联网所追求的高内聚、低耦合架构的实现。

2.响应式编程

 响应式编程是一种范式,开发者可以构建非阻塞、异步的应用程序处理背压(流控)。Spring Framework 5.0引入的Web Flux即响应式编程组件。响应式编程并不会提高服务的响应速度,但是可以在有限资源的情况下提高系统的吞吐量和伸缩性。响应式编程对超时、容错、失败重试进行了优化、用户体验更好。

背压是一种应用运行时状态,当生产者生产数据的速度大于消费者消费的速度时,会导致消费者缓存溢出,即形成背压。阻塞和非阻塞是针对线程而言的,引入非阻塞机制,线程不会阻塞,保证系统资源的利用率;异步和同步是针对消息传递而言的,引入异步消息传递,保证系统的流畅性。

3. Spring Cloud组件化

分布式系统服务间的通信成为开发者面临的重大挑战之一,系统的复杂度由应用层向网络转移,这意味着云原生需要处理诸如外部配置、无状态、日志记录和连接到备用服务等问题,而Spring的原生项目Spring Cloud提供的组件足够处理这些问题。使用Spring Cloud可以“一站式”开发、部署、维护分布式服务(微服务集群)。

4.快速构建Web应用

Spring的单体项目SpringBoot是一个约定大于配置的Java Web框架,该框架移除了众多配置文件,是一种现代化的Web编程模型,简化了服务搭建流程,并且Spring Boot的启动和停止都非常简便,通过内置的Tomcat、Netty等服务器即可完成服务的启停,提高开发和交付效率。

5.功能即服务

无服务器工作负载是事件驱动的工作负载,与服务器基础设施无关。运行多少个实例、使用哪种操作系统这类问题统一由服务平台管理,对于开发者而言,功能及服务FaaS,开发者可以更加专注于业务开发。

6.事件驱动

事件驱动即消息的发布-订阅,Spring提供基于事件驱动的组件,可以很好地与Apache Kafka、RabbitMQ、Azure Event Hub等消息中间件协作,保证应用服务与业务之间的消息互通,当业务方产生数据时,及时将数据传输至消息队列,应用服务从订阅的队列中获取数据并及时处理,保证业务的顺畅进行。

7.批处理

批处理是指不需要以外部交互或中断的方式处理有限的数据。批处理技术可以有效处理大量数据,基于SLA的排序能力可以充分利用资源,在JVM中构建稳定的批处理任务,保证系统的安全稳定与运行。

2.1.3 Spring框架功能体系

Spring架构即Spring Framework,这并不是Spring的组成架构,而是Spring的功能架构,即Spring包含的主要功能,这些功能按模块进行划分,Spring架构中共有大约20个模块,按照各自的职能分为Core Container、Data Access/Integration、Web、AOP、Instrumentation、Messaging和Test,Spring分层架构如图:

1.Core Container

 Core Container核心容器包括spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Spring Expression Language,SpEL)这5个模块。spring-core和spring-beans模块提供框架最基础、最核心的功能,如IoC和DI,BeanFactory是工厂模式的复杂实现,解除了对单例的依赖,同时将配置从程序中解耦。

Context上下文模块(spring-context)是在Core和Beans模块的基础上构建的,Context模块从Beans模块继承并且增加了对国际化、事件广播、资源载入和通过Servlet容器创建上下文的支持。

Context模块同样支持J2EE,如EJB、JMX等,ApplicationContext接口是Context模块的关键切入点,spring-context-support提供第三方库接入Spring应用上下文的支持,如缓存、邮件、任务、以及模版引擎。

spring-expression模块为运行时查询和操作对象提供强大的表达式语言。SpEL是统一表达式语言的扩展,该语言支持setting和getting属性值、属性赋值、方法引用、获取数组、集合内容等。

2. AOP和Instrumentation

spring-aop模块提供面向切面编程的功能,开发者可以使用AOP自定义切面,将功能实现与业务逻辑解耦,功能实现即通过切面操作某部分逻辑的执行过程,如统计部分业务逻辑的耗时、日志等,业务逻辑即实际的需求。

独立的spring-aspects模块提供了与AspectJ的集成。spring-instrument模块使用java.lang.instrument(容器类)作为动态的instrumentation(执行容器),开发者可以构建独立于应用程序的代理程序监测和协助运行在JVM中的程序,甚至替换和修改类的定义,同时提供了类加载器实现功能。spring-instrument-tomcat模块包含Spring对Tomcat的动态执行容器代理。

3.Messaging

Messaging为集成Message API和消息协议提供支持。Spring框架从4.0开始引入Spring messaging模块,该模块的核心理念借鉴了Spring Integration,如Message、Message Channel、Message Handler,该模块同时包含了一系列类似于Spring MVC注解编程风格的消息方法注解。

4.Data Access/Integration

Data Access/Integration层包括JDBC、ORM、OXM、JMS和Transactions(事务模块)。

5.Web

Web层包括spring-web、springwebmvc、spring-websocket和spring-webmvc-portlet模块。其中,spring-web模块提供最基础的Web功能,如文件上传、使用Servlet监听器初始化IoC容器以及Web应用上下文功能,同时包含HTTP客户端远程调用功能。

6.Test

spring-test模块支持Spring组件的Junit和TestNG的单元测试和集成测试,spring-test模块提供加载Spring应用上下文并缓存上下文的功能,并且可以通过模拟对象进行隔离测试。

2.1.4Spring项目体系

就项目层级而言,Spring是一个位于顶层的抽象项目,Spring包含了从配置到安全、Web应用到大数据等功能的所有组件或独立项目,帮助开发者实现功能,其中独立的项目有SpringBoot、微服务组件SpringCloud、持久层组件SpringData JDBC层。

Spring架构体系共包含了24个项目类,每个项目都是独立的组件,而Spring Framework则是对Spring 功能的抽象,不具备独立的功能,职责单一。微服务中最常用的有Spring Boot和Spring Cloud,Spring Boot是独立运行的单体项目,而Spring Cloud是微服务聚合项目,包含了微服务所需的组件。

2.2 Spring Cloud

Spring Cloud项目是由多个独立项目集合而成的,每个项目都是独立的,但是Spring Cloud本身并不能独立运行,需要集成到Spring Boot中实现相应的功能。Spring Cloud中的项目各自进行迭代和版本发布,因此Spring Cloud使用版本名称进行版本管理,而不是通过版本号,避免Spring Cloud的版本号与子项目版本号发生冲突。Spring Cloud以英国伦敦地铁站名命名,以字母排序,最初的项目发行版本为Angel,每当Spring Cloud解决严重Bug或更新较多功能时,会发布一个Service Release版本,简称SR,版本号即该大版本下的第一次发布。

2.2.1Spring Cloud与Spring Boot

Spring Cloud提供的工具可以帮助开发者在分布式系统中快速构建一些通用功能,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举和分布式会话等,开发人员可以使用Spring Cloud在分布式系统中快速启动相同模式的服务和应用,在各自的分布环境中独立运行,包括开发者的计算机设备、裸机数据中心和云计算等托管平台,Spring Cloud专注于提供更好的开箱即用的服务。

Spring Cloud是微服务的核心组件之一,为微服务的正常运行提供了重要支持,Spring Cloud是多个独立项目的集合,并且有自己的版本管理机制,当SpringBoot单体服务构建微服务时,需要对应版本的Spring Cloud支持,否则会因为版本不兼容无法启动应用。

 Spring Cloud是多个项目的组合项目,主要的项目有23个

2.2.2Spring Cloud五大组件

分别为注册中心、客户端负载均衡器、断路器、网关和配置中心。

1.注册中心

 注册中心在微服务体系中提供单体服务的注册与发现,注册即单体服务将服务信息(如IP地址)存储到注册中心,注册中心生成该服务的唯一实例;发现即向注册中心注册的服务之间可以相互寻址并进行通信。

2.客户端负载均衡器

客户端负载均衡器是客户端之间调用的负载均衡器,Spring Cloud Ribbon是基于HTTP和TCP的客户端负载均衡工具,基于Netflix Ribbon实现,通过Spring Cloud封装在Eureka注册中心组件中,可以轻松地将服务的REST模版请求自动转换成客户端负载均衡的服务调用。

3.断路器

断路器保护系统,控制故障范围,保证服务高可用。断路器用于解决服务的“雪崩”效应,所谓服务“雪崩”效应,即微服务体系中某个单体服务出现问题无法正常响应时,调用这个服务会出现线程阻塞,若此时有大量的请求进入该故障的服务,Servlet容器中的线程耗尽时,导致服务瘫痪,故障会在微服务相互依赖的单体服务中传播,最终导致整个微服务系统瘫痪。

当服务A不可用,且不可用次数达到阈值(Hystrix为5s 20次)时断路器生效,此时请求服务A会通过fallback方法直接返回一个固定值,避免故障“感染”,切断故障点。

4.网关

服务网关(Zuul)通过反向代理统一管理微服务中所有的服务接口,实现微服务体系中所有服务的接口均通过网关进行转发,即所有的请求向网关发起,然后由网关将请求进行转发。

 5.配置中心

Spring Cloud Config是解决分布式系统配置的方案,包含客户端和服务端两部分,服务端提供配置文件的存储服务,以接口的形式提供配置参数,客户端通过接口获取配置数据初始化项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2113594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROADM(可重构光分插复用器)-介绍

1. 引用 https://zhuanlan.zhihu.com/p/163369296 https://zhuanlan.zhihu.com/p/521352954 https://zhuanlan.zhihu.com/p/91103069 https://zhuanlan.zhihu.com/p/50610236 术语: 英文缩写描述灰光模块彩光模块CWDM:Coarse Wave-Length Division …

1233333333333

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧 每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。 每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。 JavaGuide:Java内存区域…

STM32CubeMX和HAL库

目录 STM32CubeMX和HAL库介绍 STM32Cube主要包括两部分 安装MCU固件包 软件功能与基本使用 STM32CubeMX和HAL库介绍 STM32CubeMX软件是ST有限公司为STM32系列微控制器快速建立工程,并快速初始化使用到的外设、GPIO等而设计的,大大缩短了开发时间。 同…

【面试八股总结】MySQL日志:undo log、redo log、binlog

MySQL中存在三种日志: undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。redo log(重做日志):是 Innodb 存储引擎层…

服务网关工作原理,如何获取用户真实IP?

文章目录 一、什么是网关二、网关工作原理 (★)三、SpringCloud Gateway3.1 Gateway 简介3.2 Gateway 环境搭建3.3 自定义路由规则 (★)3.4 局部过滤器3.5 全局过滤器(案例:获取用户真实IP地址) (★) 补充1:不同类型的客户端如何设…

MapSet之相关概念

系列文章: 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 目录 1.搜索 1.1 概念和场景 1.2 模型 2.Map的使用 2.1 关于Map的说明 2.2 关于Map.Entry的说明 2.3 Map的常用方法说明 3.Set的说明 3.1关于Set说明 3.2 常见方法说明 1.搜…

CTFHub技能树-Git泄漏-Index

目录 一、Git索引(Index)的基本概念 二、解题过程 主旨:使用git泄漏恢复源代码 方法一:使用GitHack手动恢复 方法二:直接使用Git_Extract获取网站源代码拿去flag 当前大量开发人员使用git进行版本控制&#xff0c…

图神经网络(2)预备知识

1. 图的基本概念 对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G(V,E), 其 中V{V1,V2,…,Vn} 是一个具有 n 个顶点的集合。 1.1邻接矩阵 我们用邻接矩阵A∈Rnn表示顶点之间的连接关…

初识Linux · 有关gdb

目录 前言: 1 预备知识 2 gdb的使用 前言: 当我们Linux学到了这里的时候,我们大概会有一种感觉是,从VS2022转战Linux,写代码对我们来说是一种重新构建读写代码的一个过程,从文本编辑器,到文…

怎样将手机屏幕(远程)投屏到家里的大电视上?

我不住家里,前几次回去都会替老爸老妈清理手机。这两个星期没空回去,老爸吐槽手机用几天就又卡了,其实就是清理一些手机缓存的问题。 我说我远程控制他的手机,给他清理一下。他一听“控制”就不喜欢,说我大了&#xf…

视频中的噪点怎么去除?

在数字视频时代,拍摄高质量的视频成为了许多人的追求。然而,在实际拍摄过程中,由于多种原因,我们常常会遇到视频噪点过多、画面模糊的问题,这不仅影响了观看体验,还可能让精心拍摄的作品大打折扣。那么&…

【生物信息学算法】图算法1:概念和算法

文章目录 1. 图的定义、分类、表达方式图的定义图的分类表达方式Python实现 2.相邻节点和度概念定义python实现 3.路径、距离和搜索路径和距离搜索环 4.图论中的欧拉定理 1. 图的定义、分类、表达方式 图的定义 图G可以由两个集合来定义,即G(V,E)。其中&#xff0…

MapSet之二叉搜索树

系列文章: 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 目录 前言 1.二叉搜索树 1.1 定义 1.2 操作-查找 1.3 操作-新增 1.4 操作-删除(难点) 1.5 总体实现代码 1.6 性能分析 前言 TreeMap 和 TreeSet 是 Java 中基于搜索树实现的 M…

申万宏源证券完善金融服务最后一公里闭环,让金融服务“零距离、全天候”

在数字化转型的浪潮中,申万宏源作为金融行业的先锋,持续探索科技如何赋能金融服务,以提升企业效率并优化客户服务体验。面对日益增长的视频化需求,传统的图文形式已难以满足市场与用户的新期待。为了应对这一挑战,申万…

简单梳理一个历史脉络

B 站上王山水老师的一个视频引发的思考:没有司马篡国,能避免300年的大乱世吗? 我的答案如下: 视野放宽到欧亚大陆,广义上公元184年黄巾军起义开启内乱,狭义上公元220年正式进入三国,280年晋统一…

新手做短视频素材在哪里找?做短视频素材工具教程网站有哪些?

本文将为你提供一系列新手友好的视频制作资源,包括素材网站和编辑工具,帮助你快速成为短视频领域的新星。让我们从国内知名的蛙学网开始介绍。 蛙学网:新手的视频素材天堂 对于短视频新手而言,蛙学网绝对是一个宝库。该网站提供了…

1-10 图像增强对比度 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 enhanced_image cv2.convertScaleAbs(image, alpha1.5, beta0) 三、运行现象 四、完整工程贴出 一、提前准备 1、树莓派4B 及 64位系统 2、提前安装opencv库 以及 numpy库 3、保存一张图片 二、代码详解 import cv2 # 增强图像的对比度 …

环境配置!

一 安装CUDA 在安装CUDA之前,建议先看下pytorch的更新版本,应为pytorch更新较慢,请保证CUDA的版本,对应的pytorch版本存在。 去pytorch官网查看电脑支持的cuda版本最高是多少。PyTorch 我这边在网站上看最高支持的CUDA版本为12.…

SpringDataJPA系列(7)Jackson注解在实体中应用

SpringDataJPA系列(7)Jackson注解在实体中应用 常用的Jackson注解 Springboot中默认集成的是Jackson,我们可以在jackson依赖包下看到Jackson有多个注解 一般常用的有下面这些: 一个实体的示例 测试方法如下: 按照上述图片中的序号做个简…