电商平台备战促销季的运维秘诀——高可用服务层

2024-03-10 14:08

本文主要是介绍电商平台备战促销季的运维秘诀——高可用服务层,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高可用设计是互联网系统架构的基础之一,以天猫双十二交易数据为例,支付宝峰值支付次数超过 8 万笔。大家设想一下,如果这个时候系统出现不可用的情况,那后果将不可想象。
而解决这个问题的根本就是服务层的高可用。

640?wx_fmt=png

什么是服务层

众所周知,服务层主要用来处理网站业务逻辑的,是大型业务网站的核心。比如下面三个业务系统就是典型的服务层,提供基础服务功能的聚合

  • 用户中心:主要负责用户注册、登录、获取用户用户信息功能

  • 交易中心:主要包括正向订单生成、逆向订单、查询、金额计算等功能

  • 支付中心:主要包括订单支付、收银台、对账等功能

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

整体架构

业务发展初期主要以业务为导向,一般采用 「ALL IN ONE」的架构方式来开发产品,这个阶段用一句话概括就是 「糙猛快」。当发展起来之后就会遇到下面这些问题

  • 文件大:一个代码文件出现超过 2000 行以上

  • 耦合性严重:不相关业务都直接堆积在 Serivce 层中

  • 维护代价高:人员离职后,根本没有人了解里面的业务逻辑

  • 牵一发动全身:改动少量业务逻辑,需要重新把所有依赖包打包并发布

遇到这些问题,主要还是通过「拆」来解决

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

具体拆的方式,主要根据业务领域划分单元,进行垂直拆分。拆分开来的好处很明显,主要有以下这些:

  • 每个业务一个独立的业务模块

  • 业务间完全解耦

  • 业务间互不影响

  • 业务模块独立

  • 单独开发、上线、运维

  • 效率高

无状态设计

对于业务逻辑服务层,一般会设计成无状态化的服务,无状态化也就是服务模块只处理业务逻辑,而无需关心业务请求的上下文信息。所以无状态化的服务器之间是相互平等且独立的。

只有服务变为无状态的时候,故障转移才会变的很轻松。通常故障转移就是在某一个应用服务器不能服务用户请求的时候,通过负责均衡的方式,转移用户请求到其他应用服务器上来进行业务逻辑处理

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

超时设置

一般网站服务都会有主调服务和被调服务之分。超时设置就是主调服务在调用被调服务的时候,设置一个超时等待时间 Timeout。主调服务发现超时后,就进入超时处理流程。

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

  1. 主调服务 A 调用被调服务 B 时,设置超时等待时间为 3 秒,可能由于 B 服务宕机、网络情况不好或程序 BUG 之类,导致 B 服务不能及时响应 A 服务的调用。

  2. 此时 A 服务在等待 3 秒后,将触发超时逻辑而不再关心 B 服务的回复情况。

  3. A 服务的超时逻辑可以依据情况而定,比如可以采取重试,对另一个对等的 B 服务去请求,或直接放弃结束这个请求调用。

超时设置的好处在于当某个服务不可用时,不至于整个系统发生雪崩反应。

异步调用

一般请求调用分为同步与异步两种。同步请求就像打电话,需要实时响应,而异步请求就像发送邮件一样,不需要马上回复。

这两种调用各有优劣,主要看面对哪种业务场景。比如在面对并发性能要求比较高的场景,异步调用就比同步调用有比较大的优势,这就好比一个人不能同时打多个电话,但是可以发送很多邮件。

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

那我们什么时候该采用异步调用?

其实主要看业务场景,如果业务允许延迟处理,那就采用异步的方式处理

那我们该怎么实现异步调用呢?

通常采用队列的方式来实现业务上的延迟处理,比如像订单中心调用配送中心,这种场景下面,业务是能接受延迟处理的。

那消息队列主要有哪些功能呢?

  • 异步处理 - 增加吞吐量

  • 削峰填谷 - 提高系统稳定性

  • 系统解耦 - 业务边界隔离

  • 数据同步 - 最终一致性保证

那到底有多少种队列呢?其实主要看处理业务的范围大小

  • 应用内部 - 采用线程池,比如 Java ThreadPool 中 BlockingQueue 来做任务级别的缓冲与处理

  • 应用外部 - 比如 RabbitMQ 、ActiveMQ 就是做应用级别的队列,方便进行业务边界隔离与提高吞吐量

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

同时,技术上来讲,消息队列一般分为两种模型:Pull VS Push

  • Pull 模型:消费者主动请求消息队列,获取队列中的消息。

  • Push 模型:消息队列主动推送消息到消费者

其中 Pull 模式可以控制消费速度,不必担心自己处理不了消息,只需要维护队列中偏移量 Offset。所以对于消费量有限并且推送到队列的生产者不均匀的情况下,采用 Pull 模式比较合适。

