Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >美团点评智能支付核心交易系统的可用性实践

美团点评智能支付核心交易系统的可用性实践

原创
作者头像
静儿
修改于 2018-05-24 06:47:15
修改于 2018-05-24 06:47:15
2.7K4
举报
文章被收录于专栏:编程一生编程一生

背景

每个系统都有它最核心的指标。比如在收单领域:进件系统第一重要的是保证入件准确,第二重要的是保证上单效率。清结算系统第一重要的是保证准确打款,第二重要的是保证及时打款。我们负责的系统是美团点评智能支付的核心链路,承担着智能支付100%的流量,内部习惯称为核心交易。因为涉及美团点评所有线下交易商家、用户之间的资金流转,对于核心交易来说:第一重要的是稳定性,第二重要的还是稳定性。

问题引发

作为一个平台部门,我们的理想是第一阶段快速支持业务;第二阶段把控好一个方向;第三阶段观察好市场的方向,自己去引领一个大方向。

理想很丰满,现实是自从2017年初的每日几十万订单,到年底时,单日订单已经突破700万,系统面临着巨大的挑战。支付通道在增多;链路在加长;系统复杂性也相应增加。从最初的POS机到后来的二维码产品,小白盒、小黑盒、秒付……产品的多元化,系统的定位也在时刻的发生着变化。而系统对于变化的应对速度像是一个在和兔子赛跑的乌龟。

由于业务的快速增长,就算系统没有任何发版升级,也会突然出现一些事故。事故出现的频率越来越高,系统自身的升级,也经常是困难重重。基础设施升级、上下游升级,经常会发生“蝴蝶效应”,毫无征兆的受到影响。

问题分析

核心交易的稳定性问题根本上是怎么实现高可用的问题。

可用性指标

业界高可用的标准是按照系统宕机时间来衡量的:

因为业界的标准是后验的指标,考虑到对于平时工作的指导意义,我们通常采用服务治理平台OCTO来统计可用性。计算方法是:

可用性分解

业界系统可靠性还有两个比较常用的关键指标:

  • 平均无故障时间(Mean Time Between Failures,简称MTBF):即系统平均能够正常运行多长时间,才发生一次故障
  • 平均修复时间(Mean Time To Repair,简称MTTR):即系统由故障状态转为工作状态时修理时间的平均值

对于核心交易来说,可用性最好是无故障。在有故障的时候,判定影响的因素除了时间外,还有范围。将核心交易的可用性问题分解则为:

问题解决

1. 发生频率要低之别人死我们不死

1.1 消除依赖、弱化依赖和控制依赖

用STAR法则举一个场景:

情境(situation)

我们要设计一个系统A,完成:使用我们美团点评的POS机,通过系统A连接银行进行付款,我们会有一些满减,使用积分等优惠活动。

任务(task)

分析一下对于系统A的显性需求和隐性需求: 1>需要接收上游传过来的参数,参数里包含商家信息、用户信息、设备信息、优惠信息。 2>生成单号,将交易的订单信息落库。 3>敏感信息要加密。 4>要调用下游银行的接口。 5>要支持退款。 6>要把订单信息同步给积分核销等部门。     7>要能给商家一个查看订单的界面。 8>要能给商家进行收款的结算。 基于以上需求,分析一下怎样才能让里面的最核心链路“使用POS机付款”稳定。

行动(action)

分析一下:需求1到4是付款必需链路,可以做在一个子系统里,姑且称之为收款子系统。5到8各自独立,每个都可以作为一个子系统来做,具体情况和开发人员数量、维护成本等有关系。

值得注意的是需求5-8和收款子系统的依赖关系并没有功能上的依赖,只有数据上的依赖。即他们都要依赖生成的订单数据。

收款子系统是整个系统的核心,对稳定性要求非常高。其他子系统出了问题,收款子系统不能受到影响。

基于上面分析,我们需要做一个收款子系统和其他子系统之间的一个解耦,统一管理给其他系统的数据。这里称为“订阅转发子系统”,只要保证这个系统不影响收款子系统的稳定即可。

粗略架构图如下:

结果(result)

