目前大家都在说微服务,其实微服务不是一个名字,是一个架构的概念,大家现在使用的基于RPC框架(dubbo、thrift等)架构其实也能算作一种微服务架构。

目前越来越多的公司开始使用微服务架构,所以在目前招聘java岗位时,有springcloud经验还是会占一点优势,今天young就和大家一起来学习Spring Cloud微服务框架。

本章,我们先解决新人都头疼的一个问题,spring Cloud 与spring Boot到底是什么关系????

一 、什么是spring Boot

在讲解什么是spring Boot之前,我们先可以思考一下,目前使用spring时,有没有感觉以下的两个问题经常被频繁的吐槽

1. 在过去的 Spring 发中,需要引入大量的 xml 文件。Spring 2.5 引入了包扫描,消除了显式的配置 Bean。 Spring 3.0 又引入了基于 JavaBean 的配置,这种方式可以取代 xml 文件。

尽管如此,在实际的开发中还是需要配置 xml 文件,例如配 SpringMVC 事务管理器、过滤器、切面等等。

2. 在项目的开发过程中,会引入大量的第三方依赖,选择依赖是一件不容易的事,解决依赖与依赖之间的冲突也很耗费精力。所以,在以前的Spring开发中,依赖管理也是一件棘手的事情。

结合上面Spring的两点瑕疵,我们在来总结一下,什么是SpringBoot:

1. Spring Boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装。所以,你以前可以用spring做的事情,现在用spring Boot都可以做。

2. Spring Boot是一种全新的编程规范,是一个服务于框架的框架,服务范围是简化配置文件和起步依赖,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件。

二 、什么是spring Cloud

1. Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案,它依赖于 Spring Boot ,有快速开发、持续交付和容易部署等特点。

2. Spring Cloud不像其他Spring子项目那样相对独立,它是一个拥有诸多子项目的大型综合项目。

三 、Spring Cloud与Spring Boot的对比

1. Spring Boot 是 Spring的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务;Spring Cloud是一个基于Spring Boot实现的云应用开发工具;

2. Spring Boot专注于快速、方便集成的单个个体;Spring Cloud是关注全局的服务治理框架;

3. Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置;Spring Cloud很大的一部分是基于Spring Boot来实现。

4. Spring Boot可以离开Spring Cloud独立使用开发项目,但是SpringCloud离不开Spring Boot,属于依赖的关系。

四、Spring Cloud的常用组件

Spring Cloud 提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、 智能路由 、微代理、控制总线、全局锁、分布式会话等。

spring Cloud的子项目很多,但是目前在实际工作中,我们一般业务项目使用到的组件就是常规的几个,其它的一般开发用不到,做为新手,我们先熟悉常用且重要的几个。

接下来的这8个常用组件的描述来自(方志朋的《深入理解Spring Cloud 与微服务构建一书》)

(1)服务注册和发现组件 Eureka

利用 Eureka 组件可以很轻松地实现服务的注册和发现功能。 Eureka 组件提供了服务的健康监测,以及界面友好的 UI 。通过 Eureka 组件提供的 UI, Eureka 组件可以让开发人员随时了解服务单元的运行情况。

另外 Spring Cloud 也支持 Consul 和Zookeepe ,用于注册和发现服务。

(2)熔断组件 Hystrix

Hystrix是一个 熔断组件,它除了有一些基本的熔断器功能外,还能够实现服务降级、服务限流的功能。另外 Hystrix 提供了熔断器的健康监测,以及熔断器健康数据的 API 口。

Hystrix Dashboard 组件提供了单个服务熔断器的健康状态数据的界面展示功能,Hystrix Turbine 组件提供了多个服务的熔断器的健康状态数据的界面展示功能。

(3)负载均衡组件 Ribbon

    Ribbon 是一个负载均衡组件,它通常和 Eureka 、Zuul、 RestTemplate、Feign 配合使用。Ribbon 和Zuul 配合,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实例中。

Ribbon和RestTemplate、Feign配合,在消费服务时能够做到负载均衡。

