写点什么

凭借这份阿里内部微服务架构笔记拿下阿里、字节、小米 offer

发布于: 3 小时前

 前言

Spring Cloud 是一门提升要求的技术,特别是针对工作 1~3 年的 Java 开发人员。它现在正处于快速发展的阶段,越来越多的企业也开始使用 SpringCloud。相信在不久的将来,熟练掌握 Spring Cloud 将会成为 Java 开发人员面试的门槛。本文将从从技术原理、工程实践、进阶提升 3 个维度详解 Spring Cloud 微服务的架构与开发。



重点!

本文行文流畅,由浅人深。主打的是与微服务相关的实战体系。第一部分是准备篇,可以帮助各位读者了解微服务以及 Spring Cloud 的概念;第二部分是基础篇,会对 Spring Cloud 中常用的模块进行详细讲解;第三部分是实战篇,开始实战性质的内容讲解;最后一部分是高级篇,也是难度比较大的一部分。

第一部分 准备

1.Spring Cloud 与微服务概述

微服务架构是一种架构风格,而 Spring Cloud 是实现微服务架构的一系列框架的有序集合。

  • 传统的单体应用

  • 什么是微服务

  • 什么是 Spring Cloud



2.实战前的准备工作

工欲善其事,必先利其器。在开始学习之前,最重要的事情就是准备开发环境了,各位读者需要准备 JDK1.8、Maven3.3.3、Spring Tools 4 for Eclipse。

  • 开发环境的准备

  • Spring Boot 入门

  • Spring Boot Starter 自定义




第二部分 基础

1.Eureka 注册中心

注册中心在微服务架构中是必不可少的一部分,主要用来实现服务治理功能。

  • Eureka

  • 使用 Eureka 编写注册中心服务

  • 编写服务提供者

  • 编写服务消费者

  • 开启 Eureka 认证

  • Eureka 高可用搭建

  • 常用配置讲解

  • 扩展使用



2.客户端负载均衡 Ribbon

目前主流的负载方案分为两种:一种是集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。另一种则是客户端自己做负载均衡,根据自己的请求情况做负载,Ribbon 就属于客户端自己做负载。

  • Ribboon

  • RestTemplate 结合 Ribbon 使用

  • 负载均衡策略介绍

  • 自定义负载策略

  • 配置详解

  • 重试机制



3.声明式 REST 客户端 Feign

  • 使用 Feign 调用服务接口

  • 自定义 Feign 的配置

  • 脱离 Spring Cloud 使用 Feign



4.Hystrix 服务容错处理

在微服务架构中存在多个可直接调用的服务,这些服务若在调用时出现故障会导致连锁效应,也就是可能会让整个系统变得不可用,这种情况我们称之为服务雪崩效应。我们可以通过 Hystrix 解决服务雪崩效应。

  • Hystrix

  • 在 Spring Cloud 中使用 Hystrix

  • Hystrix 监控

  • 整合 Dashboard 查看监控数据

  • Turbine 聚合集群数据



5.API 网关

API 网关是对外服务的一个人口,其隐藏了内部架构的实现,是微服务架构中必不可少的一个组件。API 网关可以为我们管理大量的 API 接口,还可以对接客户、适配协议、进行安全认证、转发路由、限制流量、监控日志、防止爬虫、进行灰度发布等。

  • Zuul 简介

  • 使用 Zuul 构建微服务网关

  • Zuul 路由配置

  • Zuul 过滤器讲解

  • Zuul 容错和回退

  • Zuul 使用小经验

  • Zuul 高可用




第三部分 实战

1.API 网关之 Spring Cloud Gateway

Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0、Spring Boot2.0 和 Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单有效的、统一的 API 路由管理方式。

  • Spring Cloud Gateway 介绍

  • Spring Cloud Gateway 工作原理

  • Spring Cloud Gateway 快速上手

  • Spring Cloud Gateway 路由断言工厂

  • Spring Cloud Gateway 过滤器工厂

  • 全局过滤器

  • 实战案例



2.自研分布式配置管理

Spring Cloud Config 是一个用来为分布式系统提供配置集中化管理的服务,它分为客户端和服务端两个部分。客户端服务从服务端拉取配置数据,服务端负责提供配置数据。

  • 自研配置管理框架 Smconf 简介

  • Smconf 工作原理

  • Smconf 部署

  • 项目中集成 Smconf

  • Smconf 详细使用

  • Smconf 源码解析



3.分布式配置中心 Apollo

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

  • Apollo 简介

  • Apollo 的核心功能点

  • Apollo 核心概念

  • Apollo 本地部署

  • Apollo Portal 管理后台使用

  • Java 中使用 Apollo

  • Apollo 的架构设计



4.Sleuth 服务跟踪

  • Spring Cloud 集成 Sleuth

  • 整合 Logstash

  • 整合 Zipkin



