欢迎访问网易云社区,了解更多网易技术产品运营经验。

云原生(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 等)的占用和消耗。

  • 功能降级:对于非核心功能,可以设置该功能直接执行本地逻辑,不做跨服务、跨网络访问。也可以设置降级开关,一键关闭指定功能,保全系统稳定运行。

  • 服务降级:对于非核心服务,可以通过服务治理框架根据错误率或者响应时间自动触发降级策略。

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

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

延伸阅读

360°透视:云原生架构及设计原则

360°透视:云原生架构演进

基于云原生的秒杀系统设计思路

上云、微服务化和DevOps,少走弯路的办法

从DevOps到Cloud Native,应用上云姿势全解锁

网易云:网易容器云平台的微服务化实践(一)

网易云计算基础服务为您提供容器服务,欢迎点击免费试用。

相关文章:
【推荐】 搜索凑单页大促显示延迟方案设计
【推荐】 网易HBase基准性能测试之准备篇

网易云原生架构实践之服务治理相关推荐

  1. InfoQ专访网易云陈谔:用微服务体系满足企业数字化转型需求

    现在的公有云市场,国外有AWS,Google Cloud和微软的Azure三足鼎立,国内则是阿里云一家独大,即便如此,在数字化浪潮下,云计算市场依然有很多玩家进场,各家竞争也相当激烈.在这样的环境下, ...

  2. 云原生架构下日志服务数据预处理

    简介:本篇实践将以某家国际教育机构为例,为大家详细介绍云原生架构下日志服务数据预处理以及对应的解决方案和最佳实践操作手册,方便用户快速对号入座,解决云原生架构下的常见日志难题. 直达最佳实践:[htt ...

  3. 2018中国云原生用户大会:网易云爆料完整微服务的研发过程

    近日,由才云科技.K8sMeetup 中国社区.Kubeflow 中国社区联合主办的 2018 中国云原生用户大会在杭州白马湖建国饭店举办,来自各个行业领域的云原生技术专家.云原生技术落地企业代表.以 ...

  4. 网易云基于Prometheus的微服务监控实践

    当监控遇上微服务 在过去数年里,微服务的落地一直都是业界重点关注的问题,其始终面临着部署.监控.配置和治理等方面的挑战.轻舟微服务平台是网易云为企业提供的一套微服务解决方案,其中微服务监控是其关注的重 ...

  5. 网易云音乐面向用户增长的数据治理实践

    导读:大数据时代,用户的行为深刻影响着企业产品的变革与创新,如何追溯和分析用户行为,沉淀数字资产,并利用它实现精准化营销和产品价值提升,需要更多的探索与实践.本次分享的题目为用户分群数据化运营智能决策 ...

  6. 云原生架构下微服务最佳实践-如何拆分微服务架构

    转自: https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651821066&idx=1&sn=8475f813a8 ...

  7. 网易云以场景化云服务力拓教育行业

    5月24日, "2017年中国互联网+教育CEO高端研讨会"在北京举行.研讨会就云计算.人工智能等科技力量赋能教育产业升级的前景和实践进行了探讨.网易云通信与视频副总经理王丹丹发表 ...

  8. 京东零售大数据云原生架构实践

    通常谈到大数据,想到的是大数据平台.Hadoop生态或者数据湖技术,关注于大数据存储.大数据计算方向上的技术发展与应用:谈到云原生,想到的是微服务架构.容器化或者SRE(Site Reliabilit ...

  9. RocketMQ 在网易云音乐的实践

    本文作者:蒋星韬,网易云音乐服务端开发工程师. 云音乐线上场景众多,比如直播.评论.广告,各个业务线都会有消息场景比如发奖券,也会有延迟消息和事务消息场景,以及大数据做埋点数据.数据清洗.离线处理等. ...

  10. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

最新文章

  1. 4岁学编程,19岁创办以太坊,4年十亿身家!
  2. gslang——原生golang/RPC描述语言简介
  3. 在计算机上工作用英语怎么说,“Go to work”是“去上班”,那“上夜班”用英语怎么说呢?...
  4. 科学计算机要用的电池是几号,科学计算器的常识及注意事项
  5. UI渲染回顾简单笔记
  6. SAP Fiori Elements - how to set breakpoint to get converted xml view parsed by f
  7. java 不同类型 映射_如何使用Java泛型映射不同的值类型
  8. java 模块化 soa_OSGI与SOA的千丝万缕
  9. qq邮箱如何在win10邮箱连接到服务器,win10系统下邮箱怎么添加qq邮箱
  10. PCL——4.深度图像
  11. javascript 操作cookie
  12. 红帽9linux安装ios,红帽linux9.0安装教程
  13. 2018年尚硅谷徐靖博老师的分布式电商项目视频
  14. ant Design Vue2.0+vite+vue3+typescript+node后台项目实现使用upload一个表单上传多个图片
  15. 我用前世的五百次回眸换今生与你一次擦肩而过
  16. python图例重复显示_python matplotlib图例重复
  17. 用CSS实现一个抽奖转盘(附详细代码+思路)
  18. Latest - 2021 - 08 Giuhub Access
  19. available: expected single matching bean but found 2
  20. STM32学习记录:输入捕获应用

热门文章

  1. Linux 通配符 与 正则表达式 的区别与详解
  2. 东芝B-SX5T标签打印机安装过程
  3. 【SSH网上商城项目实战26】完成订单支付后的短信发送功能
  4. 内存颗粒位宽和容量_内存颗粒编码原则,方便大家识别颗粒是否可用与扩容
  5. 加固工程验收规范50550_GB 50550-2010建筑结构加固工程施工质量验收规范
  6. typecho图片插件_Ideal ——接近Typecho完美的插件
  7. Windows10系统如何开启和关闭隐藏的卓越性能模式
  8. 周期均方根和有效值的区别_电流电压“均方根值”为何是有效值?
  9. [网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
  10. 后疫情时代|如何才能让居家办公变得更高效?