从上图可以看到,收款子系统和退款子系统、结算子系统、信息同步子系统、查看订单子系统之间没有直接依赖关系。这个架构达到了消除依赖的效果。收款子系统不需要依赖数据订阅转发子系统,数据订阅转发子系统需要依赖收款子系统的数据。我们控制依赖,数据订阅转发子系统从收款子系统拉取数据,而不需要收款子系统给数据订阅转发子系统推送数据。这样,数据订阅转发子系统挂了,收款子系统不受影响。

再说数据订阅转发子系统拉取数据的方式。比如数据存在MySQL数据库中,通过同步Binlog来拉取数据。如果采用消息队列来进行数据传输,对消息队列的中间件就有依赖关系了。如果我们设计一个灾备方案:消息队列挂了,直接RPC调用传输数据。对于这个消息队列,就达到了弱化依赖的效果。

1.2 事务中不包含外部调用

外部调用包括对外部系统的调用和基础组件的调用。外部调用具有返回时间不确定性的特征,如果包含在了事务里必然会造成大事务。数据库大事务会造成其它对数据库连接的请求获取不到,从而导致和这个数据库相关的所有服务处于等待状态,造成连接池被打满,多个服务直接宕掉。如果这个没做好,危险指数五颗星。下面的图显示出外部调用时间的不可控:

解决方法:

  • 排查各个系统的代码,检查在事务中是否存在RPC调用、HTTP调用、消息队列操作、缓存、循环查询等耗时的操作,这个操作应该移到事务之外,理想的情况是事务内只处理数据库操作。
  • 对大事务添加监控报警。大事务发生时,会收到邮件和短信提醒。针对数据库事务,一般分为1s以上、500ms以上、100ms以上三种级别的事务报警。
  • 建议不要用XML配置事务,而采用注解的方式。原因是XML配置事务,第一可读性不强,第二切面通常配置的比较泛滥,容易造成事务过大,第三对于嵌套情况的规则不好处理。

1.3    设置合理的超时和重试

对外部系统和缓存、消息队列等基础组件的依赖。假设这些被依赖方突然发生了问题,我们系统的响应时间是:内部耗时+依赖方超时时间*重试次数。如果超时时间设置过长、重试过多,系统长时间不返回,可能会导致连接池被打满,系统死掉;如果超时时间设置过短,499错误会增多,系统的可用性会降低。

举个例子:

服务A依赖于两个服务的数据完成此次操作。平时没有问题,假如服务B在你不知道的情况下,响应时间变长,甚至停止服务,而你的客户端超时时间设置过长,则你完成此次请求的响应时间就会变长,此时如果发生意外,后果会很严重。

Java的Servlet容器,无论是Tomcat还是Jetty都是多线程模型,都用Worker线程来处理请求。这个可配置有上限,当你的请求打满Worker线程的最大值之后,剩余请求会被放到等待队列。等待队列也有上限,一旦等待队列都满了,那这台Web Server就会拒绝服务,对应到Nginx上返回就是502。如果你的服务是QPS较高的服务,那基本上这种场景下,你的服务也会跟着被拖垮。如果你的上游也没有合理的设置超时时间,那故障会继续向上扩散。这种故障逐级放大的过程,就是服务雪崩效应。

解决方法:

  • 首先要调研被依赖服务自己调用下游的超时时间是多少。调用方的超时时间要大于被依赖方调用下游的时间。
  • 统计这个接口99%的响应时间是多少,设置的超时时间在这个基础上加50%。如果接口依赖第三方,而第三方的波动比较大,也可以按照95%的响应时间。
  • 重试次数如果系统服务重要性高,则按照默认,一般是重试三次。否则,可以不重试。

1.4    解决慢查询

慢查询会降低应用的响应性能和并发性能。在业务量增加的情况下造成数据库所在的服务器CPU利用率急剧攀升,严重的会导致数据库不响应,只能重启解决。关于慢查询,可以参考我们技术博客之前的文章《MySQL索引原理及慢查询优化》。

