前言
软件系统的架构经过一步步演进和发展,经历了单体架构、分布式应用架构、微服务架构、服务网格架构、Serverless架构……其中,单体架构经历了简单单体时期(例如经典的JSP)、MVC 分层时期(各种MVC框架受到追捧)、前后端分离时期。
从整体上看,这一次次的演进是软件垂直和水平方向上的拆分,屏蔽了底层与重新定位。在演进过程中,软件开发人员的关注点越来越远离底层的部分,更多地关注上层简单的架构,技术团队的职能划分也越来越清晰。这使得软件的研发过程更高效,质量更可控,工期也更易评估。从这个角度来看,作为技术人员,我们都需要用历史的眼光去看技术的发展,拥抱变化。
微服务架构不是银弹,就像最近不断被提起的中台不能解决所有企业的问题。我们有时会存在某种认知的误区,对成功案例方法本身的关注甚于对问题本身的关注。企业的健康发展在于发现、分析和解决自身的问题,而不是盲目模仿成功的企业。
基于以上的警示,是否要在团队内部进行微服务实践?微服务落地该如何选型呢?作为一个技术人员,选择需要慎重。
希望Spring Cloud能够帮你解决当前的问题,而不只是做一个简单的门户或者网站,因为没有必要为一两个简单的管理系统来维护Spring Cloud 的一整套组件。在为新系统和遗留系统选择使用Spring Cloud前,我们需要分析当前面临的问题。
本文深入浅出地讲解了Spring Cloud生态组件,包括服务注册发现组件Eureka、配置中心Spring Cloud Config、容错组件Hystrix、接入赋能组件Zuul、路由负载均衡组件(高可用性和稳定性)Ribbon等,使读者能够熟悉Spring Cloud各组件的作用和使用方法。
此外,本文还对一些技术点举一反三,例如在讲解RestTemplate作为网络请求时,提到其他Spring Template,包括JdbcTemplate和JmsTemplate等。本文实用性强,代码示例全面,能够使读者在技术学习方法与认知上有一定的转变和提升。
我相信无论是正在学习Spring Cloud的朋友,还是正在推进或选型Spring Cloud落地的团队,都能从本文中有所收获。
本文究竟有哪些特点驱动大家来学习呢?
基于Greenwich 版本,全面讲解Spring Cloud原生组件。
深入原理,辅以图解,生动串联整个Spring Cloud生态。
总结提升,利用综合案例展现构建微服务系统的全过程。
作为Java语言的落地微服务框架,Spring Cloud已经在各大企业普遍应用,各大云厂商也支持Spring Cloud微服务框架的云产品。可以说,Spring Cloud微服务框架已经应用到了各大行业之中,并成为Java开发者的必备技能之一,熟练掌握Spring Cloud是面试者的加分项。
阿里巴巴推出的Nacos和Sentinel等组件已经加入Spring Cloud孵化器项目,未来极有可能替代Netflixoss,因此Spring Cloud是一个极具生命力的微服务框架。
希望本文能够更好的帮助大家学习springcloud,并且能够灵活运用它,希望大家能够喜欢!!!
目录
主要内容
第1章介绍了什么是微服务、为什么需要微服务、微服务的优缺点和面临的挑战,并且将单体架构的系统和微服务架构的系统进行了比较。
第2章主要介绍微服务应该具备的功能以及Spring Cloud的基本组件,最后介绍了SpringCloud与Dubbo、Kubernetes之间的差异。Spring Cloud作为Java语言的微服务框架,它依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。Spring Cloud的组件非常多,涉及微服务的方方面面,并在开源社区Spring和Netflix、Pivotal两大公司的推动下越来越完善。本章主要介绍Spring Cloud,将从以下方面来讲解。
微服务应该具备的功能。
Spring Cloud介绍。
Dubbo介绍。
Kubernetes介绍。
Spring Cloud 与Dubbo比较。
Spring Cloud 与 Kubernetes比较。
第3章介绍了开发环境的构建,包括JDK的安装、IDEA和Maven的使用等;
第4章介绍了Spring Boot的基本使用方法,包括Spring Boot的特点、用IDEA创建一个Spring Boot项目、Spring Boot配置文件详情、Spring Boot的Actuator模块,以及Spring Boot集成JPA、Redis和Swagger2等。
第5章服务注册和发现Eureka,“Eureka”来源于古希腊词汇,意为“发现了”。在软件领域,Eureka是Netflix在线影片公司开源的一个服务注册与发现的组件,和其他Netflix公司的服务组件(例如负载均衡、熔断器、网关等)一起,被Spring Cloud社区整合为Spring Cloud Netflix模块。
本章将从以下4个方面来讲解服务注册与发现模块Eureka。
Eureka简介。
编写一个Eureka注册和发现的例子。
深入理解 Eureka。
编写高可用的Eureka Server。
第6章负载均衡Ribbon,上一章讲述了服务注册和发现组件Eureka,同时追踪源码深入讲解了Eureka的机制,最后通过案例讲解了如何构建高可用的Eureka Server。本章讲解如何使用RestTemplate和Ribbon相结合作为服务消费者去消费服务,同时从源码的角度来深入讲解Ribbon。
第7章声明式调用Feign,在上一章中,讲解了如何使用RestTemplate来消费服务,如何结合Ribbon在消费服务时做负载均衡。本章将全面讲解Feign,包括如何使用Feign来远程调度其他服务、FeignClient的各项详细配置,并从源码的角度深入讲解Feign。
Feign受Retrofit、JAXRS-2.0和WebSocket的影响,采用了声明式API接口的风格,将Java Http客户端绑定到它的内部。Feign的首要目标是将Java Http客户端的书写过程变得简单。Feign的源码地址: https://github.com/OpenFeign/feign。
第8章熔断器Hystrix,前两章讲述了如何使用RestTemplate和Feign去消费服务,并详细地讲述了Ribbon做负载均衡的原理和Feign 的工作原理。本章将讲述如何在用RestTemplate和Feign消费服务时使用熔断器Hystrix,将从以下7个方面进行讲解。
什么是Hystrix。
Hystrix解决了什么问题。
Hystrix的工作原理。
如何在RestTemplate和Ribbon作为服务消费者时使用Hystrix。
如何在Feign作为服务消费者时使用Hystrix。
如何使用Hystrix Dashboard监控熔断器的状况。
如何使用Turbine聚合多个Hystrix Dashboard。
第9章路由网关Spring Cloud Zuul,前文已经讲解了Netflix的一系列组件,包括服务发现和注册组件Eureka、负载均衡组件Ribbon、声明式调用组件Feign和熔断器组件Hystrix。本章讲解Netflix构建微服务的另一个组件——智能路由网关组件Zuul。Zuul作为微服务系统的网关组件,用于构建边界服务(EdgeService ),致力于动态路由、过滤、监控、弹性伸缩和安全。本章将从以下3个方面来讲述Zuul。
为什么需要Zuul。
Zuul 的工作原理。
Zuul的案例实战。
第10章服务网关,
服务网关(Spring Cloud Gateway)是Spring Cloud官方推出的第二代网关框架,用于替代第一代网关Netflix Zuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关的基本功能。服务网关建立在Spring Framework 5 之上,使用非阻塞模式,并且支持长连接Websocket。Netflix Zuul是基于Servlet的,采用HttpClient进行请求转发,使用阻塞模式。在性能上,服务网关优于Netflix Zuul,并且服务网关几乎实现了Netflix Zuul的全部功能。在使用和功能上,用服务网关替换掉Netflix Zuul的成本上是非常低的,几乎可以实现无缝切换。
服务网关作为整个分布式系统的流量入口,有着举足轻重的作用,列举如下。
协议转换,路由转发。
流量聚合,对流量进行监控,日志输出。
作为整个系统的前端工程,对流量进行控制,有限流的作用。
作为系统的前端边界,外部流量只能通过网关才能访问系统。
可以在网关层做权限判断。
可以在网关层做缓存。
第11章介绍了服务注册中心Consul,详细讲解了如何使用Consul进行服务注册和发现,以及如何使用Consul作为分布式配置中心。
第12章配置中心Spring Cloud Config,前面的章节详细讲解了Spring Cloud Netflix组件,包括服务注册和发现组件Eureka、负载均衡组件Ribbon,声明式调用Feign、熔断器组件Hystrix和路由网关组件Zuul。本章讲述SpringCloud的另—组件——分布式配置中心Spring Cloud Config。
本章以案例的形式来全面讲解Spring Cloud Config 的知识,分为以下4个方面。
Config Server从本地读取配置文件。
Config Server从远程Git仓库读取配置文件。
搭建高可用Config Server集群。
使用Spring Cloud Bus刷新配置。
第13章介绍了链路追踪组件Spring Cloud Sleuth,包括微服务系统为什么需要链路追踪组件,并以案例的形式详细介绍了如何在Spring Cloud微服务系统中使用链路追踪,以及如何传输、存储和展示链路数据。
第14章以案例的形式介绍了Spring Boot Admin,包括Spring Boot Admin在微服务系统中的应用、在Spring Boot Admin中集成安全组件。Spring Boot Admin用于管理和监控一个或者多个Spring Boot程序。Spring Boot Admin分为Server(服务端)和Client(客户端),客户端可以通过向服务端注册,也可以结合Spring Cloud的服务注册组件(Eureka和Consul)进行注册。Spring Boot Admin提供了用React编写的UI界面,用于管理和监控。其中,监控内容包括Spring Boot的监控组件Actuator的各个Http节点,也支持更高级的功能,包括Jmx和Loglevel等。
第15章详细介绍了如何在Spring Boot应用中使用SpringBoot Security;
第16章使用Spring Cloud OAuth2保护微服务系统,上一章全面讲解了Spring Boot Security,本章将从以下4个方面讲述如何在Spring Cloud构建的微服务系统中使用Spring Cloud OAuth2来保护微服务系统。
什么是OAuth2。
如何使用Spring OAuth2。
案例分析。
总结。
第17章使用Spring Security OAuth2和JWT保护微服务系统,上一章讲述了如何通过Spring Security OAuth2来保护Spring Cloud架构的微服务系统。上一章的系统有一个缺陷,即每次请求都需要经过Uaa服务去验证当前Token 的合法性,并且需要查询该Token对应的用户的权限。在高并发场景下,会存在性能瓶颈,改善的方法是将Uaa服务集群部署并加上缓存。本章针对上一章的系统的缺陷,采用Spring Security OAuth2和JWT的方式,避免每次请求都需要远程调度Uaa服务。采用Spring Security OAuth2和JWT的方式,Uaa服务只验证一次,返回JWT。返回的JWT包含了用户的所有信息,包括权限信息。
本章主要从以下3个方面来讲解。
JWT详解。
Spring Security OAuth2和JWT保护微服务系统案例详解。
总结。
第18章使用Spring Cloud构建微服务综合案例,本章利用一个使用Spring Cloud 构建微服务的综合案例对前面所有章节的内容进行整合和总结,这个案例也是我在实际工作中对Spring Cloud构建微服务内容的一个提炼。希望通过本章内容,为读者提供一整套使用Spring Cloud构建微服务的解决方案。
这份【深入理解Spring Cloud与微服务构建第2版】共有315页,需要完整版的朋友,可以转发此文关注小编,,,w e i x i n公众号搜索【程序员高级码农】来获取!
大牛对本文的高度评价
本文从目录、内容和大牛对本文评价三部分内容,来对springcloud进行深入剖析,让大家完全掌握springcloud这门技术,希望大家能够喜欢!!
大家一定要加油努力学习了,今年这个疫情耽误了好多时间,希望大家能够静下心来学,利用业余时间补回来,每天花两个小时学习,不断充实自己!!
成功在于积累,大厂正在向你招手!
其实,进大厂也不是有多难,只要靠自己努力就够了,但是你得走对方向,有人引导,不断积累自己的项目经验和管理能力,让自己变得更加有价值!!
加油!