Spring Cloud微服务入门、实战与进阶(目录总览)

此文章是入门Spring Cloud入门的基础内容,倘若基本了解,可直接阅读Spring Cloud入门的基础篇,学习记录的资料主要来源于(~ ̄▽ ̄)~ 书籍Spring Cloud微服务入门、实战与进阶(尹吉欢)ヽ(゚∀゚)メ(゚∀゚)ノ ,基础篇

一、Eureka注册中心
二、客户端负载均衡Ribbon
持续更新中~~~(~ ̄▽ ̄)~


Spring Cloud的官网地址: https://spring.io/projects/spring-cloud

一、微服务的概括和Spring Cloud

1、什么是微服务?

是一种架构风格(而分布式是系统部署的方式)。开发单个应用作为一系列小型服务的套件,其中每个服务都运行在自己的进程中,并且通过轻量级的机制实现彼此间的通信,这通常是HTTP资源API。这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署。这些服务的集中式管理做到了最小化(例如docker相关技术,可了解此文章:点我(✪ω✪)),每—种服务都可以通过不同的编程语言进行编写,并且可以使用不同的数据存储技术。

2、微服务优缺点

优势

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

1)、服务的独立部署:每个服务都是一一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。
2)、服务的快速启动:拆分之后服务启动的速度必然要比拆分之前快很多,因为依赖的库少了,代码量也少了。
3)、更加适合敏捷开发:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。
4)、职责专一,由专门的团队负责专门的服务:业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。
5)、服务可以动态按需扩容:当某个服务的访问量较大时,我们只需要将这个服务扩容即可。
6)、代码的复用:每个服务都提供REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。

缺点
微服务其实是一把双刃剑,既然有利必然也会有弊。下面我们来谈谈微服务有哪些弊端,以及能采取什么办法避免。

1)、分布式部署,调用的复杂性高:单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过HTTP来进行通信,这当中会产生很多问题,比如网络问题、容错问题、调用关系等。
2)、独立的数据库,分布式事务的挑战:每个微服务都有自己的数据库,这就是所谓的去中心化的数据管理。这种模式的优点在于不同的服务,可以选择适合自身业务的数据,比如订单服务可以用MySQL、评论服务可以用Mongdb、商品搜索服务可以用Elasticsearch。缺点就是事务的问题了,目前最理想的解决方案就是柔性事务中的最终一致性, 后面的章节会给大家做具体介绍。
3)、测试的难度提升:服务和服务之间通过接口来交互,当接口有改变的时候,对所有的调用方都是有影响的,这时自动化测试就显得非常重要了,如果要靠人工一个个接口去测试,那工作量就太大了。这里要强调一点,就是API文档的管理尤为重要。
4)、运维难度的提升:在采用传统的单体应用时,我们可能只需要关注一个 Tomcat的集群、一个MySQL的集群就可以了,但这在微服务架构下是行不通的。当业务增加时,服务也将越来越多,服务的部署、监控将变得非常复杂。这个时候对于运维的要求就高了。

3、微服务拆分

什么时候进行服务化拆分

第一阶段的主要目标是快速开发和验证想法
进一步增加更多的新特性来吸引更多的目标用户
同时进行开发的人员超过10人,这个时候就该考虑进行服务化拆分了

不适合拆分的情况

小团队,技术基础较薄弱
流量不高,压力小,业务变化也不大
对延迟很敏感的低延迟高并发系统
业务稳定、迭代周期长

服务化拆分的两种姿势

纵向拆分
横向拆分
结合业务综合分析

4、什么是Spring Cloud

Spring Cloud是一系列框架的有序集合。 它利用 Spring Boot的开发便利性, 巧妙地简化了分布式系统基础设施的开发,如服务注册、服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等,这些都可以用Spring Boot的开发风格做到一键启动和部署。通俗地讲,Spring Cloud就是用于构建微服务开发和治理的框架集合(并不是具体的一个框架),主要贡献来自Netflix OSS。
(:Netflix是一家互联网流媒体播放商,是美国视频巨头,随着Netflix转型为一家云计算公司,它也开始积极参与开源项目。Netflix OSS(Open Source)就是由Netflix公司主持开发的一套代码框架和库,目的是解决上了规模之后的分布式系统可能出现的一些有趣问题)。

5、微服务重要模块

Spring Cloud模块介绍
1、Eureka: 服务注册中心,用于服务管理。

2、Ribbon: 基于客户端的负载均衡组件。

3、Hystrix: 容错框架,能够防止服务的雪崩效应。

4、Feign: Web 服务客户端,能够简化HTTP接口的调用。

5、Zuul: API网关,提供路由转发、请求过滤等功能。

6、Config: 分布式配置管理。

7、Sleuth: 服务跟踪。

8、Stream: 构建消息驱动的微服务应用程序的框架。

9、Bus: 消息代理的集群消息总线。

除了上述模块,还有Cli、Tas…就不在这里一一介绍了。

核心组件

在这里插入图片描述

二、Spring Boot入门和常用技术介绍(复制粘贴即可用)

Spring Boot简单入门:https://blog.csdn.net/weixin_45537947/article/details/105909671
Spring Boot常用开发技术的集合:https://blog.csdn.net/weixin_45537947/article/details/108214875
Spring Boot实现用户账号的CRUD小案例:https://blog.csdn.net/weixin_45537947/article/details/108214952
Spring Boot实现简单微信小程序小案例:https://blog.csdn.net/weixin_45537947/article/details/108568018