(4)路由网关 Zuul

    路由网关 Zuul 有智能路由和过滤的功能。内部服务的 API 接口通过 Zuul 网关统一对外暴露,内部服务的 API 接口不直接暴露,防止了内部服务敏感信息对外暴露。在默认的情况下,Zuul和Ribbon相结合,能够做到负载均衡、智能路由。

Zuul过滤功能是通过拦截请求来实现的,可以对一些用户的角色和权限进行判断,起到安全验证的作用,同时也可以用于输出实时的请求曰志。

上述的4个组件都来自于 Netflix 的公司,称为 Spring Cloud Netflix。

(5)Spring Cloud Config

  Spring Cloud Config 组件提供了配置文件统一管理的功能。Spring Cloud Config包括Server端和Client端,Server 端读取本地仓库或者远程仓库的配置文件,所有的Client 向Server读取配置信息,从而达到配置文件统一管理的目的。

通常情况下, Spring Cloud Config 和 Spring Cloud Bus 相互配合刷新指定 Client 或所有Client的配置文件。

(6)  Spring Cloud Security

   Spring Cloud Security 是对 Spring Security 组件的封装,Spring Cloud Security 向服务单元提供了用户验证和权限认证。一般来说,单独在微服务系统中使用 Spring Cloud Security 是很少见的,一般它会配合 Spring Security 0Auth2 组件一起使用, 通过搭建授权服务,验证 Token或者 JWT 这种形式对整个微服务系统进行安全验证。

(7)Spring Cloud Sleuth

   Spring Cloud Sleuth 是一个分布式链路追踪组件,它封装了 Dapper Zipkin 和 Kibana 等组件,通过它可以知道服务之间的相互依赖关系,并实时观察链路的调用情况。

(8)Spring Cloud Stream

Spring Cloud Stream Spring Cloud 框架的数据流操作包,可以封装 RabbitMq 、ActiveMq 、Kafka 、Redis 等消息组件,利用 Spring Cloud Stream 可以实现消息的接收和发送。

五、微服务相比单体服务的优缺点

关于微服务的优缺点,我不想用官网模板或者书上说的一大堆,young我经历了从单体服务到微服务项目的过渡,我就从个人工作体会接地气的讲解一下微服务的优缺点。

优点:

1. 新人上手快:新人在参与新项目时,只需要下载需求相关模块的代码,了解这部分代码就行了,不需要关注整个项目的代码逻辑,可以减少上手时间。

2. 本地调试快:以前修改一个功能,整个项目启动,花费时间很长。现在只启动修改的单个模块,启动很快。(不知道有没有和我一样,以前本地启动一个复杂项目花费30s-60s,调试启动一次就能喝杯茶了)。

3. 开发进度加快:以前一个项目,多个人开发,你改的代码,影响我,我改的代码影响你,某个人改了错误代码提交,整个项目都启动不了。微服务不同功能模块,互不影响,你自己的锅自己背。

4. 跨语言合作: 同一个项目不同的功能模块可以使用不同语言开发,java,js,php,随心所欲。不同语言只需要提供 http 客户端,便可以实现跨语言调用。

5.  简单的分库: 同一个项目,不同模块连接不同的数据库,主要是配置简单。(我们项目就连接3个不同的mysql业务数据库,1个redis集群,1个mongo集群)。

6. 服务集群扩展容易 :现在springcloud做服务集群,节省资源,并且搭建速度快。比如项目中,资源服务功能模块压力大,运维只要快速copy一份配置,部署一台资源服务模块的服务就行了,其它功能服务模块不用管。

缺点:

1. 运维人员压力大: 单体应用以前运维同事只要监控个一个应用正常运行,而现在却需要保证几十甚至上百个应用运转正常,这是一个艰巨的任务。

2. 事务、异步、测试面临挑战:跨进程之间的事务、大量的异步处理、多个微服务之间的整体测试都需要有一整套的解决方案,而现在看起来,这些技术并没有成熟。

