您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

微服务太多怎么办?简单聊聊微服务治理

时间:2020-06-05 15:28:06  来源:  作者:

在分布式架构中,服务间的依赖非常常见,一个业务调用通常依赖多个基础服务。如下图, 对于同步调用,当会员服务不可用时,订单服务请求线程被阻塞,当有大批量请求调用会员服务时, 最终可能导致整个会员服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,从而引发服务间的雪崩效应。


微服务太多怎么办?简单聊聊微服务治理

 

在微服务的演进过程中,为了最大化利用微服务的优势,保障系统的高可用性,需要通过一些服务支撑组件来协助服务间有效的协作,这便是服务治理的范畴。

服务注册与发现

服务化可以降低各系统间的高度耦合,使系统更易于维护和水平扩展,可以通过流控、隔离、降级等手段保障系统的可用性,以下是有货的服务化设计

微服务太多怎么办?简单聊聊微服务治理

 

对于微服务的治理而言,核心就是服务的注册和发现。所以选择哪个组件,很大程度上要看它对于服务注册与发现的解决方案。在这个领域,开源架构很多,最常见的是Zookeeper和Eureka。采用Zookeeper做为注册中心时,由于Zookeeper CP(一致性和分区容错性)的设计方式,需要做高可用的补充,一般采用在调用端缓存服务提供者信息。

微服务太多怎么办?简单聊聊微服务治理

 

负载均衡

将负载均衡的功能以库的形式集成到服务消费中。服务消费者需要访问某服务时,需要通过内置的负载均衡组件向服务注册中心查询,得到可用的服务提供者列表,然后按照某种负载均衡策略选择一个目标服务地址,最后向目标服务发起请求。

  • 随机策略:
    从可用的服务节点随机选取一个节点调用。
  • 轮询策略:
    对可用的服务节点列表按顺序依次调用。
  • 加权轮询策略:
    按照固定的权重,对可用服务节点进行轮询。
  • 最小活跃数策略:
    对各可用服务节点的请求数计数,选择连接数小的节点调用。
  • 本地优先策略:
    服务的调用者和提供者有可能被部署在同一台机器上,可通过本地调用减少网络调用中性能损耗。

服务调用客户端

服务调用客户端为服务提供了透明化和高效的RPC远程调用,将服务的注册与发现,服务调用的负载均衡以及服务的隔离和容错等服务治理策略内嵌其中,并提供服务监控和治理能力。本文采用hystrix命令模式封装REST调用,将服务的隔离、超时、限流、降级、负载均衡等策略持久化到Zookeeper上,以服务发现的方式发现服务的治理策略,并将策略应用到服务调用中,将服务的成功和失败通过Spring异步事件通知上报到influxDB中。

服务治理

服务监控

Hystrix Dashboard

Hystrix Dashboard主要用来实时监控Hystrix的各项指标信息。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统中存在的问题。

集群环境监控可使用Netflix提供的turbine进行监控。通过maven公服https://search.maven.org下载并部署war包turbine-web,修改集群节点配置,将turbine地址 http://localhost{port}/turbine.stream?cluster=default 添加监控到hystrix dashboard

turbine.aggregator.clusterConfig=default
turbine.instanceUrlSuffix=:8080/gateway/hystrix.stream
turbine.ConfigPropertyBasedDiscovery.default.instances=10.66.70.1,10.66.70.2,10.66.70.3
微服务太多怎么办?简单聊聊微服务治理

 

Hystrix Dashboard通过颜色的变化代表了实例的健康程度,它的健康程度从 绿色 > 黄色 > 橙色 > 红色 递减; 该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大实心圆就越大,所以通过该实心圆的展示,就可以在大量实例中快速的发现故障实例和高压力实例。

微服务太多怎么办?简单聊聊微服务治理

 

grafana监控

通过Spring拦截器记录服务的调用日志,并采集日志分析上报到influxDB中,通过grafana将服务调用信息近实时可视化。

微服务太多怎么办?简单聊聊微服务治理

 

服务发现客户端采集服务调用的成功及失败请求经Spring异步事件上报到influxdb,由grafana将监控数据可视化,并推送服务异常的告警信息。

微服务太多怎么办?简单聊聊微服务治理

 

服务治理

服务调用客户端的服务发现与治理的类UML图如下:

微服务太多怎么办?简单聊聊微服务治理

 

服务治理平台管理各服务的资源组,并把核心业务独立出单独的资源组进行管理。监控各服务调用的压力、平均耗时、错误数、调用趋势等信息,并可以对单个服务的超时、限流、降级、资源池、负载均衡策略进行都动态调整。

资源隔离

