# SA实战 ·《SpringCloud Alibaba实战》第03章-微服务介绍

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)

大家好,我是冰河~~

今天,我们继续为大家分享《SpringCloud Alibaba实战 (opens new window)》专栏的内容。今天,为大家分享的内容是微服务中常见的一些概念性的内容。

# 题外话

在开始今天的正文前,冰河先说点 题外话 吧:最近冰河也在为《深入理解分布式事务系列 (opens new window)》录制视频,不少小伙伴在微信公众号后台留言催更《SpringCloud Alibaba实战 (opens new window)》的内容。所以,冰河在更新频率上也要调整下啦,尽量让《SpringCloud Alibaba实战 (opens new window)》专栏和《深入理解分布式事务系列 (opens new window)》专栏连续更新,这样不管是《SpringCloud Alibaba实战 (opens new window)》专栏,还是《深入理解分布式事务系列 (opens new window)》专栏,小伙伴们在看视频的时候和在阅读文章的时候都是连续更新的啦。

目前,我能想到的折中方案就是公众号发文时,头条发《SpringCloud Alibaba实战 (opens new window)》的内容,次条发录制的《深入理解分布式事务系列 (opens new window)》专栏的视频。小伙伴们如果有更好的方案,也可以在文末留言呀。

另外,有些小伙伴让我在更文的时候,讲一些系统架构都经历了哪些历程。其实按照这个专栏的规划吧,我想的是仅仅围绕着SpringCloud Alibaba的实战内容为大家讲解,尽快开始实战的章节。至于系统架构经历了哪些历程,冰河之前发表过一篇文章,大家可以参见《系统由单体架构到微服务架构到底是如何演进的? (opens new window)》一文。

哈哈,说了那么多题外话,好啦,开始今天的正题吧。今天给大家分享一些微服务开发过程中的一些常见概念,这样在后面为大家正式开始实战内容的话就能够统一概念了。

# 微服务化后的问题

一个系统,尤其是大型系统使用微服务架构模式进行搭建和开发时,虽然总体上能够提高研发效率、能够支持更高的并发,也能够提高系统整体的性能和可靠性,以及可维护性。但是在实现细节上还是存在着不少的问题。

(1)将系统拆分成各个微服务后,如果管理和感知那么多的服务呢?

(2)将系统拆分成各个微服务后,各个微服务之间如何通信?

(3)将系统拆分成各个微服务后,一旦系统出现问题,如何快速定位问题呢?

(4)将系统拆分成各个微服务后,如何最大程度的保证系统的可用性?

(5)将系统拆分成各个微服务后,客户端如何访问那么多的微服务?

大家可以先思考下这些问题,冰河在下一篇文章中,会为大家揭晓这些问题的答案。

# 微服务常见概念

微服务中有一些常见的概念需要大家了解,以便更好的学习后面的实战章节,冰河今天就简单整理了一些概念性的知识。

# 服务调用

将一个系统拆分成各个微服务后,各个微服务之间协同工作才能对外提供完整的服务,这就涉及到各个微服务之间的调用问题。目前各个微服务之间一般会采用Restful接口或者RPC协议的方式进行调用。

(1)Restful接口

Restful接口一般是基于HTTP协议实现的,这种协议使用上比较广泛,几乎所有的编程语言都支持HTTP协议。

(2)RPC协议

RPC是一种远程过程调用,能够做到像调用本地服务一样调用远程服务。RPC框架在底层屏蔽了数据的传输方式,序列化方式和交互的细节信息,让使用RPC框架开发微服务的人员觉得更加简单,实现起来更加容易。

# 服务治理

服务治理,说白了就是如何自动化的管理各个微服务,核心的功能就是服务的注册、发现和剔除。

(1)服务注册

各个微服务实例在启动时,能够将自身提供的服务注册到某个注册中心。

(2)服务发现

当某个微服务将自身提供的服务注册到注册中心时,其他微服务实例能够通过注册中心感知到这个微服务提供的服务,并且能够获取到这个微服务的实例信息,通过这个微服务的实例信息就能够调用这个微服务的方法,来进行相应的读写操作。

(3)服务剔除

如果某个微服务实例出现故障,或者连接一直超时,则注册中心会认为当前微服务实例不可用,就会将这个微服务实例剔除出注册中心,使其不再被其他微服务感知到和调用到。

# 注册中心

提供微服务注册、发现和剔除功能的服务组件。

# 服务网关

服务网关是所有微服务的入口,客户端在访问各个微服务时,首先需要经过服务网关。接入服务网关后,会将所有API的调用统一接入到API的网关层,由网关层统一接收参数进行路由转发,将返回的结果数据返回给客户端。

通常情况下,一个服务网关最基本的功能包括:统一接入、限流、熔断、降级、安全防护、协议适配、容错等等。主要专注的是对系统安全、流量和路由等的管理。这样,业务开发人员就可以专注于开发业务逻辑啦。

# 服务限流

在高并发大流量场景下,经常会出现某个服务或者接口因为调用的流量过大而导致不可用的情况,由于某个服务或者接口的不可用,可能还会导致整个系统崩溃。此时,就会对系统采取限流的手段来进行防护,当请求达到一定的频率或者速率时,对这些请求采取排队、等待、降级等策略,甚至是拒绝服务。

# 服务熔断

如果某个服务出现故障不可用,或者调用超时,为了不让其他服务受到牵累而导致整个系统不可用,则断开与这个服务的连接,暂停对这个服务的调用。

# 服务降级

服务降级主要是从整个系统的负载情况进行考虑,如果某些服务的负载情况比较高,则为了预防某些功能出现负载过高而导致响应慢的问题,会在提供这些功能的方法内部暂时舍弃对一些非核心功能接口的调用,直接返回一个提前准备好的错误处理信息。

服务降级是有损服务,但是能够保证整个系统的稳定性和可用性。

# 服务容错

服务容错指的是微服务能够容纳一定错误情况的发生。从某种意义上说,服务限流、服务熔断和服务降级都是服务容错的措施。

# 链路追踪

当系统被拆分成各个微服务后,一次请求往往会涉及到多个服务之间的调用关系。如果系统出现问题,则会增加定位问题的难度。为了解决这个问题,就需要对一次请求涉及到的多个服务链路的日志进行追踪和记录,一方面可以记录调用的链路,另一方面还可以监控系统中各个调用环节的性能,这就是链路追踪。

# SpringCloud Alibaba

SpringCloud Alibaba是阿里开源的一套微服务解决方案,包含各种微服务组件,能够极大的方便开发人员构建微服务应用。

# 主要功能

  • 服务限流降级:默认支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Spring Cloud Gateway、Zuul、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

除了上述所具有的功能外,针对企业级用户的场景,Spring Cloud Alibaba 配套的企业版微服务治理方案 微服务引擎 MSE 还提供了企业级微服务治理中心,包括全链路灰度、服务预热、无损上下线和离群实例摘除等更多更强大的治理能力,同时还提供了企业级 Nacos 注册配置中心,企业级云原生网关等多种产品及解决方案。

# 组件

  • Sentinel (opens new window):把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • Nacos (opens new window):一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • RocketMQ (opens new window):一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  • Dubbo (opens new window):Apache Dubbo™ 是一款高性能 Java RPC 框架。
  • Seata (opens new window):阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  • Alibaba Cloud OSS (opens new window): 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • Alibaba Cloud SchedulerX (opens new window): 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  • Alibaba Cloud SMS (opens new window): 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

注:SpringCloud Alibaba部分转载:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md (opens new window)

好了,今天就到这儿吧,从下一篇开始,我们正式进入实战章节,我是冰河,我们下期见~~

# 星球服务

加入星球,你将获得:

1.项目学习:微服务入门必备的SpringCloud Alibaba实战项目、手写RPC项目—所有大厂都需要的项目【含上百个经典面试题】、深度解析Spring6核心技术—只要学习Java就必须深度掌握的框架【含数十个经典思考题】、Seckill秒杀系统项目—进大厂必备高并发、高性能和高可用技能。

2.框架源码:手写RPC项目—所有大厂都需要的项目【含上百个经典面试题】、深度解析Spring6核心技术—只要学习Java就必须深度掌握的框架【含数十个经典思考题】。

3.硬核技术:深入理解高并发系列(全册)、深入理解JVM系列(全册)、深入浅出Java设计模式(全册)、MySQL核心知识(全册)。

4.技术小册:深入理解高并发编程(第1版)、深入理解高并发编程(第2版)、从零开始手写RPC框架、SpringCloud Alibaba实战、冰河的渗透实战笔记、MySQL核心知识手册、Spring IOC核心技术、Nginx核心技术、面经手册等。

5.技术与就业指导:提供相关就业辅导和未来发展指引,冰河从初级程序员不断沉淀,成长,突破,一路成长为互联网资深技术专家,相信我的经历和经验对你有所帮助。

冰河的知识星球是一个简单、干净、纯粹交流技术的星球,不吹水,目前加入享5折优惠,价值远超门票。加入星球的用户,记得添加冰河微信:hacker_binghe,冰河拉你进星球专属VIP交流群。

# 星球重磅福利

跟冰河一起从根本上提升自己的技术能力,架构思维和设计思路,以及突破自身职场瓶颈,冰河特推出重大优惠活动,扫码领券进行星球,直接立减149元,相当于5折, 这已经是星球最大优惠力度!


领券加入星球,跟冰河一起学习《SpringCloud Alibaba实战》、《手撸RPC专栏》和《Spring6核心技术》,更有已经上新的《大规模分布式Seckill秒杀系统》,从零开始介绍原理、设计架构、手撸代码。后续更有硬核中间件项目和业务项目,而这些都是你升职加薪必备的基础技能。

100多元就能学这么多硬核技术、中间件项目和大厂秒杀系统,如果是我,我会买他个终身会员!

# 其他方式加入星球

特别提醒: 苹果用户进圈或续费,请加微信 hacker_binghe 扫二维码,或者去公众号 冰河技术 回复 星球 扫二维码加入星球。

# 星球规划

后续冰河还会在星球更新大规模中间件项目和深度剖析核心技术的专栏,目前已经规划的专栏如下所示。

# 中间件项目

  • 《大规模分布式定时调度中间件项目实战(非Demo)》:全程手撸代码。
  • 《大规模分布式IM(即时通讯)项目实战(非Demo)》:全程手撸代码。
  • 《大规模分布式网关项目实战(非Demo)》:全程手撸代码。
  • 《手写Redis》:全程手撸代码。
  • 《手写JVM》全程手撸代码。

# 超硬核项目

  • 《从零落地秒杀系统项目》:全程手撸代码,在阿里云实现压测(已上新)。
  • 《大规模电商系统商品详情页项目》:全程手撸代码,在阿里云实现压测。
  • 其他待规划的实战项目,小伙伴们也可以提一些自己想学的,想一起手撸的实战项目。。。

既然星球规划了这么多内容,那么肯定就会有小伙伴们提出疑问:这么多内容,能更新完吗?我的回答就是:一个个攻破呗,咱这星球干就干真实中间件项目,剖析硬核技术和项目,不做Demo。初衷就是能够让小伙伴们学到真正的核心技术,不再只是简单的做CRUD开发。所以,每个专栏都会是硬核内容,像《SpringCloud Alibaba实战》、《手撸RPC专栏》和《Spring6核心技术》就是很好的示例。后续的专栏只会比这些更加硬核,杜绝Demo开发。

小伙伴们跟着冰河认真学习,多动手,多思考,多分析,多总结,有问题及时在星球提问,相信在技术层面,都会有所提高。将学到的知识和技术及时运用到实际的工作当中,学以致用。星球中不少小伙伴都成为了公司的核心技术骨干,实现了升职加薪的目标。

# 联系冰河

# 加群交流

本群的宗旨是给大家提供一个良好的技术学习交流平台,所以杜绝一切广告!由于微信群人满 100 之后无法加入,请扫描下方二维码先添加作者 “冰河” 微信(hacker_binghe),备注:星球编号

冰河微信

# 公众号

分享各种编程语言、开发技术、分布式与微服务架构、分布式数据库、分布式事务、云原生、大数据与云计算技术和渗透技术。另外,还会分享各种面试题和面试技巧。内容在 冰河技术 微信公众号首发,强烈建议大家关注。

公众号:冰河技术

# 视频号

定期分享各种编程语言、开发技术、分布式与微服务架构、分布式数据库、分布式事务、云原生、大数据与云计算技术和渗透技术。另外,还会分享各种面试题和面试技巧。

视频号:冰河技术

# 星球

加入星球 冰河技术 (opens new window),可以获得本站点所有学习内容的指导与帮助。如果你遇到不能独立解决的问题,也可以添加冰河的微信:hacker_binghe, 我们一起沟通交流。另外,在星球中不只能学到实用的硬核技术,还能学习实战项目

关注 冰河技术 (opens new window)公众号,回复 星球 可以获取入场优惠券。

知识星球:冰河技术