【夯实Spring Cloud】Dubbo沉睡5年,Spring Cloud开始崛起!

2023-11-25 08:40

本文主要是介绍【夯实Spring Cloud】Dubbo沉睡5年,Spring Cloud开始崛起!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文属于【夯实Spring Cloud】系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货。系列目录如下:

【夯实Spring Cloud】Dubbo沉睡5年,Spring Cloud开始崛起!
【夯实Spring Cloud】Spring Cloud中基于maven的分布式项目框架的搭建
【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解
【夯实Spring Cloud】Spring Cloud中如何完善Eureka中的服务信息
【夯实Spring Cloud】Spring Cloud中使用Eureka集群搭建高可用服务注册中心
【夯实Spring Cloud】Spring Cloud中的Eureka和Zookeeper的区别在哪?
【夯实Spring Cloud】Spring Cloud中使用Ribbon实现负载均衡详解(上)
【夯实Spring Cloud】Spring Cloud中使用Ribbon实现负载均衡详解(下)
【夯实Spring Cloud】Spring Cloud中自定义Ribbon负载均衡策略
【夯实Spring Cloud】Spring Cloud中使用Feign实现负载均衡详
【夯实Srping Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)
【夯实Srping Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(下)
【夯实Spring Cloud】Spring Cloud中使用Zuul实现路由网关详解
【夯实Spring Cloud】Spring Cloud分布式配置中心详解
【夯实Spring Cloud】未完待续


通常而言,微服务架构是一种架构模式或者说一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务之间互相协调、互相配合,为用户提供最终的价值。服务之间采用轻量级的通信机制(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来开发这些服务,也可以使用不同的数据存储。

1. 微服务是什么

微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一个微服务提供单个业务功能,一个服务只做一件事。
从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁,可以拥有自己独立的数据库。从理论角度,这里有篇微服务架构的提出者马丁福特的论文(本文的图片也是出自于该作者的文章之中,版权归原作者所有。):
https://martinfowler.com/articles/microservices.html
论文中提到了微服务和传统架构的区别,传统架构(单机系统),一个项目一个工程:比如商品、订单、交易、库存等等,统一部署,一个进程。如下图所示:

在这里插入图片描述

微服务架构(分布式系统),各个模块/服务,各自独立出来,“让专业的人干专业的事”,独立部署。分布式系统中,不同的服务可以使用各自独立的数据库。如下图所示:

在这里插入图片描述

2. 微服务的优缺点

优点:

1.每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个只当的业务功能或业务需求。
2.开发简单、开发效率提高,一个服务可能就是专业的只干一件事
微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成。
3.微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
4.微服务能使用不同的语言开发。
5.易于和第三方集成,微服务运行容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins,Hudson,bamboo。
6.微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值。
7.微服务允许你利用融合最新技术。
微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合,即前后端分离。
8.每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库。

缺点

开发人员要处理分布式系统的复杂性。

3. 微服务的技术栈

微服务的技术栈都有哪些呢?

微服务条目落地技术
服务开发SpringBoot、Spring、SpringMVC
服务配置与管理Netfllix公司的Archaius、阿里的Diamond等
服务注册与发现Eureka、Consul、Zookeeper等
服务调用Rest、RPC、gRPC
服务熔断器Hystrix、Envoy等
负载均衡Ribbon、Nginx等
服务接口调用(客户端调用服务的简化工具)Feign等
消息队列Kafka、RabbitMQ、ActiveMQ等
服务配置中心管理SpringCloudConfig、Chef等
服务路由(API网关)Zuul等
服务监控Zabbix、Nagios、Metrics、Spectator等
全链路追踪Zipkin、Brave、Dapper等
服务部署Docker、OpenStack、Kubernetes等
数据流操作开发包SpringCloud Stream(封装与Redis、Rabbit、Kafka等发送接收消息)
事件消息总线SpringCloud Bus
…………

4. 为什么选择SpringCloud

当前微服务架构,Dubbo和SpringCloud比较火,另外还有Thrift、gRPC等等,下面把这些做一个比较,即可看出SpringCloud的强大之处。

框架SpringCloudDubbo/DubboXgRPCThriftMotan
功能定位完整的微服务框架服务框架RPC框架RPC框架RPC框架,但整合了Zookeeper或Consul(有耦合),实现集群环境的基本的服务注册与发现
支持REST是,Ribbon支持多种可插拔的序列化选择
支持RPC
支持多语言是(REST形式)
服务注册与发现是(Eureka)是(Zookeeper/Consul)
负载均衡是(服务端Zuul+客户端Ribbon)Zuul-服务,动态路由 云端负载均衡 Eureka(针对中间层服务器)是(客户端)是(客户端)
配置服务Netflix Archaius SpringCloud Server集中配置是(Zookeeper提供)
服务调用链监控是(Zuul) Zuul提供边缘服务,API网关
高可用/容错是(服务端Hystrix+客户端Ribbon)是(客户端)是(客户端)
典型应用案例NetflixalibabGoogleFacebookSina
社区活跃程度一般一般
学习难度中等
文档丰富度一般一般一般
其他SpringCloud Bus为我们应用程序带来了更多管理端点实践的公司比较多Netflix内部在开发集成gRPCIDL定义支持降级

在微服务架构的实施和落地过程中,通常我们会进行技术选型,很多人会拿阿里开源的Dubbo和Spring Cloud进行对比,实际上对比的是REST和RPC,其实Dubbo和Spring Cloud并不在同一领域,没有可比性。

Spring Cloud是一个完整的微服务解决方案,正如上面的表格中展现的,它提供分布式情况下的各种解决方案合集。而Dubbo是一款高性能的Java RPC框架。Spring Cloud生态和Dubbo生态随着技术的发展,会逐渐的融合互补。

老技术用Dubbo比较多,新技术一般会选Spring Cloud。Dubbo沉睡了5年,Spring Cloud像猎豹一样追上来了,可以看出,Spring Cloud现在非常火爆,也是Spring官方大力推荐的技术,很有竞争力,以后的分布式架构使用Spring Cloud也很广泛,后面我会写一些使用Spring Cloud的相关技术文章。


更多优质文章请关注我的微信公众号【武哥聊编程】,回复“资源”、“架构”、“简历”等关键词,可以领取海量优质的视频学习资源。大家共同进步。程序员私房菜

这篇关于【夯实Spring Cloud】Dubbo沉睡5年,Spring Cloud开始崛起!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423478

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

22.手绘Spring DI运行时序图

1.依赖注入发生的时间 当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况 发生: 、用户第一次调用getBean()方法时,loC容器触发依赖注入。 、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让