解决方法:

  • 将查询分成实时查询、近实时查询和离线查询。实时查询可穿透数据库,其它的不走数据库,可以用Elasticsearch来实现一个查询中心,处理近实时查询和离线查询。
  • 读写分离。写走主库,读走从库。
  • 索引优化。索引过多会影响数据库写性能。索引不够查询会慢。DBA建议一个数据表的索引数不超过4个。
  • 不允许出现大表。MySQL数据库的一张数据表当数据量达到千万级,效率开始急剧下降。

1.5 熔断

在依赖的服务不可用时,服务调用方应该通过一些技术手段,向上提供有损服务,保证业务柔性可用。而系统没有熔断,如果由于代码逻辑问题上线引起故障、网络问题、调用超时、业务促销调用量激增、服务容量不足等原因,服务调用链路上有一个下游服务出现故障,就可能导致接入层其它的业务不可用。下图是对无熔断影响的鱼骨图分析:

解决方法:

  • 自动熔断:可以使用Netflix的Hystrix或者美团点评自己研发的Rhino来做快速失败。
  • 手动熔断:确认下游支付通道抖动或不可用,可以手动关闭通道。

2. 发生频率要低之自己不作死

自己不作死要做到两点:第一自己不作,第二自己不死。

2.1 不作

关于不作,我总结了以下7点:

1>不当小白鼠:只用成熟的技术,不因技术本身的问题影响系统的稳定。 2>职责单一化:不因职责耦合而削弱或抑制它完成最重要职责的能力。 3>流程规范化:降低人为因素带来的影响。 4>过程自动化:让系统更高效、更安全的运营。 5>容量有冗余:为了应对竞对系统不可用用户转而访问我们的系统、大促来临等情况,和出于容灾考虑,至少要保证系统2倍以上的冗余。 6>持续的重构:持续重构是确保代码长期没人动,一动就出问题的有效手段。 7>漏洞及时补:美团点评有安全漏洞运维机制,提醒督促各个部门修复安全漏洞。

2.2 不死

关于不死,地球上有五大不死神兽:能在恶劣环境下停止新陈代谢的“水熊虫”;可以返老还童的“灯塔水母”;在硬壳里休养生息的“蛤蜊”;水、陆、寄生样样都成的“涡虫”;有隐生能力的“轮虫”。它们的共通特征用在系统设计领域上就是自身容错能力强。这里“容错”的概念是:使系统具有容忍故障的能力,即在产生故障的情况下,仍有能力将指定的过程继续完成。容错即是Fault Tolerance,确切地说是容故障(Fault),而并非容错误(Error)。

3. 发生频率要低之不被别人搞死

3.1 限流

在开放式的网络环境下,对外系统往往会收到很多有意无意的恶意攻击,如DDoS攻击、用户失败重刷。虽然我们的队友各个是精英,但还是要做好保障,不被上游的疏忽影响,毕竟,谁也无法保证其他同学哪天会写一个如果下游返回不符合预期就无限次重试的代码。这些内部和外部的巨量调用,如果不加以保护,往往会扩散到后台服务,最终可能引起后台基础服务宕机。下图是对无限流影响的问题树分析:

解决方法:

  • 通过对服务端的业务性能压测,可以分析出一个相对合理的最大QPS。
  • 流量控制中用的比较多的三个算法是令牌桶、漏桶、计数器。可以使用Guava的RateLimiter来实现。其中SmoothBurstry是基于令牌桶算法的,SmoothWarmingUp是基于漏桶算法的。
  • 核心交易这边采用美团服务治理平台OCTO做thrift截流。可支持接口粒度配额、支持单机/集群配额、支持指定消费者配额、支持测试模式工作、及时的报警通知。其中测试模式是只报警并不真正节流。关闭测试模式则超过限流阈值系统做异常抛出处理。限流策略可以随时关闭。
  • 可以使用Netflix的Hystrix或者美团点评自己研发的Rhino来做特殊的针对性限流。

4. 故障范围要小之隔离

隔离是指将系统或资源分割开,在系统发生故障时能限定传播范围和影响范围。

服务器物理隔离原则

① 内外有别:内部系统与对外开放平台区分对待。 ② 内部隔离:从上游到下游按通道从物理服务器上进行隔离,低流量服务合并。 ③ 外部隔离:按渠道隔离,渠道之间互不影响。

