网易云原生架构实践之服务治理(代码片段)

author author     2022-11-03     255

关键词:

本文由  网易云 发布。

 

云原生(Cloud Native)的高阶实践是分布式服务化架构。一个良好的服务化架构,需要良好的服务发现、服务治理、服务编排等核心能力。本文为读者解析网易云的服务治理策略及其典型实践。

 

网易云微服务架构

 

在优化了版本控制策略,研发并集成了自动化构建和发布工具,实现“项目工程化”之后,网易云开始了分布式服务化架构的探索,希望解决支撑海量用户及产品高速迭代需求下的软件研发成本高、测试部署维护代价大、扩展性差等问题。

 

业务模块的独立,自然而然形成了基于 Docker 容器的微服务架构。网易云简化的微服务架构如图 1 所示,包括服务注册与发现、分布式配置管理、负载均衡、服务网关、断路器等模块。

                                               图 1 微服务架构

 

一个产品通常由多个应用组成,容器只是提供一个应用服务的能力,需要把多个应用组合编排起来才能提供服务。在服务编排上,网易云选择开源的 Kubernetes 。Kubernetes 是自动化编排容器应用的开源平台,这些操作不仅包括部署、调度和节点集群间扩展,还包括服务发现和配置服务等架构支持的基础能力。Kubernetes 对应用层面的关注、对微服务、云原生的支持及其生态,正是网易云所需要的。

 

网易云服务治理策略

 

在微服务架构下,随着业务逐渐复杂,服务数量越来越多,引入的问题也越来越复杂。如何在业务发展的同时保障服务的 SLA 和最大化利用机器资源,是摆在网易云面前一个很大的挑战。我们需要一个统一的服务治理机制对所有服务进行统一管控,保障服务正常运行。

 

服务治理范围覆盖了服务的整个生命周期,从服务建模开始,到开发、测试、审批、发布、运行时管理,以及最后的下线。我们通常说的服务治理主要是指服务运行时的治理,一个好的服务治理框架要遵循“在线治理,实时生效”原则,只有这样才能真正保障服务整体质量。下面介绍服务治理策略在服务运行时的应用。

  1. 服务越来越多,配置项越来越多,利用统一注册中心解决服务发现和配置管理问题。
  2. 服务之间存在多级依赖,靠人工已经无法理清,还要避免潜在的循环依赖问题,我们需要依赖管理机制,支持导出依赖关系图。
  3. 服务的性能数据和健康状态数据是服务治理的重要依据,比如访问量、响应时间、并发数等,因此需要有监控、健康检查和统计服务。
  4. 当一个服务的访问量越来越大,需要对服务进行扩容,然后在客户端进行流量引导和优先级调度。
  5. 面对突发流量,已经无法通过扩容解决问题时,要启用流量控制,甚至服务降级。
  6. 随着业务持续发展,要提前进行容量规划,结合服务监控数据,以确认当前系统容量能否支撑更高水位的压力。
  7. 等越来越多的微服务上线之后,从安全角度看,我们需要实施明确的权限控制策略和服务上下线流程。
  8. 通过一系列的服务治理策略,最终通过数据证明系统对外承诺的 SLA。

 

网易云典型服务治理实践

 

弹性扩缩容

 

基于负载均衡的应用弹性伸缩方案,只要将应用系统设计成无状态,在需要伸缩的时候修改负载均衡代理配置,就可以方便地水平扩容应用系统,提高系统承载能力。

 

在云原生应用架构里,我们其实有更多的选择。对于无状态服务,配合云平台提供的 AutoScaling 能力,能够快速弹性扩容,实施 DevOps。在这里,弹性扩缩容是一种重要的服务治理手段。网易云选择基于 Kubernetes 的 AutoScaling 机制实现弹性伸缩。

 

