字节跳动内部微服务架构-Docker实战学习笔记分享 真香

前言

基于 Spring Cloud 的微服务设计和开发,已经越来越多地得到了更多企业的推广和应用,而 Spring Cloud 社区也在不断的迅速发展壮大之中,近几年时间,Spring Cloud 的版本也经历了快速的迭代和更新。

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

本篇小编将带你们以最新的 Spring Cloud 发行版 Greenwich.SR1,带领大家体验如何使用 Spring Cloud 从微服务的设计、开发到部署、发布的全过程,在这一过程中,您将可以学到,怎么快速构建一个 Spring Cloud 项目工程,怎么使用最新版本的 Spring Boot 开发框架开发微服务应用,以及如何使用 Consul 进行微服务治理,并以此构建一个高性能的分布式环境,同时体会如何使用 Docker 进行微服务发布。

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

一、微服务结构概述

微服务架构是当前软件开发领域的技术热点。它在各种博客、社交媒体和会议演讲上的出镜率非常之高,笔者相信大家也都听说过微服务这个名词。然而微服务似乎又是非常虚幻的——我们找不到微服务的完整定义,以至于很多人认为是在炒作概念。

那么什么是微服务呢?它解决了哪些问题?它又具有哪些特点?诸多问题,本章都将为你―一解答。同时,微服务理论性的内容,互联网上已有很多,本书不会过多提及。笔者会尽量把篇幅花在微服务的具体实战内容上。

  • 1.单体应用架构存在的问题

  • 2.如何解决单体应用架构存在的问题

  • 3.什么是微服务

  • 4.微服架构的优点与挑战

  • 5.微服设计原则

  • 6.如果实现微服务架构

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

二、微服务开发框架-Spring cloud

  • 1.spring cloud 简介

尽管Spring Cloud带有“Cloud”的字样。但它并不是云计算解决方案,而是在SpringBoot 基础上构建的,用于快速构建分布式系统的通用模式的工具集。

  • 2.spring cloud特点

  1. 约定优于配置。

  2. 适用于各种环境。开发、部署在 PC Server或各种云环境(例如阿里云、AWS 等)均可。

  3. 隐藏了组件的复杂性,并提供声明式、无xml的配置方式。。开箱即用,快速启动。

  4. 轻量级的组件。Spring Cloud整合的组件大多比较轻量。例如 Eureka、Zuul,等等,都是各自领域轻量级的实现。

  5. 组件丰富,功能齐全。Spring Cloud为微服务架构提供了非常完整的支持。例如,配置管理、服务发现、断路器、微服务网关等。

  6. 选型中立、丰富。例如,Spring Cloud支持使用Eureka、Zookecper或Consul实现服务发现。

  7. 灵活。Spring Cloud的组咸部分是解耦的,开发人员可按需灵活挑选技术选型。

  • 3.spring cloud版本

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

三、开始使用spring cloud 实战微服务

本章正式开始使用Spring cloud 进行微服务实践

  • 1.spring cloud实战前提

  • 2.服务提供者与服务消费者

  • 3.编写服务提供者

  • 4.编写服务消费者

  • 5.为项目整合spring boot Actuator

  • 6.硬编码有哪些问题

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

四、微服务注册与发现

  • 1.服务发现简介

通过前文的讲解,我们知道硬编码提供者地址的方式有不少问题。要想解决这些问题,服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息。不仅如此,即使服务提供者的信息发生变化,服务消费者也无须修改配置文件。

服务发现组件提供这种能力。在微服务架构中,服务发现组件是一个非常关键的组件。

  • 2.Eureka简介

  • 3.Eureka原理

  • 4.编写Eureka Server

  • 5.将微服务注册到Eureka的高可用

  • 6.为Eureka Server添加用户认证

  • 7.Eureka Server的REST端点

  • 8.Eureka的自我保护模式

  • 9.多网卡环境下的IP选择

  • 10.Eureka的健康检查

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

五、使用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构造多参数请求

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

七、使用Hystrix实现微服务的容错处理

至此,已用Eureka实现了微服务的注册与发现,Ribbon实现了客户端侧的负载均衡,Feign实现了声明式的API调用

  • 1.实现容错的手段

  • 2.使用Hystrix实现容错

  • 3.Hystrix的监控

  • 4.使用Hystrix Dashboard可视化监控数据

  • 5.使用Turbine聚合监控数据

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

八、使用Zuul构建微服务网关

  • 1.为什么要使用微服务网关

经过前文的讲解。微服务架构已经初具雏形,但还有一些问题-—不同的微服务一般会有不同的网络地址,而外部客户端(例如手机APP)可能需要调用多个服务的接口才能完成一个业务需求。例如一个电影购票的手机APP,可能会调用多个微服务的接口,才能完成一次购票的业务流程。如下图所示:

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

  • 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的高可用

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

十、使用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配合使用

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

十一、Spring Cloud常见问题与总结

在使用Spring Cloud的过程中,可能会遇到一些问题。事实上,不少问题已在前面的章节中以WARNING的形式标出。

本章来对Spring Cloud 的常见问题做一些总结。

  • 1.Eureka常见问题

  • 2.Hystrix / Feugn整合 Hystrix 后首次请求失败

  • 3.Turbine聚合的数据不完整

  • 4.Spring Cloud 各组件配置属性

  • 5.Spring Cloud定位问题思路总结

字节跳动内部微服务架构-Docker实战学习笔记分享 真香

十二、Docker入门

  • 1.Docker简介

Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。

  • 2.Docker的架构

字节跳动内部微服务架构-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微服务

文章到这里就结束了!

总结

由于篇幅有限,小编无法为大家讲师微服务中的方方面面。微服务是一个非常宏观的话题,要想切实落地微服务架构,光靠看一些资料是远远不够的。微服务粒度、持续集成、自动化的机制、组织机构的建设乃至如果从传统架构向微服务架构迁移,都是值得我们深思的问题。

程序员这个职业需要我们不断进步,需要我们不断学习新的知识。

上一篇:微服务架构 | 5.2 基于 Sentinel 的服务限流及熔断


下一篇:14.2 InnoDB and the ACID Model