线程池资源隔离

  • Hystrix通过命令模式,将每个类型的业务请求封装成对应的命令请求。每个命令请求对应一个线程池,创建好的线程池是被放入到ConcurrentHashMap中。 注意:尽管线程池提供了线程隔离,客户端底层代码也必须要有超时设置,不能无限制的阻塞以致于线程池一直饱和。

信号量资源隔离

  • 开发者可以使用Hystrix限制系统对某一个依赖的最高并发数,这个基本上就是一个限流策略。每次调用依赖时都会检查一下是否到达信号量的限制值,如达到,则拒绝。

5. 故障恢复要快之快速发现

发现分为事前发现、事中发现和事后发现。事前发现的主要手段是压测和故障演练;事中发现的主要手段是监控报警;事后发现的主要手段是数据分析

5.1 全链路线上压测

你的系统是否适合全链路线上压测呢?一般来说,全链路压测适用于以下场景:

① 针对链路长、环节多、服务依赖错综复杂的系统,全链路线上压测可以更快更准确的定位问题。 ② 有完备的监控报警,出现问题可以随时终止操作。 ③ 有明显的业务峰值和低谷。低谷期就算出现问题对用户影响也比较小。

全链路线上压测的目的主要有:

① 了解整个系统的处理能力 ② 排查性能瓶颈 ③ 验证限流、降级、熔断、报警等机制是否符合预期并分析数据反过来调整这些阈值等信息 ④ 发布的版本在业务高峰的时候是否符合预期 ⑤ 验证系统的依赖是否符合预期

全链路压测的简单实现:

① 采集线上日志数据来做流量回放,为了和实际数据进行流量隔离,需要对部分字段进行偏移处理。 ② 数据着色处理。可以用中间件来获取和传递流量标签。 ③ 可以用影子数据表来隔离流量,但是需要注意磁盘空间,建议如果磁盘剩余空间不足70%采用其他的方式隔离流量。 ④ 外部调用可能需要Mock。实现上可以采用一个Mock服务随机产生和线上外部调用返回时间分布的时延。

压测工具上,核心交易这边使用美团点评开发的pTest。

6. 故障恢复要快之快速定位

定位需要靠谱的数据。所谓靠谱就是和要发现的问题紧密相关的,无关的数据会造成视觉盲点,影响定位。所以对于日志,要制定一个简明日志规范。另外系统监控、业务监控、组件监控、实时分析诊断工具也是定位的有效抓手。

7. 故障恢复要快之快速解决

要解决,提前是发现和定位。解决的速度还取决于是自动化的、半自动化的还是手工的。核心交易有意向搭建一个高可用系统。我们的口号是:“不重复造轮子,用好轮子。”这是一个集成平台,职责是:“聚焦核心交易高可用,更好、更快、更高效。”

美团点评内部可以使用的用于发现、定位、处理的系统和平台非常多,但是如果一个个打开链接或者登陆系统,势必影响解决速度。所以我们要做集成,让问题一站式解决。希望达到的效果举例如下:

工具介绍

Hystrix

Hystrix实现了断路器模式来对故障进行监控,当断路器发现调用接口发生了长时间等待,就使用快速失败策略,向上返回一个错误响应,这样达到防止阻塞的目的。这里重点介绍一下Hystrix的线程池资源隔离和信号量资源隔离。

线程池资源隔离

优点

  • 使用线程可以完全隔离第三方代码,请求线程可以快速放回。
  • 当一个失败的依赖再次变成可用时,线程池将清理,并立即恢复可用,而不是一个长时间的恢复。
  • 可以完全模拟异步调用,方便异步编程。

缺点

  • 线程池的主要缺点是它增加了CPU,因为每个命令的执行涉及到排队(默认使用SynchronousQueue避免排队),调度和上下文切换。
  • 对使用ThreadLocal等依赖线程状态的代码增加复杂性,需要手动传递和清理线程状态(Netflix公司内部认为线程隔离开销足够小,不会造成重大的成本或性能的影响)。

信号量资源隔离