3. 服务分割难度大:对于一个项目,如何进行功能划分,哪些功能归属同一个服务模块,对架构师和设计人员的要求较高。

     后面,我会以实际工作中的案例,逐步讲解springcloud重要组件的使用,逐渐搭建出一个微服务项目,敬请期待~

    如果不正确的地方,欢迎大家留言指出,共同进步~

一起来学spring Cloud | 第一章:spring Cloud 与Spring Boot的更多相关文章

  1. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  2. 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目

    在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内容,新写了本章节,先教大家在工作中如何搭建一个多模块的spr ...

  3. 【第一章】 第一个spring boot程序

    环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...

  4. Spring 开发第一步(三)Spring与JDBC

    <spring in action 3rd>中的前面4章讲解的是Spring的核心,也就是DI/IOC和AOP .从第5章开始是Spring在企业开发中的各个方面的应用.其实作为笔者从事的 ...

  5. (转)编写Spring的第一个案例并测试Spring的开发环境

    http://blog.csdn.net/yerenyuan_pku/article/details/52832145 Spring4.2.5的开发环境搭建好了之后,我们来编写Spring的第一个案例 ...

  6. spring framework 第一章数据库管理(data access)

    spring data access 的网址:https://docs.spring.io/spring/docs/current/spring-framework-reference/index.h ...

  7. Spring 开发第一步(四)Spring与JDBC事务

    Spring使用各种不同的TransactionManager来管理各种不同数据源事务底层(比如jdbc数据源.hibernate数据源.JPA数据源等等).在此基础上使用各种对应的Template来 ...

  8. 《快学Scala》第一章 基础

  9. 一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

    本篇文章,很浅显的一步步讲解如何搭建一个能运行的springcloud项目(带所有操作截图).相信!看完本篇之后,你会觉得springcloud搭建如此简单~~~~ 一. Eureka简介: 1.1  ...

随机推荐

  1. 拾人牙慧篇之——基于HTML5中websocket来实现消息推送功能

    一.写在前面 要求做一个,后台发布信息,前台能即时得到通知的消息推送功能.网上搜了也有很多方式,ajax的定时询问,Comet方式,Server-Sent方式,以及websocket.表示除了定时询问 ...

  2. STL-Map 源码剖析

    G++ ,cygnus\cygwin-b20\include\g++\stl_map.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Compan ...

  3. ubuntu 命令整合1

    一.linux命令基本格式 命令名[选项] [参数] 注意: 命令名区分字母大小写 命令名必须有 选项.参数可以没有,选项一般使用减号开头二.具体Linux命令 1.who 显示登录系统中的用户的信息 ...

  4. 接口调用(发送http请求)

    // 向对应的url地址发送http请求, 并获取响应的json字符串    public String getHttpResponse(String url) {        // result用 ...

  5. Mybatis概述

    mybatis概述 1 mybatis产生的意义 传统的jdbc, 及其存在的问题 package cn.rodge.jdbc;import java.sql.Connection;import ja ...

  6. XamarinForm Effects 调用事件

    原文地址 在Xamarin.Forms控件中实现底层多点触控跟踪. 一个effect可以定义和调用一个事件,在底层本地视图中发出信号的变化.这篇文章演示如何实现底层多点触控跟踪,以及如何生成信号触摸活 ...

  7. 为什么我离开Mac for Windows:苹果已经放弃了[译]

    为什么我离开Mac for Windows:苹果已经放弃了[译] 如果你问任何知道我的人,我可能是他们知道的最大的苹果粉丝.要求提供什么电脑可以获得的建议,我几乎肯定会告诉你MacBook Pro,还 ...

  8. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  9. zookeeper 配置文件conf目录下 zoo文件 配置详解

    clientPort:客户端尝试连接server的端口号 (对外服务端口) 通常为2181 dataDir:存放快照文件snapshot的目录.(储存数据的目录) dataLogDir:事务日志存放位 ...

  10. HTML5 CSS3 诱人的实例: 3D立方体旋转动画

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34120047 创意来自:http://www.html5tricks.com/d ...