Spring基础:快速入门spring cloud(1):Spring Cloud介绍

时间:2016-12-25 06:31:12

这里写图片描述

分布式系统, 微服务, Java, 当这三个词放到一起的时候, 很多人自然而然地就会想起Spring Cloud. Spring Cloud是Spring总多的Project中的一个,它提供了一整套的工具帮助系统架构师们在进行分布式设计的时候可以拿来即用, 在创建和发布微服务时极为便捷和有效.

基本信息

本系列介绍所使用的spring cloud的Release为Camden SR3。 虽然各个版本可能相差不大。

项目 详细
Release Camden SR3
Reference http://cloud.spring.io/spring-cloud-static/Camden.SR3/
API http://cloud.spring.io/spring-cloud-static/spring-cloud.html

Spring Cloud

Spring Cloud提供了一整套的工具帮助创建分布式应用,使用Spring Cloud可以用Spring Cloud的方式创建符合12要素的原生云应用。Spring Cloud与Spring Boot等一起,提供了一整套的微服务架构的原生云应用的解决方案。
这里写图片描述

分布式应用

分布式应用相比普通应用,因为它的复杂,所以导致很多问题我们在作架构的时候不得不考虑,传统的方式下是通过总多的软件/硬件的集成来解决的。比如至少需要考虑如下问题:

项目 详细
No.1 配置管理
No.2 控制总线
No.3 集群管理
No.4 安全机制
No.5 Session管理
No.6 Failback
No.7 智能路由
No.8 网关管理
No.9 服务管理(服务发现/服务注册等)

而一旦我们有了Spring Cloud,基本上就是一个All in One的集合。

原生云应用

原生云应用Cloud Native Applications是一个被叫的越来越多的概念。Cloud Native到底是什么?从Spring Cloud的角度去理解,Cloud Native是在持续交付和价值驱动的软件开发领域为了鼓励更加方便快捷有效地实施最佳实践的一种软件开发方式。可能这个解释依然不能让大多数人所理解,那么我们换一种方式来理解,它在改变什么?传统的应用是什么?

传统应用

关于传统应用下应用相关,这里列出一些我们常见的条目:

项目 详细
架构 3层架构或者N层架构
耦合 紧耦合,有状态
负载自动扩展 不可,或者非常困难
物理宕机 极力避免(钱+精力)
应用恢复 检测->确认->手动恢复
DevOps 开发和运维割裂,持续集成和持续部署困难

总结一下,一个词,很娇气,像我们养的宠物。以前有一些关于pets 和 cattle的讨论在这方面能给一些启事,没有读过的建议搜索来读一下。

原生云应用

项目 详细
架构 微服务
耦合 松耦合,尽量无状态
负载自动扩展 自动水平扩展
物理宕机 自愈
应用恢复 通过设计和Platform结合,能够自愈
DevOps 开发和运维无缝集成,持续集成和持续部署方便

总结一下,一个词, 很皮实。像养牛场里的牛,有问题了随时换一个,而不是像宠物那样傲娇。以前写过一些文章关于Rancher,Rancher是一个用于部署和管理生产环境的容器的开源平台,它与Kubernetes/Mesos/Docker Swarm进行集成,但是它自己也有一个,它把这个也命名为Cattle,项目的名称也是这样,有兴趣地可以研究一下。

Twelve-Factor

URL

项目 详细
英文URL https://12factor.net/
中文URL https://12factor.net/zh_cn/

摘要

项目 详细
I. 基准代码 一份基准代码,多份部署
II. 依赖 显式声明依赖关系
III. 配置 在环境中存储配置
IV. 后端服务 把后端服务当作附加资源
V. 构建,发布,运行 严格分离构建和运行
VI. 进程 以一个或多个无状态进程运行应用
VII. 端口绑定 通过端口绑定提供服务
VIII. 并发 通过进程模型进行扩展
IX. 易处理 快速启动和优雅终止可最大化健壮性
X. 开发环境与线上环境等价 尽可能的保持开发,预发布,线上环境相同
XI. 日志 把日志当作事件流
XII. 管理进程 后台管理任务当作一次性进程运行

Pom

使用Maven可以非常简单地将Spring Cloud导入工程之中,具体Maven片段如下

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Camden.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>

子项目

项目 详细
Spring Cloud Config 统一配置管理,支持本地/Git/SVN.
Spring Cloud Netflix Netflix提供的多种组件包括Eureka, Hystrix, Zuul, Archaius等。
Spring Cloud Bus 使用分布式的消息机制将服务和服务实例连接起来的事件总线,在跨集群进行状态通知时非常有效,比如配置变更事件。
Spring Cloud for Cloud Foundry 与CloudFoundry进行集成
Spring Cloud Cloud Foundry Service Broker 提供Service Broker用来管理相关服务
Spring Cloud Cluster 通过对Zookeeper, Redis, Hazelcast, Consul等进行抽象和实现所提供的关于Leadership election以及common stateful patterns的支持
Spring Cloud Consul 使用Hashicorp Consul进行服务发现和配置管理
Spring Cloud Security 为应用程序添加OAuth2的安全控制
Spring Cloud Sleuth 提供与Zipkin/HTrace/ELK等兼容的Tracing机制
Spring Cloud Data Flow 简单易用的DSL与扩拽可用的GUI,加之REST-API一起提供了一种简化的微服务数据流管道机制。
Spring Cloud Stream 使用Apache Kafka或者RabbitMQ收发消息,提供了一种轻量级的事件驱动的微服务框架用于和外系统进行连接。
Spring Cloud Stream App Starters 基于spring boot,与外系统进行整合
Spring Cloud Zookeeper 使用Apache Zookeeper进行服务发现和配置管理
Spring Cloud for Amazon Web Services 用于简化与Amazon Web Service更好的集成
Spring Cloud Connectors 使得Paas应用更容易与后端服务(比如数据库)进行交互
Spring Cloud Starters 更简单的进行以来管理(同其他starter类似)
Spring Cloud CLI 用CLI方式创建Spring Cloud的各种组件。

总结:本文走马观花地过了一下Spring Cloud相关的知识和概念,从下篇文章开始,我们将使用具体的例子,逐步深入研究是如何使用Spring Cloud的各种组件非常简单的进行服务发现/负载均衡/配置管理/网关管理等。

作者:liumiaocn 发表于2016/12/25 8:31:12 原文链接
阅读:26 评论:0 查看评论