开发者可以使用Hystrix限制系统对某一个依赖的最高并发数。这个基本上就是一个限流策略,每次调用依赖时都会检查一下是否到达信号量的限制值,如达到,则拒绝。

优点

  • 不新起线程执行命令,减少上下文切换。

缺点

  • 无法配置断路,每次都一定会去尝试获取信号量。

比较一下线程池资源隔离和信号量资源隔离

  • 线程隔离是和主线程无关的其他线程来运行的;而信号量隔离是和主线程在同一个线程上做的操作。
  • 信号量隔离也可以用于限制并发访问,防止阻塞扩散,与线程隔离的最大不同在于执行依赖代码的线程依然是请求线程。
  • 线程池隔离适用于第三方应用或者接口、并发量大的隔离;信号量隔离适用于内部应用或者中间件;并发需求不是很大的场景。

Rhino

Rhino是美团点评基础架构团队研发并维护的一个稳定性保障组件,提供故障模拟、降级演练、服务熔断、服务限流等功能。和Hystrix对比:

  • 内部通过CAT(美团点评开源的监控系统,参见之前的博客“深度剖析开源分布式监控CAT”)进行了一系列埋点,方便进行服务异常报警。
  • 接入配置中心,能提供动态参数修改,比如强制熔断、修改失败率等。

总结思考

王国维 在《人间词话》里谈到了治学经验,他说:古今之成大事业、大学问者,必经过三种之境界:

第一种境界 昨夜西风凋碧树。独上高楼,望尽天涯路。 第二种境界 衣带渐宽终不悔,为伊消得人憔悴。 第三种境界 众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。

核心交易的高可用目前正在经历第一种:高瞻远瞩认清前人所走的路,以总结和学习前人的经验做为起点。

下一阶段,既然认定了目标,我们会呕心沥血孜孜以求,持续发展高可用。最终,当我们做了很多的事情,回过头来看,相信会对高可用有更清晰和深入的认识。敬请期待我们下一次的分享~~

关于作者