Spring Boot常用的开发技术:

1、热部署

开发过程中经常改动代码,此时若想看下效果,就不得不停下项目然后重启。对于Sning Boot项目来说,启动时间是非常快的,在微服务的架构下,每个服务只关注自己的业务,代码量也非常小,这个启动时间是可以容忍的。对于那些臃肿的单体老项目,启动时间简直是浪费生命。虽然Spring Boot 启动很快,但是我们还是要自己去重启。能不能做到有改动,它就会悄无声息地自己把改动的地方重新加载一遍?答案是肯定的,通过spring-boot-devools就可以实现。
pom.xml:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
</dependency>

开启自动编译:
在这里插入图片描述
然后点击OK后,同时按下Shift+Ctrl+Alt+/,选择Registry:
在这里插入图片描述
在这里插入图片描述
勾起后点击Close,重启IDEA,这样配置就完成了,之后的使用只需要Ctrl+s的保存操作,Spring Boot就会重新加载被修复的Class。

2、actuator监控

Spring Boot提供了一个用于监控和管理自身应用信息的模块,它就是spring-boot-starter-actuator。只需引入依赖便可使用:
pom.xml:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

当我们访问 /actuator/health可以得到下面的信息:

{
    "status": "UP"
}

Actuator端点信息
在这里插入图片描述
UP表示当前应用处于健康状态,如果是DOWN就表示当前应用不健康。
添加下面的配置:

#显示健康信息的详情
management.endpoint.health.show-details=always

访问 /actuator/health:
在这里插入图片描述
可以看出大部分的端点都不暴露出来,我们可以手动配置需要暴露的端点。如果需要暴露多个端点,可以用逗号分隔,例如下:

management.endpoints.web.exposure.include=configprops,beans

如果想全部暴露直接配置下面方式:

management.endpoints.web.exposure.include=*

3、统一异常处理

下面是简单的统一异常处理模板:
GlobalExceptionHandler.java:

@ControllerAdvice
public class GlobalExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResponseDate defaultErrorHandler(HttpServletRequest req,
                                            Exception e) throws Exception {
        logger.error("", e);
        ResponseDate r = new ResponseDate();
        r.setMessage(e.getMessage());
        if (e instanceof org.springframework.web.servlet
                .NoHandlerFoundException) {
            r.setCode(404);
        } else {
            r.setCode(500);
        }
        r.setData(null);
        r.setStatus(false);
        return r;
    }
}

统一异常处理的实体类:
ResponseDate.java:

@Data
public class ResponseDate {
    private Boolean status = true;
    private int code = 200;
    private String message;
    private Object data;
    //get set
}

application.properties配置:

#统一异常处理配置
#出现错误时, 直接抛出异常
spring.mvc.throw-exception-if-no-handler-found=true

欢迎继续阅读Spring Cloud基础篇 (✪ω✪)

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: Spring Cloud 微服务架构实战代码是一个基于 Spring Cloud 微服务解决方案的实践项目。它通过将常见的微服务技术组件和应用场景进行集成和示例演示,使读者能够深入了解和学习 Spring Cloud 微服务架构的实际应用。 该项目包含多个模块,其中包括注册中心(Eureka)、配置中心(Config)、网关(Zuul)、负载均衡(Ribbon)、链路跟踪(Sleuth)、熔断器(Hystrix)等,涵盖了微服务架构中的关键技术组件。在实现过程中,项目采用了 Spring Boot 来简化微服务架构的搭建和开发,并以 Maven 进行依赖管理和构建。 通过该项目的学习,读者可以了解到微服务架构的基本概念、实际应用场景和解决方案,掌握 Spring Cloud 微服务架构的相关技术和工具的实际应用,了解微服务架构的开发和部署流程,掌握基于 Spring Boot微服务开发和集成方法,从而提高微服务架构的设计实现和部署能力。 总之,Spring Cloud 微服务架构实战代码是一份完整的微服务架构实践项目,它可以帮助读者深入学习和了解微服务架构的实际应用,并具备较高的实际参考价值。 ### 回答2: Spring Cloud是一个开源的微服务架构实战代码,能够让开发人员在构建分布式系统时快速开发和部署微服务。它诞生于Spring项目之上,提供了基于Spring Boot的一套开发工具和服务,可以方便地管理和实现微服务架构的各项需求。 Spring Cloud包含了许多组件,如Eureka、Feign、Hystrix、Zuul等,这些组件都可以独立使用,也可以混合使用,相互之间的集成非常容易。例如,Eureka提供了服务注册与发现的能力,Feign支持微服务之间的远程调用,Hystrix可以提供服务的自我保护机制,Zuul可以提供API网关的功能,等等。 通过使用Spring Cloud,开发人员可以有效地解决微服务中需要处理的分布式问题,例如服务发现、服务注册、服务负载均衡、熔断、容错、路由、安全等等。此外,Spring Cloud还提供了一些常用的开发工具,如Spring Cloud Config,它可以帮助团队在开发和发布过程中有效地管理和配置系统的环境和配置文件。 总之,Spring Cloud是一套非常完善,且易于集成、扩展的微服务架构实战代码,尤其适用于企业级和大型系统的开发。它能够快速地实现微服务的各项技术需求,提高开发效率,使得开发人员更加专注于业务逻辑的开发,而不用再花费大量时间和精力处理微服务本身的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值