凭借这份阿里内部微服务架构笔记拿下阿里、字节、小米 offer
前言
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 的天下。
由于篇幅限制,就不一一展示了,有需要文中资料完整版的小伙伴们注意啦:点击传送门即可
版权声明: 本文为 InfoQ 作者【喝酸奶不舔盖】的原创文章。
原文链接:【http://xie.infoq.cn/article/13b420457db50de0d9ca2a51b】。未经作者许可,禁止转载。
评论