Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用,如:
-
Spring Cloud Netflix 是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。
-
Spring Cloud Config 将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件
-
Spring Cloud Bus 分布式消息队列,是对Kafka, MQ的封装
-
Spring Cloud Security 对Spring Security的封装,并能配合Netflix使用
-
Spring Cloud Zookeeper 对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用
-
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。
Spring Cloud对于中小型互联网公司来说是一种福音,因为这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施,使用Spring Cloud一站式解决方案能在从容应对业务发展的同时大大减少开发成本。同时,随着近几年微服务架构和Docker容器概念的火爆,也会让Spring Cloud在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在五花八门的分布式解决方案中提供了标准化的、全站式的技术方案,意义可能会堪比当年Servlet规范的诞生,有效推进服务端软件系统技术水平的进步。
>>微服务架构下负载均衡及流量限制问题研究:http://www.doc88.com/p-70873152939579.html
内容提要:
本书以一个名为EagleEye的项目为主线,介绍云、微服务等概念以及SpringBoot和SpringCloud等诸多Spring项目,并介绍如何将EagleEye项目一步一步地从单体架构重构成微服务架构,进而将这个项目拆分成众多微服务,让它们运行在各自的Docker容器中,实现持续集成/持续部署,并最终自动部署到云环境(Amazon)中。针对在重构过程中遇到的各种微服务开发会面临的典型问题(包括开发、测试和运维等问题),本书介绍了解决这些问题的核心模式,以及在实战中如何选择特定Spring Cloud子项目或其他工具解决这些问题。
本书适合拥有构建分布式应用程序的经验、拥有Spring的知识背景以及对学习构建基于微服务的应用程序感兴趣的Java开发人员阅读。对于希望使用微服务构建基于云的应用程序,以及希望了解如何将基于微服务的应用部署到云上的开发人员,本书也具有很好的学习参考价值。
微服务将代码分解为小型的、分布式的独立服务,这些服务需要深谋远虑和仔细设计。Spring Boot和Spring Cloud简化了微服务应用程序。就像Spring框架简化了企业级Java开发一样,Spring Boot移除了与编写基于REST的服务有关的样板代码。Spring Cloud提供了一套工具,用于微服务发现、路由以及将微服务部署到企业和云中。
本书教读者如何使用Java和Spring平台构建基于微服务的应用程序。在构建和部署第1个Spring Cloud应用程序时,读者将学习如何进行微服务设计。在本书中,精心挑选的真实案例展示了基于微服务的各种模式,这些模式用于配置、路由、扩展和部署服务。读者将了解Spring易于使用的工具,并看到其如何助力用微服务来增强和重构现有的应用程序。
本书的组织架构:
第1章会介绍微服务架构为什么是构建应用程序,尤其是基于云的应用程序的重要相关方法。
第2章将引导读者了解如何使用Spring Boot构建第-一个基于REST的微服务。这一章将介绍如何通过架构师、应用工程师和DevOps工程师的角度来审视微服务。
第4章介绍第一个微服务路由模式一服务发现。在这一章中,读者将学习如何使用Spring Cloud和Netflix的Eureka服务,将服务的位置从客户的使用中抽象出来。
第5章讨论在一个或多个微服务实例关闭或处于降级状态时保护微服务的消费者。这一章将演示如何使用Spring Cloud和Netflix Hystrix (和Netflix Ribbon )来实现客户端调用的负载均衡、断路器模式、后备模式和舱壁模式。
第6章会介绍微服务路由模式一服务网关。使用SpringCloud和Netflix的Zuul服务器,开发人员将为所有微服务建立一个单一入口点。我们将讨论如何使用Zuul的过滤器API来构建可以针对流经服务网关的所有服务强制执行的策略。
第7章介绍如何使用Spring Cloud Security和OAuth2实现服务验证和授权。我们将介绍如何设置OAuth2服务来保护服务,以及如何在OAuth2实现中使用JSONWeb令牌(JSON Web Tokens,JWT )。
第8章讨论如何使用Spring Cloud Stream和Apache Kafka将异步消息传递到微服务中。
第9章介绍如何使用Spring Cloud Sleuth和Open Zipkin来实现日志关联、日志聚合和跟踪等常见日志记录模式。
第10章是本书的基石项目。读者将使用在本书中构建的服务,并将其部署到亚马逊弹性容器服务( Amazon Elastic Container Service, ECS )。我们还将讨论如何使用Travis CI等工具自动化构建和部署微服务。
附录A介绍如何设置桌面开发环境,以便可以运行本书中的所有代码示例。本附录介绍本地构建过程是如何工作的,以及想要在本地运行代码示例时如何本地启动Docker。
附录B是OAuth2的补充资料。OAuth2是一种非常灵活的身份验证模型,这一附录简要介绍OAuth2可用于保护应用程序及其相应的微服务的不同方式。
关于代码:
本书每一一章中的所有代码示例都可以在作者的GitHub存储库中找到,每一章都有自己的存储库。读者可以通过到每一章代码存储库的链接http://github.com/camellj/spmia-overview找到概述页面。包含所有源代码的zip文件也可从Manning出版社的网站获取。
第一章:《欢迎迈入云世界,Spring》
本章主要内容
■了解微服务以及很多公司使用微服务的原因
■使用Spring、Spring Boot和Spring Cloud来搭建微服务
■了解云和微服务为什么与基于微服务的应用程序有关
■ 构建微服务涉及的不只是构建服务代码
■了解基于云的开发的各个组成部分
■在微服务开发中使用Spring Boot和Spring Cloud
本书主要介绍微服务架构,以及为什么应该考虑采用微服务架构来构建应用 。 我们将看到如何利用 Java 以及 Spring Boot 和 Spring Cloud 这两个 Spring 框架项目来构建微服务。 Spring Boot和 Spring Cloud 为 Java 开发者提供了一条从开发传统的单体的 Spring 应用到开发可以部署在云端的微服务应用的迁移路径 。
图1-2 使用微服务架构,CRM应用将会被分解成一系列完全彼此独立的微服务,让每个开发团队都能够按各自的步伐前进
由图1-2可以发现,每个功能团队完全拥有自己的服务代码和服务基础设施。他们可以彼此独立地去构建、部署和测试,因为他们的代码、源码控制仓库和基础设施(应用服务器和数据库)现在是完全独立于应用的其他部分的。
微服务架构具有以下特征:
- 应用程序逻辑分解为具有明确定义了职责范围的细粒度组件,这些组件互相协调提供解决方案。
- 每个组件都有一个小的职责领域,并且完全独立部署。微服务应该对业务领域的单个部分负责。此外,一个微服务应该可以跨多个应用程序复用。
- 微服务通信基于一些基本的原则(注意这里说的是原则而不是标准),并采用HTTP和JSON这样的轻量级通信协议,在服务消费者和服务提供者之间进行数据交换。
- 服务的底层采用什么技术实现并没有什么影响,因为应用程序始终使用技术中立的协议(json是最常见的)进行通信。这就意味着构建在微服务之上的应用程序能够使用多种编程语言和技术进行构建。
- 微服务利用其小、独立和分布式的性质,使组织拥有明确责任领域的小型开发团队。这些团队可能为同一个目标工作,如交付一个应用程序,但是每个团队只负责他们在做的服务。
微服务是构建云应用程序的“诱人上瘾的毒药”。你开始构建微服务时是因为它们能够为你的开发团队提供高度的灵活性和自治权,但你很快就会发现,微服务的小而独立的特性使它们可以轻松地部署到云上。一旦服务运行在云中,它们小型化的特点使得启动大量相同服务的实例会变得很容易,应用程序瞬间变得更具有可伸缩性,并且显然易见会更有弹性。
1.2 什么是Spring,为什么它与微服务有关
在基于Java的应用程序构建中,Spring已经成为了事实上的标准开发框架。Spring的核心是建立在依赖注入的概念上的。在普通的Java应用程序中,应用程序被分解成为类,其中每个类与应用程序中的其他类经常有明显的联系,这些联系是在代码中直接调用类的构造器,一旦代码被编译,这些联系点将无法修改。
这在大型项目中是有问题的,因为这些外部联系是脆弱的,并且进行修改可能会对其他下游代码造成多重影响。利用Spring的依赖注入框架,允许用户通过约定将应用程序对象之间的关系外部化,而不是在对象内部彼此硬编码实例化代码,以便更轻松地管理大型Java项目。Spring在应用程序的不同的Java类之间充当一个中间人,管理着它们的依赖关系。Spring本质上就是让用户像玩乐高积木一样将自己的代码组装在一起。
- 微服务是什么以及构建基于微服务的应用程序的设计考虑因素。
- 什么时候不应该构建基于微服务的应用程序。
- 如何使用Spring Boot框架来构建微服务。
-
支持微服务应用程序的核心运维模式,特别是基于云的应用程序。
- 如何使用Spring Cloud来实现这些运维模式。
- 如何利用所学到的知识,构建一个部署管道,将服务部署到内部管理的私有云或公有云厂商所提供的环境中。
阅读完这本书,读者将具备构建和部署基于Spring Boot的微服务所需的知识,明白实施微服务的关键设计决策,了解服务配置管理、服务发现、消息传递、日志记录和跟踪以及安全性等如何结合在一起,以交付一个健壮的微服务环境,最后读者还会看到如何在私有云或公有云中部署微服务。
- 是一名Java开发者
- 拥有Spring的背景
- 对学习如何构建基于微服务的应用程序感兴趣
- 对如何使用微服务来构建基于云的应用程序感兴趣
- 想知道Java和Spring是否是用于构建基于微服务的应用程序的相关技术
- 有兴趣了解如何将基于微服务的应用部署到云上。
在这个例子中,创建一个名为Application的Java类(在simpleservice/src/com/thoughtmechanix/application/simpleservice/Application.java)的Java类,
第二章:《使用Spring Boot构建微服务》
第三章:《使用Spring Cloud配置服务器控制配置》
第四章:《服务发现》
第五章:《使用Spring Cloud和NetflixHystrix的客户端弹性模式》
第六章:《使用Spring Cloud和Zuul进行服务路由》
第七章:《保护微服务》
第八章:《使用Spring Cloud Stream的事件驱动架构》
第九章:《使用Spring Cloud Sleuth和Zipkin进行分布式跟踪》
第十章:《部署微服务》
>>配套代码:
Spring Microservices In Action Overview
欢迎来到Spring Microservices in Action概述页面。谢谢你买了这本书,我希望你喜欢读它就像我喜欢写它一样。本书中的每一章都被分解出来,下面的链接中提供了各自的Github存储库。如果您对本书提供的代码示例有任何疑问或意见,请毫不犹豫地将其发布在曼宁网站的论坛页面上。
请遵循本书附录A中的说明,了解如何在本地设置桌面环境和构建代码。
Chapter 1 Welcome to the cloud, Spring
Chapter 2 Building microservices with Spring Boot
Chapter 3 Controlling your configuration with Spring Cloud configuration server
Chapter 4 On Service discovery
Chapter 5 When bad things happen: client resiliency patters with Spring Cloud and Netflix Hystrix
Chapter 6 Service routing with Spring Cloud and Zuul
Chapter 7 Securing your Microservices
Chapter 8 Event-driven architecture with Spring Cloud Stream
Chapter 9 Distributed Tracing with Spring Cloud Sleuth and Zipkin