前言
基于 Spring Cloud 的微服务设计和开发,已经越来越多地得到了更多企业的推广和应用,而 Spring Cloud 社区也在不断的迅速发展壮大之中,近几年时间,Spring Cloud 的版本也经历了快速的迭代和更新。
本篇小编将带你们以最新的 Spring Cloud 发行版 Greenwich.SR1,带领大家体验如何使用 Spring Cloud 从微服务的设计、开发到部署、发布的全过程,在这一过程中,您将可以学到,怎么快速构建一个 Spring Cloud 项目工程,怎么使用最新版本的 Spring Boot 开发框架开发微服务应用,以及如何使用 Consul 进行微服务治理,并以此构建一个高性能的分布式环境,同时体会如何使用 Docker 进行微服务发布。
一、微服务结构概述
微服务架构是当前软件开发领域的技术热点。它在各种博客、社交媒体和会议演讲上的出镜率非常之高,笔者相信大家也都听说过微服务这个名词。然而微服务似乎又是非常虚幻的——我们找不到微服务的完整定义,以至于很多人认为是在炒作概念。
那么什么是微服务呢?它解决了哪些问题?它又具有哪些特点?诸多问题,本章都将为你―一解答。同时,微服务理论性的内容,互联网上已有很多,本书不会过多提及。笔者会尽量把篇幅花在微服务的具体实战内容上。
1.单体应用架构存在的问题
2.如何解决单体应用架构存在的问题
3.什么是微服务
4.微服架构的优点与挑战
5.微服设计原则
6.如果实现微服务架构
二、微服务开发框架-Spring cloud
1.spring cloud 简介
尽管Spring Cloud带有“Cloud”的字样。但它并不是云计算解决方案,而是在SpringBoot 基础上构建的,用于快速构建分布式系统的通用模式的工具集。
2.spring cloud特点
约定优于配置。
适用于各种环境。开发、部署在 PC Server或各种云环境(例如阿里云、AWS 等)均可。
隐藏了组件的复杂性,并提供声明式、无xml的配置方式。。开箱即用,快速启动。
轻量级的组件。Spring Cloud整合的组件大多比较轻量。例如 Eureka、Zuul,等等,都是各自领域轻量级的实现。
组件丰富,功能齐全。Spring Cloud为微服务架构提供了非常完整的支持。例如,配置管理、服务发现、断路器、微服务网关等。
选型中立、丰富。例如,Spring Cloud支持使用Eureka、Zookecper或Consul实现服务发现。
灵活。Spring Cloud的组咸部分是解耦的,开发人员可按需灵活挑选技术选型。
3.spring cloud版本
三、开始使用spring cloud 实战微服务
本章正式开始使用Spring cloud 进行微服务实践
1.spring cloud实战前提
2.服务提供者与服务消费者
3.编写服务提供者
4.编写服务消费者
5.为项目整合spring boot Actuator
6.硬编码有哪些问题
四、微服务注册与发现
1.服务发现简介
通过前文的讲解,我们知道硬编码提供者地址的方式有不少问题。要想解决这些问题,服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息。不仅如此,即使服务提供者的信息发生变化,服务消费者也无须修改配置文件。
服务发现组件提供这种能力。在微服务架构中,服务发现组件是一个非常关键的组件。
2.Eureka简介
3.Eureka原理
4.编写Eureka Server
5.将微服务注册到Eureka的高可用
6.为Eureka Server添加用户认证
7.Eureka Server的REST端点
8.Eureka的自我保护模式
9.多网卡环境下的IP选择
10.Eureka的健康检查
五、使用Ribbon实现客户端侧负载均衡
经过前文的讲解,已经实现了微服务的注册与发现。启动各个微服务时,Eureka Clicnt会把自己的网络信息注册到Eureka Server 上。世界似乎更美好了一些。
然而,这样的架构依然有一些问题,比如负载均衡。一般来说,在生产环境中,各个微服务都会部署多个实例。那么服务消费者要如何将请求分摊到多个服务提供者实例上呢?
1.Ribbon简介
Ribbon是 Netflix发布的负载均衡器,它有助于控制HTTP 和TCP客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon 就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。
2.微服务消费者整合Ribbon
3.使用Java代码自定义Ribbo
4.使用属性自定义Ribbon配置
5.脱离Eureka使用Ribbon
六、使用Feign实现声明式REAT调用
1.Feign简介
Feign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及 WebSocket。Feign可帮助我们更加便捷、优雅地调用HTTPAPI。
在 Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如 Feign自带的注解或者JAX-RS注解等。Spring Cloud对Feign进行了增强,使 Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
2.微服务下方在整合Feign
3.手动创建Feign
4.Feign对继承的支持
5.Feign对压缩的支持
6.Feign的日志
7.使用Feign构造多参数请求
七、使用Hystrix实现微服务的容错处理
至此,已用Eureka实现了微服务的注册与发现,Ribbon实现了客户端侧的负载均衡,Feign实现了声明式的API调用
1.实现容错的手段
2.使用Hystrix实现容错
3.Hystrix的监控
4.使用Hystrix Dashboard可视化监控数据
5.使用Turbine聚合监控数据
八、使用Zuul构建微服务网关
1.为什么要使用微服务网关
经过前文的讲解。微服务架构已经初具雏形,但还有一些问题-—不同的微服务一般会有不同的网络地址,而外部客户端(例如手机APP)可能需要调用多个服务的接口才能完成一个业务需求。例如一个电影购票的手机APP,可能会调用多个微服务的接口,才能完成一次购票的业务流程。如下图所示:
2.为什么要使用微服务网关
3.Zuul简介
4.编写Zuul微服务网关
5.Zuul的路由端点
6.路由配置详解
7.Zuul的安全与Header
8.使用Zuul上传文件
9.Zuul的过滤器
10.Zuul的容错与回退
11.Zuul的高可用
12.使用Sidecar整合非JVM微服务
13.使用Zuul聚合微服务
九、使用Spring Cloud Config统一管理微服务配置
1.为什么要统一管理微服务配置
对于传统的单体应用,常使用配置文件管理所有配置。例如一个Spring Boot开发的单体应用,可将配置内容放在application.yml 文件中。如果需要切换环境,可设置多个Profile,并在启动应用时指定 spring.profiles.active=fprofile}。在本书4.6节中使用的也是这种方式。当然也可借助Maven的 Profile实现环境切换。
然而,在微服务架构中,微服务的配置管理一般有以下需求:
集中管理配置。一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此集中管理配置是非常有必要的。
不同环境不同配置。例如,数据源配置在不同的环境(开发、测试、预发布、生产等〉中是不同的。
运行期间可动态调整。例如,可根据各个徼服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置时不停止微服务。
2.spring cloud Config简介
3.编写Config Serber
4.编写Config Client
5.Config Server的Git仓库配置详解
6.Config Server的健康状况指示器
7.配置内容的加解密
8.使用/refresh端点手动刷新配置
9.使用Spring Cloud Bus自动刷新配置
10.Spring Cloud Config与Eureka配合使用
11.Spring Cloud Config的用户认证
12.Config Server的高可用
十、使用Spring Cloud Sleuth实现微服务跟踪
前文已经讲过几种监控微服务的方式了,例如使用Spring Boot Actuator监控微服务实例,使用Hystrix Command等
1.为什么要实现微服务跟踪
2.Spring Cloud Sleuth简介
3.整合Spring Cloud Sleuth
4.Spring Cloud Sleuth 与 ELK配合使用
5.Spring Cloud Sleuth 与 Zipkin配合使用
十一、Spring Cloud常见问题与总结
在使用Spring Cloud的过程中,可能会遇到一些问题。事实上,不少问题已在前面的章节中以WARNING的形式标出。
本章来对Spring Cloud 的常见问题做一些总结。
1.Eureka常见问题
2.Hystrix / Feugn整合 Hystrix 后首次请求失败
3.Turbine聚合的数据不完整
4.Spring Cloud 各组件配置属性
5.Spring Cloud定位问题思路总结
十二、Docker入门
1.Docker简介
Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
2.Docker的架构
3.安装Docker
4.配置镜像加速器
5.Docker常用命令
十三、将微服务运用在Docker上
本节将讨论如何使用Dockerfile构建Docker镜像。Dockerfile是一个文本文件,其中包含了若干条指令,指令描述了构建镜像的细节。
先来编写-一个最简单的Dockerfile。以前文下载的Nginx镜像为例〔详见12.5节),来编写一个Dockerfile修改该镜像的首页。
1.使用Docker构建Docker镜像
2.使用Docker Registry管理Docker镜像
3.使用Maven插件构建Docker镜像
4.常见问题与总结
十四、使用Docker Compose编排微服务
经过前文讲解,可使用Dockerfile (或 Maven)构建镜像,然后使用docker命令操作容器,例如docker run、docker kill等。然而,使用微服务架构的应用系统一般包含若干个徵服务。每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低、维护量之大可想而知。
本章将讨论如何使用Docker Compose来轻松、高效地管理容器。为了简单起见,本章将Docker Compose简称为Compose.
1.Docker Compose简介
2.安装Docker Compose
3.Docker Compose快速入门
4.docker-compose.yml常用命令
5.docker-compose常用命令
6.docker-compose网络配置
7.总和实战:使用Docker Compose 编排 Spring Cloud微服务
文章到这里就结束了!
总结
由于篇幅有限,小编无法为大家讲师微服务中的方方面面。微服务是一个非常宏观的话题,要想切实落地微服务架构,光靠看一些资料是远远不够的。微服务粒度、持续集成、自动化的机制、组织机构的建设乃至如果从传统架构向微服务架构迁移,都是值得我们深思的问题。
程序员这个职业需要我们不断进步,需要我们不断学习新的知识。