5.微服务之间调用的安全认证

在微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务。每个服务都有自己的一套 API 提供给别的服务调用,那么如何保证安全性呢?不是说你想调用就可以调用,一定要有认证机制,即只有我们内部服务发出的请求,才可以调用我们的接口。

  • 什么是 JWT

  • 创建统一的认证服务

  • 服务提供方进行调用认证

  • 服务消费方申请 Token

  • Feign 调用前统一申请 Token 传递到调用的服务中

  • RestTemplate 调用前统一申请 Token 传递到调用的服务中

  • Zuul 中传递 Token 到路由的 Zuul 中传递 Token 到路由的服务中



6.Spring Boot Admin

Spring Boot 有一个非常好用的监控和管理的源软件,这个软件就是 Spring BootAdmin。该软件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。

  • Spring Boot Admin 的使用方法

  • 开启认证

  • 集成 Eureka

  • 监控服务



7.服务的 API 文档管理

随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,演变成了前后端分离的形式,App 就是典型的前后端分离。前端和后端的唯一联系变成了 API 接口;API 文档变成了前后端开发人员联系的纽带,变得越来越重要。

  • Swagger 简介

  • 集成 Swagger 管理 API 文档

  • Swagger 注解

  • Eureka 控制台快速查看 Swagger 文档

  • 请求认证

  • Zuul 中聚合多个服务 Swagger




第四部分 高级

1.API 网关扩展

Spring Cloud Zuul 只是为我们提供了一个构建网关的架子,各种高级操作还是得结合自身的业务去做扩展。

  • 用户认证

  • 服务限流

  • 服务降级

  • 灰度发布



2.微服务之缓存

在微服务架构下,推荐每个服务都有自己独立的数据库、缓存、搜索等,这样做的优点是能够让服务之间的耦合度降低,同时可以让不同的服务根据不同的业务需求选择自己合适的存储方式。

  • Guava Cache 本地缓存

  • Redis 缓存

  • 防止缓存穿透方案

  • 防止缓存雪崩方



3.服务之存储

缓存也是高并发系统的三把利器之一,这足以说明其重要性。

  • 存储选型

  • Mongodb

  • Mysql

  • Elasticsearch



4.微服务之分布式事务解决方案

事务是一组单元化的操作,这组操作可以保证要么全部成功,要么全部失败;或者只要有一个失败的操作,就会把其他已经成功的操作回滚,以此来保证数据的完整性。

  • 两阶段型

  • TCC 补偿型

  • 最终一致性

  • 最大努力通知型事务



5.分布式任务调度

分布式任务调度和微服务架构紧密相关,普通的调度任务在微服务架构下变成了复杂的分布式任务,分布式任务需要有全局的调度功能,否则相同的任务在多节点同时执行,会导致数据错误。

  • Elastic-Job

  • 快速集成

  • 任务使用

  • 配置参数讲解

  • 多节点并行调度

  • 事件追踪

  • 扩展功能

  • 运维平台

  • 使用经验分享



6.分库分表解决方案

随着时间和业务的发展,数据库中的表会越来越多,表中的数据也会越来越多,带来的问题就是对于数据的操作会越来越慢。由于不是分布式部署,单台服务器的资源有限,最终数据库的数量和数据处理能力会遇到瓶颈,这时采用分库分表就能解决上述的问题。

  • Sharding-JDBC

  • 快速集成

  • 读写分离实战

  • 分库分表实战

  • 分布式主键



7.最佳生产实践经验

  • 开发环境和测试环境共用 Eureka

  • Swagger 和 Actuator 访问进行权限控制

  • Spring Boot Admin 监控被保护的服务

  • Apollo 配置中心简化版搭建分享

  • Apollo 使用小经验

  • Apollo 动态调整日志级别



最后

在互联网时代,互联网产品的最大特点就是需要快速发布新功能,支持高并发和大数据。传统的架构已经慢慢不能支撑互联网业务的发展,这时微服务架构便顺势而出。

Spring Cloud 提供一整套微服务的解决方案,基于 Spring Boot 可实现快速集成,且开发效率很高,堪称中小型互联网公司微服务开发的福音。而且 Spring Cloud 发布新功能的频率非常高,目前仅大版本就有很多个,同时还有庞大的社区支持,照这样的发展势头,我相信未来几年国内互联网公司的公布式系统开发一定是 Spring Cloud 的天下。

由于篇幅限制,就不一一展示了,有需要文中资料完整版的小伙伴们注意啦:点击传送门即可

发布于: 3 小时前阅读数: 5
用户头像

还未添加个人签名 2021.06.21 加入

领取资料加微信:mxh5261 备注:InfoQ 即可

评论

发布
暂无评论
凭借这份阿里内部微服务架构笔记拿下阿里、字节、小米offer