网易云采用 Kubernetes 实现应用管理,而 Kubernetes 的 Horizontal Pod Autoscaler (HPA)组件专门设计用于应用弹性扩容的控制器,它通过定期轮询 Pod 的状态(CPU、内存、磁盘、网络,或者自定义的应用指标),当 Pod 的状态连续达到提前设置的阈值时,就会触发副本控制器,修改其应用副本数量,使得 Pod 的负载重新回归到正常范围之内。如图 2 所示。

         图 2 基于 Kubernetes 的弹性扩缩容

 

例如促销活动服务的应用层是一个无状态应用,当前有两个副本,我们把弹性扩容的 CPU 使用率阈值设置为 50%。但是促销当天涌入的流量远远超过预期,使得两个副本的 CPU 使用率分别达到了 80%以上,HPA 控制器监控到这种变化,于是通知副本控制器将促销活动服务的副本数量升到 4 个。当流量峰值过后,4 个副本的 CPU 使用率慢慢降到 10% 以下,HPA 控制器计算得出两个副本即可满足负载要求,于是通知副本控制器将应用副本数量变为 2。

 

HPA控制器的副本伸缩算法可以参考Kubernetes文档

 

熔断机制

 

微服务架构中,各服务通过服务发现的方式互相依赖,虽然从单个服务看来能获得非常好的隔离性,不会因为某个进程或者服务宕掉对其他服务造成直接影响,但是从业务角度来看,单个服务实例故障还是可能造成业务访问出现问题,轻则影响服务调用方出现延迟和负载上升,重则造成业务整体异常。

 

比如,一个简单的电商场景,用户通过网站下单购买一件商品,首先将调用订单服务生成一个订单,调用支付网关完成支付,最后调用库存服务将库存量减去。在这一系列服务调用过程中,任何一个子服务因为网络故障或者服务本身异常等情况出现,都会导致用户购物车服务线程阻塞,不仅影响到用户这次购物行为失败,如果此时有大量用户同时访问,还会造成后续请求的失败。这是微服务调用中很容易出现的级联失败。针对这个问题,网易云引入了服务治理中的熔断机制,或者叫断路器模式,断路器在系统架构中的应用如图2所示。

                                     图3 断路器在系统架构中的应用

 

断路器是一个开关,本意是指电路系统上的一种保护线路电流过载的一种装置,当线路中电流太大或者发生短路时,断路器开关打开,电路切断,防止引起更加严重的后果。引申到微服务治理策略中,断路器的作用就是避免故障或者异常在微服务调用链中蔓延。它的工作机制如图4 所示。

                               图4 服务治理中的熔断机制

 

服务调用方在尝试调用远端服务时,同时提供一个 fallback 方法,就是当远端服务出现故障时,调用 fallback 方法,快速返回结果,避免级联效应,使故障隔离。同时,断路器应该需要提供一个阈值开关,当远端服务的调用连续失败次数超过某个阈值时,服务调用方直接调用 fallback 方法,不再请求远端服务。等远端服务恢复后,再恢复正常调用流程。

 

在一些场景下,网易云借助 Netflix OSS 的 Hystrix 实现断路器。Hystrix 是 Netflix 开源的库,主要提供分布式服务间交互的延时容忍与容错机制,隔离了服务间的访问入口,防止整个链路上某服务调用不通导致系统雪崩,提供 fallback(降级)机制以便增强系统弹性。另外,还提供了服务治理与监控功能。

 

Hystrix 主要提供以下几个功能。

  • 为服务提供保护,控制延迟和故障。
  • 避免复杂系统的级联故障。
  • 快速失败与高效恢复。
  • 实时监控、报警与操作控制。

 

代码示例如下。

@Component
public class ShoppingService 
@HystrixCommand(fallbackMethod = "payFail")
public Object pay(Map parameters) 
//远程调用支付服务
return;

public Object payFail(Map parameters)  
//支付失败,订单状态改为未支付
return;


 