晓静,20岁时毕业于东北大学计算机系。在毕业后的第一家公司由于出众的语言天赋,在1年的时间里从零开始学日语并以超高分通过了国际日语一级考试,担当两年日语翻译的工作。后就职于人人网,转型做互联网开发。中国科学院心理学研究生。有近百个技术发明专利,创业公司合伙人。有日本东京,美国硅谷技术支持经验。目前任美团点评技术专家。(欢迎关注静儿的个人技术公众号:编程一生  ) 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
4 条评论
热度
最新
讲得很随意啦哈哈
讲得很随意啦哈哈
回复回复点赞举报
这个就有点夸张了
这个就有点夸张了
回复回复点赞举报
这个可用性说的有点随意了
这个可用性说的有点随意了
回复回复点赞举报
哇,5毛钱配图,能不能用点心
哇,5毛钱配图,能不能用点心
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
双 11 的狂欢,干了这碗「流量防控」汤
这是悟空的第 67 篇原创文章 作者 | 悟空聊架构 来源 | 悟空聊架构(ID:PassJava666) 临近双十一,从 2009 年第一届双十一开始,成交量只有 5000 万,到去年 2019 年,成交量达到了 2684 亿。今年迎来了第十二届双十一,想想都挺激动。 阿里人喜欢将双十一视为 Team Building(团队建设),广为流传的一句话:打仗是最好的团建,没有参加过双十一的叫同事,参加过双十一的叫战友。 这一篇会讲解被一线大厂使用的两款流量防控组件:Sentinel 和 Hystrix,以及
博文视点Broadview
2023/05/19
3900
双 11 的狂欢,干了这碗「流量防控」汤
学习分布式系统限流、降级、熔断框架就要看这篇文章为什么需要HystrixHystrix如何解决依赖隔离如何使用HystrixHystrix关键组件分析
为什么需要Hystrix 在大中型分布式系统中,通常系统很多依赖,如下图: image 在高并发访问下,这些依赖的稳定性与否对系统的影响非常大,但是依赖有很多不可控问题:如网络连接缓慢,资源繁忙,暂时
Java架构
2018/06/08
2.4K0
战狼:业务高速增长下,如何保证系统的稳定性和高可用?
背景 2017年8月25日,我怀着“再也不要在下班时间收到报警”的美好期待,加入美团金融智能支付负责核心交易,结果入职后收到的报警一天紧似一天。核心交易是整个智能支付的核心链路,承担着智能支付百分之百的流量,不敢有丝毫的懈怠。   从17年下半年开始,我们的日单量增长迅速,而且压力和流量在午、晚高峰时段非常集中。在这种情况下,报警和小事故日益频繁,交易的稳定性面临着严峻的考验。下面是早期的可用性趋势图,仔细看的话,可以看到可用性有下降的趋势,旁边的总可用性显示只有4个9(99.998765%),美团点评排在
静儿
2018/07/02
1.1K0
全链路压测平台(Quake)在美团中的实践
在美团的价值观中,“以客户为中心”被放在一个非常重要的位置,所以我们对服务出现故障越来越不能容忍。特别是公司业务正处在高速增长的阶段,每一次故障对公司来说都是一笔不小的损失。而整个IT基础设施非常复杂,包括网络、服务器、操作系统以及应用层面都可能出现问题。在这种背景下,我们必须对服务进行一次全方位的“体检”,从而来保障美团多个业务服务的稳定性,提供优质的用户服务体验。真正通过以下技术手段,来帮助大家吃的更好,生活更好:
美团技术团队
2019/04/04
2.3K0
全链路压测平台(Quake)在美团中的实践
业务高速增长场景下的稳定性建设实战
背景   静儿在2017年8月25日怀着“再也不要下班时间收到报警”的美好期待加入美团金融智能支付负责核心交易,结果入职后收到的报警一天紧似一天。核心交易是整个智能支付的核心链路,承担着智能支付百分之
静儿
2018/07/02
2K1
美团智能支付稳定性测试实战
本文介绍了美团智能支付业务在稳定性方向遇到的挑战,并重点介绍QA在稳定性测试中的一些方法与实践。
美团技术团队
2019/01/09
1.4K0
亿级流量场景下,大型缓存架构设计实现【3】---- 实现高可用
在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。
小勇DW3
2019/10/28
4060
亿级流量场景下,大型缓存架构设计实现【3】---- 实现高可用
阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案
分布式系统都存在这样一个问题,由于网络的不稳定性,决定了任何一个服务的可用性都不是 100% 的。当网络不稳定的时候,作为服务的提供者,自身可能会被拖死,导致服务调用者阻塞,最终可能引发雪崩连锁效应。
Java
2018/09/14
1.6K0
阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案
电商交易高并发和高可用技术(一)
电商交易属于核心业务,比如有这么一个场景同一个商品有1000个库存,那么现在有10000个人同时买这个商品,那么在保证这个1000个库存商品全部卖光的前提下,那么交易后台如何保证这10000个人中必须要最多只有1000个人购买成功,极端情况下也可以少于1000个人,反正就是不能超卖。
35岁程序员那些事
2020/02/24
1.1K0
电商交易高并发和高可用技术(一)
高可用架构设计(2) -hystrix要解决的分布式系统可用性问题以及其设计原则
高可用性这个topic,然后咱们会用几讲的时间来讲解一下如何用hystrix,来构建高可用的服务的架构
JavaEdge
2019/07/13
4470
高可用架构设计(2) -hystrix要解决的分布式系统可用性问题以及其设计原则
实践高可用
    本篇文章是之前一篇《大话高可用》的高可用心法的案例篇。   说实践之前先说概念。   业界可靠性和可用性的衡量标准:   将可用性做一个目标分解即为: MTBF:发生频率要低 MTTR