对服务调用实行线程池隔离,避免不同的服务失败导致线程被耗尽产生故障传播,对于部分核心流程如登录、注册、商品信息、下单支付等可在原线程隔离基础上再隔离出单独的线程池,保障核心业务不受影响。

熔断

可对不同的接口请求应用不同的超时策略,超时后直接熔断走服务降级逻辑,避免服务被拖垮。依赖服务异常次数超限后直接熔断,通过hystrix定时检查服务是否恢复。

降级

在服务调用失败、超时、熔断器开路、线程池或信号量容量超额,服务执行后备逻辑,支持服务的failfast和failsafe等容错。

限流

基于网关的服务限流措施,可结合Nginx限流使用,避免流量高峰期的系统过载过高,影响核心业务的运行。

负载均衡策略

可对不同的服务应用不同的负载均衡策略,可选择轮询、加权轮询、随机、本地优先和最小活跃数等策略。

微服务太多怎么办?简单聊聊微服务治理

 

Service Mesh

Service Mesh(服务网格) 是一个基础设施层,用于处理服务间通信。Service Mesh 实际上就是处于 TCP/IP 之上的一个抽象层。在实际应用当中,Service Mesh 通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。Service Mesh 是一种新的服务治理思想,它是把对服务的治理由应用层下沉到基础服务层。

微服务太多怎么办?简单聊聊微服务治理

 

Service Mesh作为一个独立的代理进程部署在每一台主机上,主机上的多个服务消费者(Consumer)应用可以共用这个代理来实现服务发现和负载均衡。


Service Mesh将负责服务发现、负载均衡、熔断限流等相关逻辑从原有的消费客户端进程拆分到单独的代理进程中,由这个独立部署的代理来负责服务发现、路由分流(负载均衡)、熔断限流、安全控制、监控等功能。

微服务太多怎么办?简单聊聊微服务治理

 

Service mesh 有如下几个特点:

  • 应用程序间通讯的中间层
  • 轻量级网络代理
  • 应用程序无感知
  • 解耦应用程序的重试、超时、监控、追踪和服务发现


目前Service Mesh的开源解决方案有:Buoyant 公司推出的 Linkerd 和 google、IBM 等厂商牵头的 Istio。Linkerd 更加成熟稳定些,Istio 功能更加丰富、设计上更为强大,社区相对也更加强大一些。

本文转载于博客园,原文:https://www.cnblogs.com/qingfengEthan/p/12633149.html



Tags:微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  Tags: 微服务  点击:(9)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  Tags: 微服务  点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  Tags: 微服务  点击:(35)  评论:(0)  加入收藏
实施微服务架构,我们一直在遵循一个实践原则:每个微服务要有自己独立的数据库,避免数据库层面的耦合。这种理所当然感觉好像不需要多加思考,就是应该这样做; 图片来源:James Lewi...【详细内容】
2021-10-11  Tags: 微服务  点击:(42)  评论:(0)  加入收藏
在今年的NGINX Sprint 2.0虚拟大会上,NGINX(来自流行的开源web服务器/负载均衡器和反向代理背后的公司F5),发布了NGINX现代应用参考架构(MARA)。该公司在一篇博客文章中说,这将帮...【详细内容】
2021-09-26  Tags: 微服务  点击:(61)  评论:(0)  加入收藏
今天,字节跳动正式宣布开源 CloudWeGo。这是一套以 Go 语言为核心、专注于微服务通信与治理的中间件集合,具有高性能、可扩展、高可靠的特点。项目地址:https://github.com/clo...【详细内容】
2021-09-08  Tags: 微服务  点击:(93)  评论:(0)  加入收藏
1. Spring Boot 与 Spring Cloud Spring Boot 是用于编写微服务的 Java 基础框架。在Spring Cloud 提供了各种构建全栈微服务的功能。构建小型和大型系统都适合。由于控制反...【详细内容】
2021-08-31  Tags: 微服务  点击:(162)  评论:(0)  加入收藏
现有问题在 EFK 日志收集 篇中,我们讲解了如何利用 EFK 收集 Kubernetes 集群日志。但是,还存在如下问题。 Elasticsearch 以单节点的形式部署,不能满足生产环境的要求 Fluentd...【详细内容】
2021-08-13  Tags: 微服务  点击:(104)  评论:(0)  加入收藏
在 Java 和 Kotlin 中, 除了使用Spring Boot创建微服务外,还有很多其他的替代方案。 名称 版本 发布时间 开发商 GitHub ...【详细内容】
2021-08-06  Tags: 微服务  点击:(174)  评论:(0)  加入收藏
一、微服务的现状及未来1.服务架构的演变1.1 单体架构  单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问...【详细内容】
2021-07-22  Tags: 微服务  点击:(125)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(12)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(27)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(56)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条