代码编织梦想

Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将较好的微服务框架集成进来,从而简化了开发者的代码量。

一、什么是微服务?

首先,马丁福勒说了微服务概念没有统一的定义。所以下面的说法只是其中之一,微服务是一种架构风格,将一个单一的具有多个不同功能模块的应用程序划分成一组小的小的应用程序,每个小的应用程序只负责一个功能模块,并且运行在单独的进程中,它们之间使用轻量级机制通信。

总结

  • 一个服务只负责一个功能
  • 每个服务单独部署
  • 每个服务以不同的进程来运行
  • 用有数据库==>可以单独自己拥有,也可以共同拥有

二、微服务架构

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

跟我看看SpringCloud微服务系架构

                        ┌──────────┐                ┌───────────┐
                        │  Client  │                │   Server  │
                        └──────┬───┘                └─────┬─────┘
                               │                          │
                               │                          │
                         ┌─────┼─────┐              ┌──────┼─────┐
                         │Service API│              │Service API│
                         └─────┬─────┘              └──────┬─────┘
                               │                          │
                               │                          │
                      ┌────────┼────────┐         ┌──────┼─────┐
                      │Discovery Service│         │ Config Service │
                      └────────┬────────┘         └──────┴─────┘
                               │                          │
                               │                          │
                      ┌────────┴──────────┐        ┌─────┴─────┐
                      │  Circuit Breaker  │        │   Router    │
                      └────────┬──────────┘        └─────┬─────┘
                               │                          │
                               │                          │
                         ┌─────┴─────┐              ┌──────┴─────┐
                         │   Monitor  │              │ Distributed Tracing  │
                         └───────────┘              └─────────────┘

三、微服务优缺点

微服务架构的优势

使用微服务架构能够为我们带来如下好处:

  1. 服务的独立部署
    每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。
  2. 服务的快速启动
    拆分之后服务启动的速度必然要比拆分之前快很多,因为依赖的库少了,代码量也少了。
  3. 更加适合敏捷开发
    敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。
  4. 职责专一,由专门的团队负责专门的服务
    业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。
  5. 服务可以动态按需扩容
    当某个服务的访问量较大时,我们只需要将这个服务扩容即可。
  6. 代码的复用
    每个服务都提供 REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。
    微服务架构的劣势
    微服务其实是一把双刃剑,既然有利必然也会有弊。下面我们来谈谈微服务有哪些弊端,以及能采取什么办法避免。
  7. 分布式部署,调用的复杂性高
    单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问题,比如网络问题、容错问题、调用关系等。
  8. 独立的数据库,分布式事务的挑战
    每个微服务都有自己的数据库,这就是所谓的去中心化的数据管理。这种模式的优点在于不同的服务,可以选择适合自身业务的数据,比如订单服务可以用 MySQL、评论服务可以用 Mongodb、商品搜索服务可以用 Elasticsearch。
    缺点就是事务的问题了,目前最理想的解决方案就是柔性事务中的最终一致性,后面的章节会给大家做具体介绍。
  9. 测试的难度提升
    服务和服务之间通过接口来交互,当接口有改变的时候,对所有的调用方都是有影响的,这时自动化测试就显得非常重要了,如果要靠人工一个个接口去测试,那工作量就太大了。这里要强调一点,就是 API 文档的管理尤为重要。
  10. 运维难度的提升
    在采用传统的单体应用时,我们可能只需要关注一个 Tomcat 的集群、一个 MySQL 的集群就可以了,但这在微服务架构下是行不通的。当业务增加时,服务也将越来越多,服务的部署、监控将变得非常复杂,这个时候对于运维的要求就高了。

四、微服务技术栈

加粗部分是SpringCloud提供的

微服务条目(相关概念)落地技术
服务开发SpringBoot、Spring....
服务配置与管理Archaius、Diamond...
服务注册与发现Eureka、Consul、Zookeeper...
服务调用REST、RPC、gRPC...
服务熔断器Hystrix、Envory...
负载均衡Ribbon、Nginx...
服务接口调用(简化 HTTP 接口的调用)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

五、SpringCloud是什么?

概述

Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册、服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等,这些都可以用 Spring Boot 的开发风格做到一键启动和部署。

通俗地讲,Spring Cloud 就是用于构建微服务开发和治理的框架集合(并不是具体的一个框架),主要贡献来自 Netflix OSS。

SpringBoot和SpringCloud之间的区别

  • SpringBoot可以开发具体的单个微服务,可以独立运行
  • SpringCloud是将SpringBoot开发的单个微服务整合起来协调治理的,SpringCloud是需要依赖SpringCloud的

六、SpringCloud 与 Dubbo

目前成熟的互联网框架

Spring Cloud 与 Dubbo区别

表 1 Spring Cloud与Dubbo功能对比