购物服务调用 ShoppingService 的 pay()方法实现支付,支付成功则订单状态置为待发货,若支付过程中支付网关服务出现异常,导致 pay()方法调用失败,ShoppingService 的断路器会调用 payFail()方法实现失败处理,将订单状态改为未支付状态,后续用户可以通过界面选择订单继续支付。如果支付网关服务较长时间无法恢复,当 pay()连续失败次数超过阈值,熔断机制开启,断路器打开,每次对 ShoppingService 的 pay()方法的调用退化为对payFail()方法的调用,直至支付网关服务恢复正常。熔断机制在服务治理中的作用主要体现在对故障的隔离上,避免调用出现链式雪崩。

 

服务降级

 

服务降级也是服务治理策略中重要的一环。当业务出现流量峰值,或者系统中某个组成部分出现故障,保证系统整体功能仍然可用,我们可能需要停掉一些不太重要的周边系统,从而保证核心服务的 SLA。比如电商系统在进行大促时,往往会弃车保帅,优先选择停止“猜你喜欢”、“评论”等不那么重要的系统,保障购物车、支付系统可用。在微服务架构里,每个服务无论是服务提供方还是服务调用方,都应该围绕 SLA 制定不同的降级策略。按降级粒度粗细我们可以制定接口降级、功能降级、服务降级。

  • 接口降级:对于非核心接口,设置为直接返回空或异常,可以在高峰期有效减少接口逻辑对资源(CPU、内存、网络 I/O、磁盘 I/O 等)的占用和消耗。
  • 功能降级:对于非核心功能,可以设置该功能直接执行本地逻辑,不做跨服务、跨网络访问。也可以设置降级开关,一键关闭指定功能,保全系统稳定运行。
  • 服务降级:对于非核心服务,可以通过服务治理框架根据错误率或者响应时间自动触发降级策略。

 

其中,功能降级和服务降级可以通过熔断机制和断路器实现。

 

 

本文节选自网易云基础服务架构团队所著《云原生应用架构实践》,有改动。

 

了解 网易云 :
网易云官网:https://www.163yun.com/
新用户大礼包:https://www.163yun.com/gift
网易云社区:https://sq.163yun.com/

 

dtsetechtalk|云原生架构下的数字身份治理实践

摘要:由华为技术大咖VS派拉软件CTO为大家详解云原生架构下的身份管理平台,构建云安全数字身份入口。本文分享自华为云社区《DTSETechTalk|第4期:云原生架构下的数字身份治理实践》,作者:华为云社区精... 查看详情

在dubbo3.0上服务治理的实践

简介: Dubbo3.0是在云原生背景下诞生的,使用Dubbo构建的微服务遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。Dubbo3.0介绍作者|十眠自从ApacheDubbo在2011年开源以来,经过多年一众大... 查看详情

quarkus技术系列「云原生架构基建」打造基于quarkus的云原生微服务框架实践(代码片段)

...呢,我们的分享主题是“如何打造一个基于Quarkus的云原生微服务架构”,无论你之前是否了解或者熟悉Quarkus,希望通过今天的技术分享可以让你认识和知道Quarkus。进入前奏:好了,我们废话不多说,进入... 查看详情

dataops-数据开发治理一体化之网易数帆数据治理2.0实践分享

文章目录前言导读0X01网易数帆大数据1.网易数帆大数据的发展历史2.网易数帆大数据产品矩阵3.网易数帆大数据商业化定位4.用户案例墙0X02为什么数据治理项目经常失败1.我们为什么要做数据治理2.网易数帆数据生产力架构3.传统... 查看详情

云驻共创分布式技术之华为云全域调度技术与实践

题记:分布式云原生都涉及哪些核心技术?会涉及到哪些场景的应用?怎么通过分布式云原生为企业加速?分布式云原生,是一个新的概念。使用分布式技术,将云原生实践进行整合、提供应用算力、集中供给、流量治理、和数... 查看详情

浅谈容器监控和网易云计算基础服务实践(代码片段)

本文来自网易云社区docker监控的调研实践docker发展到这么久,涌现了非常多的延伸工具,有的甚至自成一套系统。相信大家都对各类编排工具有所了解。而各类监控方案也都应运而生。linux内核以及cgroup技术其实已经为监控的技... 查看详情

浅谈容器监控和网易云计算基础服务实践(代码片段)

