zoukankan      html  css  js  c++  java
  • SpringCloud In Action微服务框架项目实战

    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工程师的角度来审视微服务。

    第3章会介绍如何使用Spring Cloud Config管理微服务的配置Spring Cloud Config可帮助开发人员确保服务的配置信息集中在单个存储库中,并且在所有服务实例中都是版本控制和可重复的。

    第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出版社的网站获取。

    本书中的所有代码使用 Maven 作为主要构建工具进行构建以运行在 Java 8 有关编译和运行代码示例所需的软件工具的完整详细信息,参见附录A。
    我在写这本书时遵循的一个核心概念是,每章中的代码示例应该独立于其他章中的代码示例。因此,我们为某一章创建的每个服务将构建到相应的 Docker 镜像。当使用前几章的代码时,它包括在源代码和己构建的 Docker 镜像中 我们使用 Docker compose 和构建的 Docker 镜像来保证每章都具有可重现的运行时环境。

    第一章:《欢迎迈入云世界,Spring》

    本章主要内容
    ■了解微服务以及很多公司使用微服务的原因
    ■使用Spring、Spring Boot和Spring Cloud来搭建微服务
    ■了解云和微服务为什么与基于微服务的应用程序有关
    ■ 构建微服务涉及的不只是构建服务代码
    ■了解基于云的开发的各个组成部分
    ■在微服务开发中使用Spring Boot和Spring Cloud

    本书主要介绍微服务架构,以及为什么应该考虑采用微服务架构来构建应用 我们将看到如何利用 Java 以及 Spring Boot 和 Spring Cloud 这两个 Spring 框架项目来构建微服务Spring Boot和 Spring Cloud 为 Java 开发者提供了条从开发传统的单体的 Spring 应用到开发可以部署在端的微服务应用的迁移路径

    1.1 什么是微服务
    在微服务的概念逐步形成之前,绝大部分基于Web应用都是使用单体架构的风格来进行构建的。在单体架构中,应用程序作为单个可部署的软件制品交付,所有的 UI (用户接口)务、数据库访问逻辑都被打包在一个应用程序制品中并且部署在一个应用程序服务器上。
    微服务通过将大型代码分解为小型的精确定义的部分,帮助解决大型代码库中传统的复杂问题。在思考微服务时,一个需要信奉的重要概念就是:分解和分离应用程序的功能,使它们完全彼此独立。如果以图1-1所示的CRM应用程序为例,将其分解为微服务,那么它看起来可能像图1-2所示的样子。

    图1-2 使用微服务架构,CRM应用将会被分解成一系列完全彼此独立的微服务,让每个开发团队都能够按各自的步伐前进

    由图1-2可以发现,每个功能团队完全拥有自己的服务代码和服务基础设施。他们可以彼此独立地去构建、部署和测试,因为他们的代码、源码控制仓库和基础设施(应用服务器和数据库)现在是完全独立于应用的其他部分的。

    微服务架构具有以下特征:

    • 应用程序逻辑分解为具有明确定义了职责范围的细粒度组件,这些组件互相协调提供解决方案。
    • 每个组件都有一个小的职责领域,并且完全独立部署。微服务应该对业务领域的单个部分负责。此外,一个微服务应该可以跨多个应用程序复用。
    • 微服务通信基于一些基本的原则(注意这里说的是原则而不是标准),并采用HTTP和JSON这样的轻量级通信协议,在服务消费者和服务提供者之间进行数据交换。
    • 服务的底层采用什么技术实现并没有什么影响,因为应用程序始终使用技术中立的协议(json是最常见的)进行通信。这就意味着构建在微服务之上的应用程序能够使用多种编程语言和技术进行构建。
    • 微服务利用其小、独立和分布式的性质,使组织拥有明确责任领域的小型开发团队。这些团队可能为同一个目标工作,如交付一个应用程序,但是每个团队只负责他们在做的服务。

    微服务是构建云应用程序的“诱人上瘾的毒药”。你开始构建微服务时是因为它们能够为你的开发团队提供高度的灵活性和自治权,但你很快就会发现,微服务的小而独立的特性使它们可以轻松地部署到云上。一旦服务运行在云中,它们小型化的特点使得启动大量相同服务的实例会变得很容易,应用程序瞬间变得更具有可伸缩性,并且显然易见会更有弹性。

    1.2 什么是Spring,为什么它与微服务有关

    在基于Java的应用程序构建中,Spring已经成为了事实上的标准开发框架。Spring的核心是建立在依赖注入的概念上的。在普通的Java应用程序中,应用程序被分解成为类,其中每个类与应用程序中的其他类经常有明显的联系,这些联系是在代码中直接调用类的构造器,一旦代码被编译,这些联系点将无法修改。

    这在大型项目中是有问题的,因为这些外部联系是脆弱的,并且进行修改可能会对其他下游代码造成多重影响。利用Spring的依赖注入框架,允许用户通过约定将应用程序对象之间的关系外部化,而不是在对象内部彼此硬编码实例化代码,以便更轻松地管理大型Java项目。Spring在应用程序的不同的Java类之间充当一个中间人,管理着它们的依赖关系。Spring本质上就是让用户像玩乐高积木一样将自己的代码组装在一起。

    Spring 架的迷人之处在于它能够与时俱进并进行自我改造。正在从将应用程序的展现、业务和数据访问逻辑打包在一起并部署为单个制品的单体应用程序模型中迁移,正转向高度分布式的模型,服务能够被构建成可以轻松部署到云端的小型分布式服务。为了响应这种转变,Spring开发团队启动了两个项目,Spring Boot和Spring Cloud。
    Spring Boot 是对 Spring 框架理念重新思考的结果。虽然 Spring Boot 包含了 Spring 的核心特性,但它剥离了 Spring 中的许多“企业”特性,而提供了一个基于 Java 的、面向REST的微服务框架。只需一些简单的注解, Java开发者就能够快速构建一个可打包和部署的 REST微服务,这个微服务并不需要外部的应用容器。(注意:虽然本书会在第2章中更详细地介绍 REST,但REST背后最为核心的概念是,服务应该使动词( GET POST PUT DELETE )来代表服务中的核心操作,并且使用轻量级的面Web 的数据序列化协议(如 JSON )来从服务请求数据和从服务接收数据。
    在构建基于云的应用时,微服务已经成为更常见的架构模式之一,因此Spring社区为开发者提供了Spring Cloud。Spring Cloud框架使实施和部署微服务到私有云或公有云变得更加简单。Spring Cloud在一个公共框架之下封装了多个流行的云管理微服务框架,并且让这些技术的使用和部署像为代码添加注解一样简便。本章随后将介绍Spring Cloud中的不同组件。
     
    1.3 在本书中读者会学到什么
    本书是关于使用 Spring Boot和Spring Cloud 构建基于微服务架构的应用程序的,这些应用程序可被部署到公司内运行的私有云或 Amazon Google Pivotal 等运行的公有云上。在本书中, 我们将介绍一些实际的例子。
    • 微服务是什么以及构建基于微服务的应用程序的设计考虑因素。
    • 什么时候不应该构建基于微服务的应用程序。
    • 如何使用Spring Boot框架来构建微服务。
    • 支持微服务应用程序的核心运维模式,特别是基于云的应用程序。
    • 如何使用Spring Cloud来实现这些运维模式。
    • 如何利用所学到的知识,构建一个部署管道,将服务部署到内部管理的私有云或公有云厂商所提供的环境中。

     阅读完这本书,读者将具备构建和部署基于Spring Boot的微服务所需的知识,明白实施微服务的关键设计决策,了解服务配置管理、服务发现、消息传递、日志记录和跟踪以及安全性等如何结合在一起,以交付一个健壮的微服务环境,最后读者还会看到如何在私有云或公有云中部署微服务。

    1.4 为什么本书与你有关
    如果你已经仔细阅读了本书前面的内容,那么我假设你:
    • 是一名Java开发者
    • 拥有Spring的背景
    • 对学习如何构建基于微服务的应用程序感兴趣
    • 对如何使用微服务来构建基于云的应用程序感兴趣
    • 想知道Java和Spring是否是用于构建基于微服务的应用程序的相关技术
    • 有兴趣了解如何将基于微服务的应用部署到云上。
    我写这本书出于两个原因。
    第一,我已经看过许多关于微服务概念方面的好书,但我并没有发现一本如何基于Java实现微服务的好书。虽然我总是认为自己是一个精通多门编程语言的人,但Java是我的核心开发语言,Spring是我构建一个新应用程序时要使用的开发框架。第一次发现Spring Boot和Spring Cloud,我便被其迷住了。当我构建运行在云上的基于微服务的应用程序时,Spring Boot和Spring Cloud极大地简化了我的开发生活。
    第二,由于我在职业生涯中一直是架构师和工程师,很多次我都发现,我购买的技术书往往是两个极端,要么是概念性的,缺乏实例,要么就是特定某一框架的机械式的讲述。我想要的是这样一本书:同时具备架构与工程。所以,在本书中,我想向读者介绍微服务的开发模式以及如何在实际应用程序开发中使用它们,然后使用Spring Boot和Spring Cloud来编写实际的、易于理解的代码示例,以此来支持这些模式。
    让我们转移一下注意力,使用Spring Boot构建一个简单的微服务。
     
    1.5 使用Spring Boot来构建微服务
    我一直以来都持有这样一个观点:如果一个软件开发框架通过了被我亲切地称为“卡内尔猴子测试”的试验,我就认为它是经过深思熟虑和易于使用的。如果一只像我(作者)这样的“猴子”能够在10min或者更少时间内弄明白一个框架,那么这个框架就通过了这个试验。这就是我第一次写Spring Boot服务示例的感觉。我希望读者也有同样的体验和快乐,所以,让我们花一点儿时间,看看如何使用Spring编写一个简单的“Hello World”REST服务。
    在本节中,我们不会详细介绍大部分代码。这个例子的目标是让读者体会一下编写Spring Boot服务的感受。第2章中会深入更多的细节。
    图1-3展示了这个服务将会做什么,以及Spring Boot微服务将会如何处理用户请求的一般流程。
    图1-3 Spring Boot抽象出了常见的REST微服务任务(路由到业务逻辑、从URL中解析HTTP参数、JSON与对象相互映射),并让开发人员专注于服务的业务逻辑

     在这个例子中,创建一个名为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

    Chapter 10 Deploying your microservices

  • 相关阅读:
    转:解决windows下eclipse中android项目关联android library project失败问题
    [Android]高低API版本兼容之@TargetApi
    【机器学习具体解释】线性回归、梯度下降、最小二乘的几何和概率解释
    iOS开发实践之xib载入注意问题
    Oracle 学习笔记 13 -- 控制用户权限
    【Web探索之旅】第三部分第二课:IP地址和域名
    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 应用程序授权
    windows上通过vnc连接虚拟机中linux系统
    virtio netdev的创建
    使用Dagger2创建的第一个小样例
  • 原文地址:https://www.cnblogs.com/2008nmj/p/14849736.html
Copyright © 2011-2022 走看看