功能名称DubboSpring Cloud
服务注册中心ZooKeeperSpring Cloud Netflix Eureka
服务调用方式RPCREST API
服务网关Spring Cloud Netflix Zuul
断路器 不完善SpringCloud Netflix Hystrix
分布式配置Spring Cloud Config
服务跟踪Spring Cloud Sleuth
消息总线Spring Cloud Bus
数据流Spring Cloud Stream
批量任务Spring Cloud Task

最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式。
严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更加合适。

品牌机与组装机的区别
很明显,Spring Cloud的功能比DUBBO更加强大,涵盖面更广,而且作为Spring的拳头项目,它也能够与Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring项目完美融合,这些对于微服务而言是至关重要的。使用Dubbo构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心,但是如果你是一名高手,那这些都不是问题;而Spring Cloud就像品牌机,在Spring Source的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。

社区支持与更新力度
最为重要的是,DUBBO停止了5年左右的更新,虽然2017.7重启了。对于技术发展的新需求,需要由开发者自行拓展升级(比如当当网弄出了DubboX),这对于很多想要采用微服务架构的中小软件组织,显然是不太合适的,中小公司没有这么强大的技术能力去修改Dubbo源码+周边的一整套解决方案,并不是每一个公司都有阿里的大牛+真实的线上生产环境测试过。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/itcast_cn/article/details/129673111

java学习路线图,全套java基础视频教程_黑马程序员官方的博客-爱代码爱编程_java视频

黑马程序员深知大家自学Java,苦于没有Java学习路线图,或者找不到好的Java资源还经常被骗的难处。为此黑马每年更新一次Java学习路线图,本次更新为2022年最新版。 2022年黑马程序员简易版Java学习路线图: 入门:Java SE基础-->Java Web(含数据库+H5+js+vue) 中级:Maven-->Git--

python入门教程完整版(懂中文就能学会)_黑马程序员官方的博客-爱代码爱编程_python基础教程

今天本宝宝给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 言归正传,我来给大家介绍一下这套教程,希望每个小伙伴都沉迷学习,无法自拔!   本套教程学习时间15天 1-3天内容:为Linux基础命令 4-13天内容:为Python基础教程14-15 天内容:为飞机大战项目演练 第一阶段(1-3天): 该阶段首先通过介绍不同

软件测试全套教程,软件测试自学线路图_黑马程序员官方的博客-爱代码爱编程_软件测试课程

软件测试: 软件测试是为了发现程序中的错误而执行程序的过程。 通俗的说,软件测试需要在发布软件之前,尽可能的找软件的错误,尽量避免在发布之后给用户带来不好的体验,并要满足用户使用的需求。 现在市面上这么多软件,每个软件背后都有软件测试工程师的功劳,这也造就了软件测试行业前景非常好,今天我就分享一下自学线路图,及全套教程!(教程在最后,表格中!) 软

软件测试人员应该如何介绍自己测试过的项目_黑马程序员官方的博客-爱代码爱编程_软件测试项目

测试人员在找工作的过程中,通常有一个问题是很难绕开的。就是要如何向别人介绍自己之前做过的项目。下面我们就这个问题简单的做一些分析。 要解决这个问题,大体上可以分为如下几个步骤: 1、对项目进行基本介绍 2、说明自己负责测试的模块 3、针对部分模块展开进行说明   一. 对项目进行基本介绍 以下就以一个简单的项目进行介绍说明: 最近测试的

qt教程,qt从入门到实战教程完整版_黑马程序员官方的博客-爱代码爱编程_qt

Qt是一个跨平台开发框架,可以使用C++和Qml开发,同时它又不仅仅只是开发框架,它也是一种技术策略,可以让你快速、高效地设计、开发、部署和维护软件,同时在所有设备上提供无缝的用户体验。因而,对于C/C++工程师而言,QT是必须要学习的一个跨平台开发框架,今天分享一个QT教程! 课程亮点 1,知识体系完备,内容精炼 2,脉络清晰,讲解过程把握

java多线程编程,来看这篇就够了!全新java多线程教程!_黑马程序员官方的博客-爱代码爱编程

对于Java程序员来讲,Spring全家桶几乎可以搞定一切,Spring全家桶便是精妙的招式,多线程就是内功心法很重要的一块,线上出现性能问题,多线程更是不可回避的问题。因此多线程基础知识对于高级程序员的重要性不必言语!很多公司在面试高级程序员时候,多线程相关知识也必定是考核的标准之一。那我们为什么要学习多线程呢?掌握Java多线程可以:应对面试、优化之路

软件测试全套教程,2020年全新软件测试学习路线图-爱代码爱编程

2020年全新的软件测试学习路线图来袭, 零基础入行入职必备学习教程,高质量免费资源在线学习! 还在等什么,想学习软件测试的小伙伴,快来点击进入学习状态吧! 一、基础入门 课程亮点 1. 熟悉计算机相关概念。 2. 掌握基础的测试理论。 3. 熟练掌握HTML常用标签input。 4. 掌握使用CSS选择器。 配套学习视频: 软件测试基

