Spring Cloud 微服务架构

本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,能够先学习个人这一篇:《Spring Boot 1.5.x 基础学习示例》。关于微服务基本概念不了解的童鞋,能够先阅读下始祖Martin Fowler的《Microservice》,本文不作介绍和描述。
1、分布式服务框架的发展
1.1 第一代服务框架web

表明:Dubbo(Java)、Orleans(.Net)等spring

特色:和语言绑定紧密
1.2 第二代服务框架安全

表明:Spring Cloud等网络

现状:适合混合式开发(例如借助Steeltoe OSS可让ASP.Net Core与Spring Cloud集成),正值当年
1.3 第三代服务框架架构

表明:Service Mesh(服务网格) => 例如Service Fabric、lstio、Linkerd、Conduit等负载均衡

现状:在快速发展中,更新迭代比较快
1.4 将来(目测不久)主流的服务架构和技术栈框架

基础的云平台为微服务提供了资源能力(计算、存储和网络等),容器做为最小工做单元被Kubernetes调度和编排,Service Mesh(服务网格)管理微服务的服务通讯,最后经过API Gateway向外暴露微服务的业务接口。分布式

目前,我所在的项目组已经在采用这种技术架构了,服务网格采用的是Linkerd,容器编排采用的是K8S,Spring Cloud已经没用了。But,不表明Spring Cloud没有学习的意义,对于中小型项目团队,Spring Cloud仍然是快速首选。
2、Spring Cloud 简介
2.1 Spring Cloud极简介绍svg

首先,尽管Spring Cloud带有“Cloud”这个单词,但它并非云计算解决方案,而是在Spring Boot基础之上构建的,用于快速构建分布式系统的通用模式的工具集。微服务

其次,使用Spring Cloud开发的应用程序很是适合在Docker和PaaS(好比Pivotal Cloud Foundry)上部署,因此又叫作云原生应用(Cloud Native Application)。云原生能够简单地理解为面向云环境的软件架构。

总结 :Spring Cloud是一个基于Spring Boot实现的云原生应用开发工具,它为基于JVM的云原生应用开发中涉及的配置管理、服务发现、熔断器、智能路由、微代理、控制总线、分布式会话和集群状态管理等操做提供了一种简单的开发方式。

Spring Cloud具备以下特色:

约定大于配置
适用于各类环境
隐藏了组件的复杂性,并提供声明式、无XML式的配置方式
开箱即用,快速启动
组件丰富,功能齐全
......

Spring Cloud做为第二代微服务的表明性框架,已经在国内众多大中小型的公司有实际应用案例。许多公司的业务线所有拥抱Spring Cloud,部分公司选择部分拥抱Spring Cloud。例如,拍拍贷资深架构师杨波老师就根据本身的实际经验以及对Spring Cloud的深刻调研,并结合国内一线互联网大厂的开源项目应用实践结果,认为Spring Cloud技术栈中的有些组件离生产级开发尚有必定距离,最后提出了一个可供中小团队参考的微服务架构技术栈,又被称为“中国特点的微服务架构技术栈1.0”:

上图中涉及到的组件,这里不作具体介绍,有兴趣的童鞋能够浏览波波老师的这篇文章:《一个可供中小团队参考的微服务架构技术栈》。
2.2 Spring Cloud核心子项目

Spring Cloud Netflix:核心组件,能够对多个Netflix OSS开源套件进行整合,包括如下几个组件:
    Eureka:服务治理组件,包含服务注册与发现
    Hystrix:容错管理组件,实现了熔断器
    Ribbon:客户端负载均衡的服务调用组件
    Feign:基于Ribbon和Hystrix的声明式服务调用组件
    Zuul:网关组件,提供智能路由、访问过滤等功能
    Archaius:外部化配置组件
Spring Cloud Config:配置管理工具,实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。
Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以及触发后续的处理
Spring Cloud Security:基于spring security的安全工具包,为咱们的应用程序添加安全控制

U2FsdGVkX184INN2qqLVP3Jq4LnhUGMo8u/T6qIMYRJRd95enKaOsuxMdfLRirT7

RuRqnWNN4iaWc3zgnXKzEMtBpcfY4hQoLSlAFtfrdLS7cSFQc4UF96/Phm9GvcGM
qASH4VkIa857eKmJmiYG9iKu9AUFqVANxMbVuKxfV3O8e+U/2JLNY8Dl3q9Tc3RG
2EJ8bsx3dkQXf0YYFNXBFkABOolkKMZD7hcJpXVTDA+xdsRKdYTrbN+EHYi/MaE4
wQr+o+KVclnVYCO/X/PYM65aYDVAVjnE0WTl3B8DAhXrqpL6HBIL65y+qHTICXoV
NaE0SkXwrpG1Pf+I5NlyuSUJTfU90EUwmT21/IB3NoY=

Spring Cloud Consul : 封装了Consul操做,Consul是一个服务发现与配置工具(与Eureka做用相似),与Docker容器能够无缝集成