`
zhengyun_ustc
  • 浏览: 82566 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

#研发解决方案介绍#基于持久化配置中心的业务降级

阅读更多
郑昀 最后更新于2014/4/18
关键词:业务降级,配置中心,基本可用性,diamond

A.业务降级的背景知识:

  淘宝就双十一课题曾经讲过:

所谓业务降级,就是牺牲非核心的业务功能,保证核心功能的稳定运行。简单来说,要实现优雅的业务降级,需要将功能实现拆分到相对独立的不同代码单元,分优先级进行隔离。在后台通过开关控制,降级部分非主流程的业务功能,减轻系统依赖和性能损耗,从而提升集群的整体吞吐率。

主动关闭系统功能的场景:
  我们更新系统或数据库刷库时,可能会提出,某天凌晨几点到几点不能下单,几点到几点不能验证,如果都靠人工手动调整、手动开关跳转页面或提示文字的话,非 常不方便。而我们的理念是,日常发生的事情,不能有心理负担,不能成为一件很麻烦甚至需要临时修改代码的事情。所以停服引发的降级,需要方便快捷地做到。
  于是,一个集中存储的开关控制这些核心功能全线关闭,可以有。
 
被动关闭系统功能的场景:
  我们都知道,某东在2011年,某客在2012年,某美在2013年,耗费了很多人财物为大促销做准备,结果时间到了,网站宕机宕得死死的。
  此时,限制连接数可能会让网站暂时性活过来了,但是能进来的人不多,销售额上不去,其实还是公司损失
  在这种被动的场景下,可以力保核心购买流程能走通,保证基本可用性,即确保能够下单和提交支付,保证钱能流进来,同时保证消费验证。
  所以业务降级的做法是,逐一全局关闭非核心流程的业务功能
 

B.窝窝业务降级的实操:

  与之前窝窝实现的业务降级不同,研发1部的明骏把 降级功能配置 与 降级项目配置 分开,如下图1所示:

图1 业务降级配置管理的菜单项

  即:

一,降级的最小单位是 功能 

我可以单独针对“(首页右侧栏)热门专卖店(列表)”功能。如下图2所示,配置状态为“未过滤”代表该功能未被拦截。

图2 功能配置实例

  1.1.可以获知该(URL/class拦截)功能在哪些项目里生效。如上图2中的“所含项目配置”列所示。

  1.2.可以配置跳转地址,如下图3所示。第一,如果功能过滤启用了,当拦截到目标后,需要引导浏览器跳转到哪一个页面,譬如跳到停服公告页上。第二,可以定义启用时间,比如明天凌晨1点。

图3 功能配置详情页

  1.3.如果一个功能被多个项目包含,比如“(通栏)广告”功能被 aether 和 mars 包含,那么当这个功能处于“已过滤”时,aether 和 mars 上的通栏广告就会都消失,即使这两个项目的配置状态为“未过滤”。

  1.4.过滤某个功能,点击配置状态列的按钮即可,启用状态如下图4所示。

图4 功能处于已过滤

 二,功能 之上是 项目 

  2.1.项目 的出现,是为了更灵活多样地降级。

  2.2.你既可以过滤横跨多个项目的一个功能,一关全关。你也可以只关某个项目里的功能集合,比如你可以只关闭 aether 工程里的通栏广告和推荐列表。

  2.3.当 项目 处于“已过滤”状态时,不想过滤某个功能,那就勾掉它,如下图5所示。

图5 项目配置详情页

  2.4.在 被动关闭系统功能场景 里,由于目前还没有开发 预案级降级,所以最快的办法是,到 降级功能配置管理 里,把相关功能的开关全部打开。

  2.5.有了基于 功能和项目 的降级配置管理,下一步就可以基于(远端)服务质量做自动降级了。

 

三,项目 之上是 预案 

  3.1.举例,红色预警预案将关闭所有 下单、支付、充值 等功能,橙色预警预案将关闭所有 推荐、评价、积分 等功能。

  3.2.预案 级别的降级控制目前还没有实现。

 

C.持久化配置中心的背景知识:

  diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。

  diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据。

  持久配置是指配置数据会持久化到磁盘和数据库中。

  diamond的特点是简单、可靠、易用:

简单:整体结构非常简单,从而减少了出错的可能性。

可靠:应用方在任何情况下都可以启动,在承载淘宝核心系统并正常运行一年多以来,没有出现过任何重大故障。

易用:客户端使用只需要两行代码,暴露的接口都非常简单,易于理解。

 

  值得一提的是 diamond 的容灾机制,这也是阿里系不少开源中间件的容灾通用思路。

C.1.diamond的容灾机制

  diamond之所以表现的稳定可靠,除了架构简单之外,另一个重要原因是diamond具有一套完备的容灾机制,容灾机制涉及到client和server两部分,主要包括以下几个方面:

c.1.1.server存储数据的方式

  server存储数据是“数据库 + 本地文件”的方式,集群间的数据同步我们在之前的文章中讲过(请参考专题二的原理部分),client订阅数据时,访问的是本地文件,不查询数据库,这样即使数据库出问题了,仍然不影响client的订阅。

c.1.2.server是一个集群

  这是一个基本的容灾机制,集群中的一台server不可用了,client发现后可以自动切换到其他server上进行访问,自动切换在client内部实现。

c.1.3.client保存snapshot

  client每次从server获取到数据后,都会将数据保存在本地文件系统,diamond称之为snapshot,即数据快照。当client下次启动发现在超时时间内所有server均不可用(可能是网络故障),它会使用snapshot中的数据快照进行启动。

c.1.4.client校验MD5

  client每次从server获取到数据后,都会进行MD5校验(数据保存在response body,MD5保存在response header),以防止因网络故障造成的数据不完整,MD5校验不通过直接抛出异常。

c.1.5.client与server分离

  client可以和server完全分离,单独使用,diamond定义了一个“容灾目录”的概念.

  client在启动时会创建这个目录,每次主动获取数据(即调用getAvailableConfigInfomation()方法),都会优先从“容灾 目录”获取数据,如果client按照一个固定的规则,在“容灾目录”下配置了需要的数据,那么client直接获取到数据返回,不再通过网络从 diamond-server获取数据。

  同样的,在每次轮询时,都会优先轮询“容灾目录”,如果发现配置还存在于其中,则不再向server发出轮询请求。 以上的情形, 会持续到“容灾目录”的配置数据被删除为止。

 

根据以上的容灾机制,我们可以总结一下diamond整个系统完全不可用的条件:

  1. 数据库不可用。 
  2.  所有server均不可用。 
  3.  client主动删除了snapshot。
  4.  client没有备份配置数据,导致其不能配置“容灾目录”。 

同时满足以上4个条件的概率,在生产环境中是极小的。

 

D.窝窝配置持久化的实操:

  窝窝把各种业务限流、各种白名单放在 diamond 里了。其实就是 key/value 存储。如下图6所示.

 

图6 放入 diamond 统一管理的各种配置项

 

-over-

分享到:
评论

相关推荐

    java持久化的解决方案

    ### Java持久化的解决方案详解 #### 引言:信息载体与持久化需求 在软件工程领域,数据持久化是一项至关重要的技术,它确保了应用程序在不同会话之间或系统重启后仍能保持数据的一致性和完整性。Java作为一种广泛...

    sentinel-mysql规则持久化,持久化规则数据至mysql,包含数据表结构,一键启动

    总的来说,这个项目提供了一个完整的 Sentinel 规则持久化到 MySQL 的解决方案,包括必要的数据表结构、配置文件、控制台 JAR 包以及一键启动脚本。通过这个方案,开发者可以方便地管理和维护 Sentinel 的流量规则,...

    sentinel 1.8.3持久化到nacos

    Spring Cloud 是一套微服务解决方案,它包含了一系列微服务开发过程中可能会用到的工具和组件,例如服务注册与发现、配置中心、熔断器等。Spring Cloud 和 Sentinel 的整合,可以让开发者在 Spring Cloud 生态系统中...

    sentinel结合nacos配置中心持久化

    sentinel结合nacos配置中心持久化

    sentinel-dashboard-1.8.5源码改造版(完美支持持久化到Nacos配置中心)

    在本项目中,"sentinel-dashboard-1.8.5源码改造版" 已经被优化,使得 Sentinel Dashboard 能够完美地将规则持久化到 Nacos 配置中心,无需用户进行额外的参数配置。 1. **Sentinel Dashboard 源码改造** - ...

    Java对象持久化技术概述

    本书特别关注Hibernate这一开源框架的应用,因为Hibernate作为ORM(Object Relational Mapping,对象关系映射)工具,已经成为Java开发中最流行的持久化解决方案之一。 #### 二、Java应用程序的分层架构 ##### ...

    SmartX容器超融合与持久化存储方案.pptx

    该解决方案基于SmartX容器超融合技术,结合持久化存储方案,提供了一个灵活、高效、安全的容器化解决方案。 根据 Gartner 的预测,到 2022 年,全球超过 75% 的组织将在生产环境中运行容器化应用程序。这意味着容器...

    Java对象持久化的介绍等等

    ### Java对象持久化的详细介绍 #### 一、对象持久化概念 **对象持久化**是指将对象的状态信息(即对象的数据成员)保存到某种持久性存储介质(如硬盘、磁盘等)上的过程。这种方式可以确保即使在应用程序关闭后,...

    Redis持久化以及集群部署

    通过本文的介绍,我们可以了解到 Redis 持久化机制的选择以及集群部署方案的重要性。不同场景下应综合考虑各种因素来做出最佳决策。同时,在实际部署过程中还需要关注一些细节问题,如客户端兼容性、数据一致性保障...

    redis持久化方式

    本文将详细介绍这两种持久化方式的原理、配置方法及其各自的优缺点。 #### RDB 持久化 RDB 持久化是一种将 Redis 在内存中的数据库记录定期 dump 到磁盘上的机制。这种方式通过创建数据库快照来实现数据的持久化。...

    基于英特尔傲腾持久内存的高性能 低延迟超融合解决方案.pdf

    * 定义:超融合技术是一种基于虚拟化和 Software-Defined Storage(SDS)的解决方案,旨在整合计算、存储、网络等资源,提供高可扩展性和灵活性的数据中心基础架构。 * 优势:架构简单、易于扩展、灵活、可靠、高效...

    Quartz2.2.1存储与持久化-基于Spring的配置

    在这个基于Spring的配置中,我们将深入探讨如何在Spring应用中集成Quartz,实现任务的存储和持久化。 首先,我们需要在Spring配置文件中引入Quartz的相关bean。这通常包括`SchedulerFactoryBean`,它是Spring管理...

    sentinel集成nacos持久化

    2. **集中式配置**:Nacos 作为配置中心,可以集中管理 Sentinel 的各种规则,简化运维工作,同时保证所有实例遵循同一套规则,避免因配置不一致引发的问题。 3. **服务发现与注册**:Nacos 还支持服务的注册与发现...

    华为解决方案经理总结.docx

    - **方案设计**:基于对客户需求的理解,解决方案经理需要设计出符合实际应用情境的解决方案。这既包括技术层面的设计,也需要考虑成本效益等因素。 - **方案实施与优化**:解决方案的成功不仅仅在于设计阶段,更...

    sentinel-1.6.2控制台增加监控数据持久化mysql和规则数据持久化nacos部署war包.zip

    在这个特定的场景中,我们关注的是 Sentinel 控制台的 1.6.2 版本,它已经针对生产环境进行了增强,支持将监控数据持久化到 MySQL 数据库,并且规则数据可以持久化到 Nacos 配置中心。 首先,Sentinel 控制台默认...

    可持久化数据结构

    本节将详细介绍几种常见的可持久化数据结构,包括线段树、块状链表和区间第k大等。 ##### 1. 线段树 线段树是一种用于区间查询和更新操作的数据结构,其基本思想是通过递归地将区间分成左右两部分来构建树形结构。...

    nacos2.2.1支持高斯数据库opengauss配置持久化

    通过修改nacos2.2.1源码使其支持opengauss的配置持久化,并验证配置成功。用于使用高斯数据库opengauss项目的注册中心以及配置中心

    Redis的持久化方案.pdf(两种持久化方案:RDB 和 AOF,共15页)

    ### Redis的两种持久化方案:RDB 和 AOF Redis是一种高性能的键值数据库,它提供了两种主要的数据持久化机制:RDB(Redis Database Backup)和AOF(Append Only File)。这两种方法各有特点,适用于不同的场景。 #...

    SmartX容器超融合与持久化存储解决方案.pdf

    总的来说,SmartX的容器超融合与持久化存储解决方案提供了一个全面的、高性能的平台,帮助企业轻松应对容器化应用的存储、网络和安全需求,同时优化了成本和资源利用率,是现代数据中心的理想选择。

    hibernate数据持久化组件

    在现代软件开发中,数据持久化是一项关键的技术,它解决了程序运行过程中数据的保存问题。根据题目提供的信息,“内存是暂时存储设备,断电后数据易丢失”,这揭示了内存作为临时存储空间的局限性。此外,“网络传输...

Global site tag (gtag.js) - Google Analytics