本文来自网易云社区docker监控的调研实践docker发展到这么久,涌现了非常多的延伸工具,有的甚至自成一套系统。相信大家都对各类编排工具有所了解。而各类监控方案也都应运而生。linux内核以及cgroup技术其实已经为监控的技... 查看详情

apisix在君润人力云原生平台的架构实践(代码片段)

讲师:袁鹏,一页科技架构师摘要:君润人力采用多套ApacheAPISIX集群来满足自研服务平台的功能需求。君润人力成立于2019年,是一家以科技驱动的人力资源解决方案服务商,依托行业领先的科技水平和服务能... 查看详情

云原生微服务治理技术朝无代理架构的演进之路

...1a;本文基于对微服务治理技术从SOA,微服务框架,到云原生架构的历史发展总结,提出了一种新的基于Javaagent技术的新一代无代理架构的服务治理技术,并介绍了其相关的代表性开源项目Sermant。本文分享自华为云社区... 查看详情

《云原生入门级开发者认证》学习笔记之微服务架构介绍(代码片段)

写在前面嗯,学习云原生相关,整理课堂笔记记忆学习的原因:虽然考了CKA,了解了一些K8s相关的知识但是对云原生整个体系一直都很模糊作为Java开发来讲,微服务是大多数行业都要涉及的开源技术栈博文主要内... 查看详情

云原生架构重要组成部分之微服务(代码片段)

...了该技术架构,随着技术与理念的升级迭代,云原生概念应世而起,现在火的一塌糊涂。做为新时代的程序员,我们要抓住云原生的浪潮。这篇文章呢大致分为四部分,第一部分简单谈一下什么是云原生,... 查看详情

解读多云跨云下的容器治理与实践(代码片段)

摘要:云原生技术和云市场不断成熟,多云、多集群部署已经成为常态,未来将是编程式多云管理服务的时代。本文分享自华为云社区《华为云MCP多云跨云的容器治理与实践》,原文作者:技术火炬手。在华... 查看详情

云原生dev0ps实践

云原生DevOps落地实践过程中,从手工、工具化、自动化进而到全链路自运维体系,这种自动化的DevOps可以实现更短的业务迭代周期、更稳固的交付质量、更优化的资源成本、更好的用户体验。云原生DevOps的步骤建议:1)架构升... 查看详情

微服务架构与实践及云原生等相关概念

微服务架构与实践笔记:《微服务架构与实践》王磊著一单块架构  1 定义:对于这种功能集中、代码和数据中心化、一个发布包、部署后运行在同一进程的应用程序,我们通常称之为单块架构应用,并非物理上的分层。... 查看详情

saas化开源项目之housekeeper云上部署实践(代码片段)

...技术专家从源码构建、应用部署到系统调测,详细解读云原生SaaS应用构建的全过程。本文分享自华为云社区《HouseKeeper云上部署实践》,作者:华为云DTSE。HouseKeeper是华为云开发者团队基于SaaS项目技术支持实践,采用微服务架... 查看详情

一位云架构师用服务打动客户的故事之六(阿里云上的msp最佳实践项目分享)(代码片段)

最近找了一个典型的云服务客户的案例对内进行分享,今天把核心内容脱敏后分享出来。希望能给目前在路上(做云服务MSP)的同行,有一些借鉴意义或者帮助。该用户据全年跟进情况,目前该客户距正式启用我们公司云服务(... 查看详情

云平台的微服务架构实践

...构建过程中的一些经验总结,主要说明了PaaS层的微服务架构设计和落地。目标降低系统的复杂度,减少系统的不确定性。方法量化,标准化,自动化。架构设计标准化业务层次梳理业务体系和服务能力,将PaaS平台分层。聚合领... 查看详情

在微服务架构下基于prometheus构建一体化监控平台的最佳实践

随着Prometheus逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于Prometheus构建一体化监控平台的最佳实践和一些相关的思考,内容主要包括以下几个部分:微服务、容器化技术演进的监控之痛云原生... 查看详情