art-template模板引擎的基本使用 丨ajax-爱代码爱编程

一、模板引擎的基本概念 1.1 渲染UI结构时遇到的问题 var rows = [] $.each(res.data, function (i, item) { // 循环拼接字符串 rows.push('<li class="list-group-item">'+ item.content +'<s

web apis 第一天:dom获取&属性操作-爱代码爱编程

了解 DOM 的结构并掌握其基本的操作,体验 DOM 的在开发中的作用 知道 ECMAScript 与 JavaScript 的关系了解 DOM 的相关概念及DOM 的本质是一个对象掌握查找节点的基本方法掌握节点

web apis 第二天:dom事件基础-爱代码爱编程

学会通过为DOM注册事件来实现可交互的网页特效。 能够判断函数运行的环境并确字 this 所指代的对象理解事件的作用,知道应用事件的 3 个步骤 学习会为 DOM 注册事件,实现简单可交互的网页特交。

模板引擎的实现原理 丨ajax-爱代码爱编程

一、模板引擎的实现原理 1.1 正则与字符串操作 1. 基本语法   exec() 函数用于 检索字符串 中的正则表达式的匹配。   如果字符串中有匹配的值, 则返回该匹配值 ,否则返回 null 。 RegExpObject.exec(string

操作系统应该怎么学习?书籍、课程都整理好了-爱代码爱编程

如果想要系统的学习操作系统的话,最硬核最权威的书肯定是《操作系统导论》,再配上一个《深入理解计算机系统》,对于能看的进去书的小伙伴来说,非常系统了。 不少同学多次尝试啃书,就是啃不动,那其实不如先别什么经典书籍了。喜欢动手的同学,对于理论知识很抵触的,可以看看《30天自制操作系统》,这本书会手把手教你编写一个操作系统。 如果你说我就是看书看不下

web apis 第三天:dom事件进阶-爱代码爱编程

进一步学习 事件进阶,实现更多交互的网页特效,结合事件流的特征优化事件执行的效率 掌握阻止事件冒泡的方法理解事件委托的实现原理 事件流 事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,

自学前端需要达到什么水平才能去找工作?来看看这套前端学习路线图_jsiftf-爱代码爱编程

自学前端需要达到什么水平?当然是水平越高,越容易找到工作。 在竞争这么激烈的2020年,就需要更加的努力,充实自己,让自己不被代替! 看了好多的回答,大家都是再说学到什么水平能找到工作,我就来分享干货吧!祝看到这篇干货的小伙伴,工作步步高升! 黑马程序员学习路线图及能掌握的能力(总,以下会分阶段,加上配套学习视频,小伙伴可继续往下看!)

前端和后端在实际工作中的区别有哪些?_前端后端学习路线知乎-爱代码爱编程

下面内容我们将会站在一个小白的角度,用大白话告诉大家前后端实际开发过程中的区别以及会用到的一些工具。 先来看张图: 看到可能还不理解,下面我们先说前端,以知乎-知学堂板块为例子。 前端也就是我们能看到的界面上的全部内容,比如网页上的特效,布局、图片、音频、视频等内容,这些图片是UI/UE设计出来的效果图,前端的工作就是将UI设计师的效果图,用

通过ajax提交表单数据 丨 ajax_ajax怎样实现表单的提交-爱代码爱编程

1. 通过Ajax提交表单数据 1.1 监听表单提交事件   在 jQuery 中,可以使用如下两种方式,监听到表单的提交事件:   $('#form1').submit(function(e) { alert('监听到了表单的提交事件') }) $('#form1').on('submit', fu

jquery 其他方法-爱代码爱编程

目录: jQuery 拷贝对象多库共存jQuery 插件 1. jQuery 对象拷贝 如果想要把某个对象拷贝(合并) 给另外一个对象使用,此时可以使用 $.extend() 方法 语法: $.extend([deep], target, object1, [objectN]) 1. deep: 如果设为true 为深拷贝, 默认

资讯 | 图灵测试已经无法评估现在的人工智能了!_ai 能力 评估-爱代码爱编程

随着人工智能成为我们技术领域中重要组成部分,每一种新的工具和技术都需要一个基准。目前位置,最广为人知的AI基准测试工具就是图灵测试。 自1950年图灵测试提出来以后,人工智能领域已经取得了长足的发展。但,越来越清楚的是,图灵测试无法评估出今天出现或者未来可能会出现的全部人工智能能力了。 图灵测试是以简单的通过/不通过的原则,重点关注聊天/语言能力,

form表单与模板引擎 丨 ajax_ajax enctype-爱代码爱编程

目标: form表单的基本使用 1. form表单的基本使用 1.1 什么是表单 表单在网页中主要负责 数据采集功能 。HTML中的<form>标签,就是用于采集用户输入的信息,并通过 <form>标签的提交操作,把采集到的信息提交到服务器端进行处理。