Push 比较适合实时性要求比较高的情况,只要生产者消息发送到消息队列中,队列就会主动 Push 消息到消费者,不过这种模式对消费者的能力要求就提高很多,如果出现队列给消费者推送一些不能处理的消息,消费者出现 Exception 情况下,就会再次入队列,造成消费堵塞的情况。

不过互联网业界比较成熟的队列主要以采用 Pull 模式为主,像 Kafka、RabbitMQ(两种方式都支持)、RocketMQ 等

幂等

什么是幂等设计呢?

其实很简单,就是一次请求和多个请求的作用是一样的。用数学上的术语,即是 f(x) = f(f(x))。

那我们为什么要做幂等性的设计呢?主要是因为现在的系统都是采用分布式的方式设计系统,在分布式系统中调用一般分为 3 个状态:成功、失败、超时。

如果调用是成功或者失败都不要紧,因为状态是明确和清晰,但是如果出现超时的情况,就不知道请求是成功还是失败的。

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

如果出现这种情况,我们该怎么办呢?一般采取重试的操作,重新请求对应接口。如果请求接口是 Get 操作的话,那到还好,因为请求多次的效果是一样的。但是如果是 Post 、Put 操作的话,就会造成数据不一致,甚至数据覆盖等问题。

举个例子:在支付收银台页面进行支付的时候,因为网络超时的问题导致支付失败,这个时候我们都会再进行一次支付操作,但是当支付成功后,发现你的账户余额被减了 2 次,这个时候心里肯定很不爽,心里都要开始骂娘了…

造成这个问题的关键是:网络超时后,不知道支付是什么状态?成功还是失败呢?所以说幂等性设计是必须的,尤其在电商、金融、银行等对数据要求比较高的行业中。

一般在这种场景下我们该怎么解决呢?

  1. 请求方一般会生产一个唯一性 ID 标识,这个标识可以具有业务一样,比如订单号或者支付流水号,在发起请求时候带上唯一性 ID。

  2. 接收者在收到请求后,第一步通过获取唯一性 ID 来查询接收端是否有对应的记录,如果有的话,就直接将上次请求的结果返回,如果没有的话,就进行操作,并在操作完成后记录到对应的表里

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

服务降级

服务降级主要解决资源不足和访问量过大的问题,比如电商平台在双十一、618 等高峰时候采用部分服务不提供访问,减少对系统的影响。

那降级的方式有哪些呢?

  • 延迟服务:比如春晚,微信发红包就出现抢到红包,但是账号余额并没有增加,要过几天才能加上去。其实这是微信内部采用延迟服务的方式来保证服务的稳定,通过队列实现记录流水账单

  • 功能降级:停止不重要的功能是非常有用的方式,把相对不重要的功能暂停掉,让系统释放更多的资源。比如关闭相关文章的推荐、用户的评论功能等等,等高峰过去之后,在把服务恢复回来。

  • 降低数据一致性:在大促的时候,我们发现页面上不显示真实库存的数据,只显示到底有还是没有库存这两种状态。

640?wx_fmt=png

电商平台备战促销季的运维秘诀——高可用服务层

刚刚说了降级的方式,那我们操作降级的时候有哪些注意点呢?

  1. 清晰定义降级级别: 比如出现吞吐量超过 X,单位时间内响应时间超过 Y 秒、失败次数超过 Z 次等,这些阈值需要在准备的时候,通过压测的方式来确定。

  2. 梳理业务级别:降级之前,首先需要确定哪些业务是必须有,哪些业务是可以有的,哪些业务是可有可无的。

  3. 降级开关:可以通过接入配置中心(比如携程 Apollo、百度 Disconf )的方式直接后台降级。但是如果公司没有配置中心的话,可以封装一个 API 接口来切分,不过该 API 接口要做成幂等的方式,同时需要做一些简单的签名,来保证其一定的安全性。

总结

总结一下今天分享的主要内容

  • 整体架构:根据业务属性进行垂直拆分,减少项目依赖,单独开发、上线、运维

  • 无状态设计:应用服务中不能保存用户状态数据,如果有状态就会出现难以扩容、单点等问题

  • 超时设置:当某个服务不可用时,不至于整个系统发生连锁反应

  • 异步调用:同步调用改成异步调用,解决远程调用故障或调用超时对系统的影响

  • 服务降级:牺牲非核心业务,保证核心业务的高可用

所有好的架构设计首要的原则并不是追求先进,而是合理性,要与公司的业务规模和发展趋势相匹配,任何一个公司,哪怕是现在看来规模非常大的公司,比如 BAT 之类,在一开始,其系统架构也应简单和清晰的。

 

这篇关于电商平台备战促销季的运维秘诀——高可用服务层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/794468

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud