通用的微服务架构应包含哪些组件

相对于单体式架构的简单粗暴,微服务架构将应用打散,形成多个微服务进行独立开发、测试、部署与运维。虽然从管理与逻辑上更符合业务需要,但微服务架构也带来了诸多急需解决的核心问题:

  1. 如何发现新服务节点以及检查服务节点的状态?
  2. 如何发现服务及负载均衡如何实现?
  3. 服务间如何进行消息通信?
  4. 如何对使用者暴露服务 API?
  5. 如何集中管理众多服务节点的配置文件?
  6. 如何收集服务节点的日志并统一管理?
  7. 如何实现服务间调用链路追踪?
  8. 如何对系统进行链路保护,避免微服务雪崩?

可以发现,上述这些问题并不是针对某种语言或某种技术的,任何软件厂商要构建微服务架构就必须面对这些问题,要么独立开发要么将已有多种技术整合形成整体解决方案。好在经过多年沉淀,业内已经有了标准答案,下图清晰的说明微服务架构需要的标准组件。

下面我来介绍每种组件的职责。

  • 注册中心(Service Registry):注册中心是微服务架构最核心的组件。它起到新服务节点的注册与状态维护的作用,通过注册中心解决了上述问题 1。微服务节点在启动时会将自身的服务名称、IP、端口等信息在注册中心中进行登记,注册中心会定时检查该节点的运行状态。注册中心通常会采用心跳机制最大程度保证其持有的服务节点列表都是可用的。

  • 负载均衡(Load Balance):负载均衡器解决了问题 2。通常在微服务彼此调用时并不是直接通过IP、端口直接访问,而是首先通过服务名在注册中心查询该服务拥有哪些可用节点,然后注册中心将可用节点列表返回给服务调用者,这个过程称为“服务发现”。因服务高可用的要求,服务调用者会接收到多个可用节点,必须要从中进行选择,因此在服务调用者一端必须内置负载均衡器,通过负载均衡策略选择适合的节点发起实质的通信请求。

  • 服务通信(Communication):服务通信组件解决了问题 3。在微服务定义中阐述服务间通信采用轻量级协议,通常是 HTTP RESTful 风格。但因 RESTful 风格过于灵活,必须加以约束,通常在应用时对其进行上层封装,例如在 Spring Cloud 中就提供了 Feign 和 RestTemplate 两种技术屏蔽底层实现 RESTful 通信细节,所有开发者是基于封装后统一的SDK进行开发,这有利于团队间协作。

  • API 服务网关(API Gateway):服务网关解决问题 4。对于最终用户来说,微服务的通信与各种实现细节应该是透明的,用户只需关注他要使用的 API 接口即可。因此微服务架构引入服务网关控制用户的访问权限。服务网关是外部环境访问内部微服务的唯一途径,在这个基础上还可以扩展出其他功能,例如:用户认证与授权、容错限流、动态路由、A/B测试、灰度发布等。

  • 配置中心(Config Management):配置中心解决问题 5。微服务架构下,微服务节点都包含自己的各种配置文件,如JDBC地址、自定义配置、环境配置等。要知道互联网公司微服务节点可能是成千上万个,如果这些配置信息分散存储在节点上,如发生配置变更就必须逐个调整,这必将给运维人员带来巨大的工作量。配置中心便因此而生,通过部署配置中心服务器,将原本分散的配置文件从应用中剥离,集中转存到配置中心。一般配置中心会提供 UI 界面,可以方便快捷的实现大规模集群的配置调整。

  • 集中式日志管理(Centralized Logging):集中式日志解决问题 6。因为微服务架构默认将应用日志分散保存在每一个微服务节点上,当系统进行用户行为分析、数据统计时必须收集所有节点日志数据。那如何有效收集所有节点的运行日志,并对其进行分析汇总呢?业内常见的方案有 ELK、EFK,通过搭建独立的日志收集系统,定时抓取增量日志形成有效的统计报表,为决策提供数据支撑。

  • 分布式链路追踪(Distributed Tracing):分布式追踪解决问题 7。一个复杂的业务流程可能需要连续调用多个微服务,我们需要记录一个完整业务逻辑涉及的每一个微服务的运行状态,再通过可视化链路图展现,帮助软件工程师在系统出错时分析解决问题。

  • 服务保护(Service Protection):服务保护解决问题 8。在服务间通信过程中,如果某个微服务出现响应高延迟可能会导致线程池满载,严重时会引起系统崩溃。这里就需要引入服务保护组件实现高延迟服务的快速降级,避免系统崩溃。

以上是在微服务架构过程中派生的新问题以及对应的解决方案,这些组件是微服务架构设计时必须考虑的事情。在实现层面,Java 是目前对微服务生态支持最好的编程语言,下面我们就来介绍在Java中如何实现微服务架构的。

Spring Cloud 是如何支撑微服务架构的
下面这张图很好地诠释了 Spring、Spring Boot、Spring Cloud 它们之间的关系。Spring Cloud 提供了完整的微服务架构的技术生态,像刚才我们提到的微服务架构标准组件,在 Spring Cloud 中都有着对应的实现。

不过这里有一点需要注意,Spring Cloud 并不是完全由 Spring 机构自主开发的,秉持不重复造轮子的理念,Spring 机构整合了多家厂商的优秀开源产品,比如注册中心就选用了 Netflix 的 Eureka,在此基础上进行整合形成了完整的 Java 微服务架构解决方案。刚才我们列举出来的 8 个微服务的标准组件在 Spring Cloud 中都有对应的具体实现,值得注意的是同一类组件 Spring Cloud 可能给出多种不同的开源产品供我们选择,这些产品在 Spring Cloud 下是彼此兼容的。