静儿
2018/07/02
8650
高可用服务架构设计(17) - 基于Hystrix的高可用分布式系统架构设计的总结
1、hystrix内部工作原理:8大执行步骤和流程 2、资源隔离:你如果有很多个依赖服务,高可用性,先做资源隔离,任何一个依赖服务的故障不会导致你的服务的资源耗尽,不会崩溃 3、请求缓存:对于一个request context内的多个相同command,使用request cache,提升性能 4、熔断:基于短路器,采集各种异常事件,报错,超时,reject,短路,熔断,一定时间范围内就不允许访问了,直接降级,自动恢复的机制 5、降级:报错,超时,reject,熔断,降级,服务提供容错的机制 6、限流:在你的服务里面,通过线程池,或者信号量,限制对某个后端的服务或资源的访问量,避免从你的服务这里过去太多的流量,打死某个资源 7、超时:避免某个依赖服务性能过差,导致大量的线程hang住去调用那个服务,会导致你的服务本身性能也比较差
JavaEdge
2022/11/30
2860
服务容错模式
背景 随着美团点评服务框架和服务治理体系的逐步成熟,服务化已成为公司内部系统设计的趋势。本着大系统小做、职责单一的原则,我们度假技术团队对业务系统进行了不少服务化拆分工作。随着业务复杂度的增加,依赖的服务也逐步增加,出现了不少由于服务调用出现异常问题而导致的重大事故,如: 1)系统依赖的某个服务发生延迟或者故障,数秒内导致所有应用资源(线程,队列等)被耗尽,造成所谓的雪崩效应 (Cascading Failure),导致整个系统拒绝对外提供服务。 2)系统遭受恶意爬虫袭击,在放大效应下没有对下游依赖服务做好
美团技术团队
2018/03/12
1.6K0
服务容错模式
高可用系统架构(2)-Hystrix分布式系统高可用
Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。
JavaEdge
2022/11/30
2810
高可用系统架构(2)-Hystrix分布式系统高可用
《面试补习》-熔断降级我学会了!
高可用三剑客 限流,熔断和削峰 终于来到第二篇, 熔断降级专题了,想回顾限流相关内容的童鞋,可以查看一下,下面文章,欢迎点赞,收藏,关注三连,感谢!
九灵
2021/07/10
7710
《面试补习》-熔断降级我学会了!
面试系列之-Spring Cloud Hystrix
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。
用户4283147
2023/11/20
2630
面试系列之-Spring Cloud Hystrix
美团外卖自动化业务运维系统——Alfred
背景 美团外卖业务在互联网行业是非常独特的,不仅流程复杂——从用户下单、商家接单到配送员接单、交付,而且压力和流量在午、晚高峰时段非常集中。同时,外卖业务的增长非常迅猛,自2013年11月上线到最近峰
美团技术团队
2018/03/13
1.9K0
美团外卖自动化业务运维系统——Alfred
2000万日订单背后:美团外卖客户端高可用建设体系
总第250篇 2018年 第42篇 背景 美团外卖从2013年11月开始起步,经过数年的高速发展,一直在不断地刷新着记录。2018年5月19日,日订单量峰值突破2000万单,已经成为全球规模最大的外卖平台。业务的快速发展对系统稳定性提出了更高的要求,如何为线上用户提供高稳定的服务体验,保障全链路业务和系统高可用运行,不仅需要后端服务支持,更需要在端上提供全面的技术保障。而相对服务端而言,客户端运行环境千差万别,不可控因素多,面对突发问题应急能力差。因此,构建客户端的高可用建设体系,保障服务稳定高可用,不仅
美团技术团队
2018/06/07
1.8K0
亿级流量网站架构核心技术【笔记】(一)
3.在有限资源的情况下,一定是先解决当下最核心的问题,预测并发现未来可能出现的问题,一步步解决最痛点的问题,即满足需求的系统是不断迭代优化出来的 A.高并发原则 1.无状态:比较容易进行水平扩展,应用无状态,配置文件有状态 2.拆分:在系统设计初期,是做一个大而全的系统还是按功能模块拆分系统,这个需要根据环境进行权衡
硬核项目经理
2019/08/06
2K0
亿级流量网站架构核心技术【笔记】(一)
没有 “流量防控”,还玩什么双11
临近双十一,从 2009 年第一届双十一开始,成交量只有 5000 万,到去年 2019 年,成交量达到了 2684 亿。今年迎来了第十二届双十一,想想都挺激动。
xjjdog
2020/11/17
2.4K0
没有 “流量防控”,还玩什么双11
推荐阅读
相关推荐
双 11 的狂欢,干了这碗「流量防控」汤
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档