这里写图片描述

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

基本信息

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

项目详细
ReleaseCamden SR3
Referencehttp://cloud.spring.io/spring-cloud-static/Camden.SR3/
APIhttp://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.5Session管理
No.6Failback
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

项目详细
英文URLhttps://12factor.net/
中文URLhttps://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 NetflixNetflix提供的多种组件包括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的各种组件非常简单的进行服务发现/负载均衡/配置管理/网关管理等。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