以上是 Spring Cloud 的主要组成部分,这里还有许多没有提到的功能组件,如果你对此感兴趣,可以到 Spring Cloud 官网了(https://spring.io/projects/spring-cloud)解更详细的内容。

功能更强大的国产微服务生态Spring Cloud Alibaba
Spring Cloud Alibaba是直接隶属于 Spring Cloud 的子项目。官网是:https://spring.io/projects/spring-cloud-alibaba#overview

Spring Cloud Alibaba是国产的微服务开发一站式解决方案,与原有 Spring Cloud 兼容的同时对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国情的微服务架构。

下面是 Spring Cloud 与 Spring Cloud Alibaba 的对比表格。

我将两者从不同维度进行比对,可以发现相比 Spring Cloud,Spring Cloud Alibaba 对服务注册、配置中心与负载均衡功能都整合进 Nacos,这样简化了微服务架构的复杂度,出问题的概率也会降低。原有的服务保护组件也调整为 Sentinel,相较Hystrix功能更强大,使用也更加友好。在表格最下方也可看到 Spring Cloud Alibaba 基于阿里云强大的能力提供了更多的新特性,很多复杂的应用场景通过 Spring Cloud Alibaba 结合阿里云便可轻松实现。在后面的内容,我们以这个表格作为主线对组件进行逐一讲解,让你轻松掌握各组件用法与设计原理。

01 | 顶层设计:微服务生态与 Spring Cloud Alibaba相关推荐

  1. 微服务生态与 Spring Cloud Alibaba

    通用的微服务架构应包含哪些组件 相对于单体式架构的简单粗暴,微服务架构将应用打散,形成多个微服务进行独立开发.测试.部署与运维.虽然从管理与逻辑上更符合业务需要,但微服务架构也带来了诸多急需解决的核心 ...

  2. openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba

    1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. ...

  3. 微服务架构与Spring Cloud Alibaba

    微服务架构与Spring Cloud Spring Cloud 微服务架构 1 微服务架构概述 2 Spring Cloud 微服务简介 3 Spring Cloud 技术栈 4 总结 Spring ...

  4. 名不虚传。涵盖全微服务操作的Spring Cloud Alibaba PDF竟出自阿里

    前言 Spring Cloud Alibaba为分布式应用开发提供了一站式解决方案.它包含开发分布式应用程序所需的所有组件,可以轻松地使用Spring Cloud开发应用程序. 使用Spring Cl ...

  5. 微服务为什么选Spring Cloud

    转载自   微服务为什么选Spring Cloud 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技术栈也是多种多样的,本系列文章主要介绍这些技术 ...

  6. 微服务治理框架- - -Spring Cloud

     前言:最近微服务很是火热,那么什么是微服务?相信小伙伴们对此也是一知半解,那么今天叶秋学长带领大家一起学习微服务治理框架Spring Cloud,快来跟着学长一起学习吧~~ 目录 对SpringCl ...

  7. python微服务 企业管理_Python写的微服务如何融入Spring Cloud体系?

    前言 在今天的文章中小码哥将会给大家分享一个目前工作中遇到的一个比较有趣的案例,就是如何将Python写的微服务融入到以Java技术栈为主的Spring Cloud微服务体系中?也许有朋友会有疑问,到 ...

  8. 微服务架构集大成者—Spring Cloud (转载)

    软件是有生命的,你做出来的架构决定了这个软件它这一生是坎坷还是幸福. 本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义. 1 背景 2 ...

  9. 微服务理念与Spring Cloud入门-----父工程与API子工程的创建教程

    前言 随着软件工程的规模的迅速扩大,对响应的速度的要求的越来越高,软件的开发过程面临越来越大的挑战.为了提高开发的效率,和质量,以及对成本的压缩,对软件的模块化,以及希望像硬件模块一样,能即插即用,成 ...

最新文章

  1. 你真懂JavaScript吗?
  2. 微信多开txt_微信仅需3步操作,就能多开登录?手把手包教包会
  3. 智能音箱AEC中的回采信号
  4. java基础(十一) 枚举类型
  5. 帝国cms调用栏目自定义字段(栏目简介)如何操作
  6. gdb pwndbg插件安装
  7. 小米MIX 4 8月不会发布:或配屏下摄像头/100W快充
  8. 第三章 寄存器(内存访问)
  9. php array 删除末尾,PHP array_pop():删除数组末尾的元素
  10. 怎么用SQL sever打开mdf
  11. 为手机游戏而生的Linux 发行版
  12. C语言 自定义数据类型(结构体 typedef 共用体 位段 枚举)
  13. Tomcat解惑 之 CATALINA_HOME与CATALINA_BASE
  14. 360随身wifi2驱动 v5.3.0.1035 官方版
  15. android 蓝牙相关的类,Android中BluetoothAdapter类简介
  16. iOS相册、拍照、iCloud使用
  17. ElasticSearch:Reindex数据迁移使用
  18. CDR2022首发全新版本性能介绍
  19. 内码转换技术 (转)
  20. 4个步骤:聚类分析如何分析用户?

热门文章

  1. SQL查询重复记录方法大全 转
  2. Chrome浏览器查看cookie
  3. AC日记——凌乱的yyy 洛谷 P1803
  4. Firefox火狐浏览器自用技巧汇总--以备使用--13.5.16
  5. Spring中使用JDBC
  6. 模拟器上安装不能被卸载的apk
  7. 斯特林数第一类数的应用 hdu3625
  8. 向io设备发出中断请求_人们常说的计算机设备管理是什么,深入解读计算机设备管理...
  9. java7 arm_zynq7000系列移植—JDK1.7 移植到嵌入式ARM平台
  10. ant如何形成时间轴和图库_高中历史时间轴来了(电子高清版),最新最完整的复习时间线整理,这里都有!...