精华内容
下载资源
问答
  • 交互补偿模式
    2020-07-31 10:24:52

    专利名称:声音播放装置及其补偿方法
    技术领域
    本发明涉及一种声音播放装置,尤其涉及一种可对串音现象进行补偿的声音播放
    装置。
    背景技术
    随着消费性电子产品的普及化,许多应用于消费性的电子产品的周边商品的功能 跟精致度也随着被强化。以作为声音播放装置的耳机为例,现在的耳机不论在造形上、功能 上以及品质上,都有了大幅的提升。而为了提供更高品质服务的声音播放效果,现今的声音 播放装置产品还必须兼顾低电磁干扰(Electromagnetic interference, EMI)及低杂音的 要求。现有的声音播放装置可以概分为两种;一种为电容模式(cap mode)的声音播放 装置,另一种为无电容模式(capless mode)的声音播放装置。通常在声音播放装置中的左、 右声道放大模块传送左、右声道信号至左、右声道扬声器的通道间,若是存在有串连耦合的 电容器的,此种声音播放装置称为电容模式(cap mode)的声音播放装置。相对的,若是在 左、右声道放大模块传送左、右声道信号至左、右声道扬声器的通道间不存在有串连耦合的 电容器者,则称为无电容模式(capless mode)的声音播放装置。不论是电容模式或无电容模式的声音播放装置,为了提供调频 (FrequencyModulation,FM)天线阻抗并降低电磁干扰的现象,在左、右声道扬声器接收左、 右声道信号的路径上以及左、右声扬声器的共同连接点上,都各连接有磁珠(bead)。在此 所谓的磁珠其实等效于一个小电感,这个小电感可以提供滤波的功能,可以在高频(100MHz 附近)时提供FM应用的阻抗匹配,但在低频时仍会有些微的阻抗值,除了上述的磁珠以 夕卜,左、右声道扬声器在低频信号通过时,也同样会提供低频等效阻抗。这些低频等效阻 抗的出现,配合声音播放装置内的连接方式,则会在左、右声道扬声器上产生所谓的串音 (crosstalk)现象,降低声音的输出品质。为解决上述的串音现象,一种声音播放装置被提出(细节请参考美国专利公开号 US2007/0133809)。以下请参见图1绘示的现有的改善串音现象的声音播放装置100的示 意图。其中,声音播放装置100包括有接收左、右声道信号DATA的数字模拟转换器110、放 大器AMPL、AMPR及AMPC、参考电压产生模块120、回授电路130、磁珠Bl B3以及扬声单 元HPL、HPR。声音播放装置100通过回授电路130由回授点FBP撷取因串音现象而产生的 串音电压,并传送至放大器AMPC的负输入端。再通过放大器AMPC将串音电压的反向传送 至回授点FBP以抵消这个串音电压。

    发明内容
    本发明提供一种声音播放装置,用以消除其左、右声道间交互产生的串音(cross talk)现象。本发明提供一种声音播放装置的补偿方法,用以消除声音播放装置的左、右声道间交互产生 的串音(cross talk)现象。本发明提供一种声音播放装置,包括一数字信号运算单元,接收一左声道信号 及一右声道信号进行一算术运算,并藉以分别获得一补偿左声道信号以及一补偿右声道信 号;一数字模拟转换器,连结数字信号运算单元,接收补偿左声道信号以及补偿右声道信号 以转换输出一左声道模拟信号以及一右声道模拟信号;一左声道单元,连结数字模拟转换 器与数字信号运算单元,具有一左声道放大模块,一左声道磁珠与一左声道扬声单元;一右 声道单元,连结数字模拟转换器与数字信号运算单元,具有一右声道放大模块,一右声道磁 珠与一右声道扬声单元;以及一共同单元,连结左声道单元与右声道单元,具有一共同磁 珠,其中,数字运算单元依据一第一比例值及一第二比例值对该左声道信号及该右声道信 号进行该算术运算,并藉以分别获得一补偿后左声道信号以及一补偿后右声道信号,其中 该第一比例值是依据该左声道扬声单元、该左声道磁珠以及该共同磁珠的低频等效阻抗的 阻抗值所产生,而该第二比例值则是依据该右声道扬声单元、该右声道磁珠以及该共同磁 珠的低频等效阻抗的阻抗值所产生。在本发明的一实施例中,上述的第一比例值为大于零且小于两倍的一第一预定 值,其中该第一预定值等于共同磁珠的低频等效阻抗的阻抗值除以左声道扬声单元、左声 道磁珠以及共同磁珠的低频等效阻抗的阻抗值的总和。在本发明的一实施例中,上述的第二比例值为大于零且小于两倍的一第二预定 值,其中该第二预定值等于共同磁珠的低频等效阻抗的阻抗值除以右声道扬声单元、右声 道磁珠以及共同磁珠的低频等效阻抗的阻抗值的总和。在本发明的一实施例中,上述的声音播放装置更包括参考电压产生模块以及共同 单元放大模块。参考电压产生模块耦接数字模拟转换器,用以提供参考电压。共同单元放 大模块耦接参考电压产生模块,依据参考电压产生共同电压,并由共同单元传送共同电压 至左声道扬声单元及右声道扬声单元。在本发明的一实施例中,上述的数字运算单元包括模拟数字转换电路以及数字信 号运算电路。模拟数字转换电路耦接至左声道扬声单元与右声道扬声单元的连接点,用以 接收串音电压,获得串音电压的检测峰值。数字信号运算电路耦接模拟数字转换电路,依据 串音电压的检测峰值产生第一、二比例值。数字信号运算电路依据第一、二比例值以及左、 右声道信号进行算术运算,并藉以分别获得补偿后左声道信号以及补偿后右声道信号。在本发明的一实施例中,上述的数字运算单元更产生缩小比例值,并将该缩小比 例值与该第一、二比例值以及该左、右声道信号进行该算术运算,以分别获得一缩小的补偿 左声道信号及一缩小的补偿右声道信号。在本发明的一实施例中,上述的左声道扬声单元与右声道扬声单元的低频等效阻 抗的阻抗值相等。左声道磁珠、右声道磁珠以及共同磁珠的低频等效阻抗的阻抗值相等。本发明另提出一种声音播放装置的补偿方法,一种声音播放装置的补偿方法,用 以补偿该声音播放装置中所产生的串音现象,其步骤包括接收一第一比例值及一第二比 例值,其中该第一比例值是依据该左声道扬声单元、该左声道磁珠以及该共同磁珠的低频 等效阻抗的阻抗值所产生,而该第二比例值则是依据该右声道扬声单元、该右声道磁珠以 及该共同磁珠的低频等效阻抗的阻抗值所产生;接收一左声道信号及一右声道信号;以及 提供一数字运算单元依据该第一比例值及该第二比例值对该左声道信号及该右声道信号进行一算术运算,藉以获得一补偿后左声道信号以及一补偿后右声道信号。基于上述,本发明通过获得声音播放装置中的左、右声道扬声单元的低频等效阻 抗,以及与左、右声道扬声单元连接的左、右声道磁珠及共同磁珠的低频等效阻抗。并利用 左、右声道扬声单元与左、右声道磁珠及共同磁珠的低频等效阻抗来计算获得第一、二比例 值。并利用第一、二比例值对声音播放装置所接收的左、右声道信号进一步进行算术运算, 以获得补偿后左声道信号以及补偿后右声道信号,有效的消除声音 播放装置中所会产生的 串音现象。


    图1绘示的现有的改善串音现象的声音播放装置的示意图;图2A绘示本发明一实施例无电容模式声音播放装置的示意图;图2B绘示本发明一实施例电容模式声音播放装置的示意图;图3绘示本发明实施例的声音播放装置补偿运算架构示意图;图4A及图4B分别绘示声音播放装置分别输入补偿后左、右声道信号时的等效电 路图;图5绘示本发明的另一实施例声音播放装置的示意图;图6绘示本发明一实施例声音播放装置补偿方法的流程图;图7绘示依据本发明的实施例所产生的频谱分析图。附图标号100、200、201、500 声音播放装置210 数字运算单元110、230、530 数字模拟转换器120、220、520 参考电压产生模块130:回授电路210、510 数字运算单元120、220、520 参考电压产生模块240,540 左声道单元250,550 右声道单元260,560 共同单元241、251、261、541、551 放大模块511 模拟数字转换电路512:数字信号运算电路710、720 频谱图711、712、721、722 频谱波形S610 S630 补偿方法的步骤x、y:比例值FBP、LOP、ROP、CP、GND 端点HPL、HPR 扬声单元Bl B3、BL、BR、BC 磁珠
    AMPL、AMPR、AMPC 放大器RR1、RR2、RBL, RBR、RB3 电阻DATA、DL、RL、MDL, MRL 左、右声道信号
    具体实施例方式为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图作详 细说明如下。首先请参照图2Α,图2Α绘示本发明一实施例无电容模式(capless mode)的声音 播放装置200的示意图。声音播放装置200中具有一数字运算单元210、一参考电压产生模 块220、一数字模拟转换器230、一左声道单元240、一右声道单元250以及一共同单元260。左声道单元240包括一放大模块241、一左声道磁珠BL以及一左声道扬声单元 HPL串接;右声道单元250包括一放大模块251、一右声道磁珠BR以及一右声道扬声单元 RPL串接;共同单元260包括一放大模块261与一共同磁珠BC串接;放大模块261用以提 供一电压准位。其中,左声道扬声单元HPL与右声道扬声单元RPL的一端分别连结至共同 磁珠BC的第一端。数字运算单元210接收左声道信号DL、右声道信号DR、第一比例值χ以及第二比 例值1。其中的第一比例值X及第二比例值y是依据左声道扬声单元HPL、右声道扬声单元 HPR、左声道磁珠BL、右声道磁珠BR以及共同磁珠BC的多个低频等效阻抗的阻抗值所产生。 数字运算单元210并通过第一比例值χ及第二比例值y对左声道信号DL及右声道信号DR 进行算术运算,以分别获得补偿后左声道信号MDL以及补偿后右声道信号MDR。数字模拟转换器230则接收补偿后左声道信号MDL以及补偿后右声道信号MDR, 并针对数字格式的补偿后左声道信号MDL以及补偿后右声道信号MDR转换成模拟格式后输 出ο参考电压产生模块220将产生一参考电压提供给数字模拟转换器230。 另外请参照图2B,图2B绘示本发明一实施例电容模式(cap mode)声音播放装置 201的示意图。其中,利用第一比例值与第二比例值补偿串音现象,除了可以如图2A所绘示 的应用于无电容模式的声音播放装置外,也可以应用在如图2B所绘示的电容模式的声音 播放装置。而电容模式的声音播放装置201的动作方式与非电容模式的声音播放装置200 是相似的,此处则不再重复说明。请注意,在电容模式(cap mode)声音播放装置201中,共 同磁珠BC —端连结接地端,另一端连结左声道扬声单元HPL与右声道扬声单元RPL的一 端;而共同单元260中不需有放大模块,因接地端即提供一电压准位。本发明预先利用左、右声道扬声单元及各个磁珠的低频等效阻抗值运算所产生的 比例值,以对左、右声道信号进行补偿,好消除声音播放装置在低频时因低频等效阻抗在 左、右声道扬声器上产生所谓的串音(cross talk)现象。而关于上述说明中的第一比例值及第二比例值的计算方式,请同时参照图2A及 图3。其中,图3绘示本发明实施例声音播放装置200如何补偿左声道信号MDL以及右声道 信号MDR的计算架构示意图。补偿计算的方式乃是将左声道信号DL加上右声道信号DR与 第二比例值y的乘积,其所得的值视为补偿后左声道信号MDL。而右声道信号DR加上左声 道信号DL与第一比例值χ的乘积则等于补偿后右声道信号MDR。
    接着则请参照图4A及图4B,图4A及图4B分别绘示声音播放装置200的左右声 道分别输入补偿后左、右声道信号时的等效电路图。在图4A的绘示中,假定右声道信号DR 为零,此时左声道磁珠BL的低频等效电阻的电阻值为RBL,而右声道磁珠BR的低频等效电 阻的电阻值为RBR,共同磁珠BC的低频等效电阻的电阻值则为RB3,又左声道扬声单元HPL 以及右声道扬声单元HPR的低频等效电阻的电阻值则分别为RR1、RR2。以接地端GND为零 伏特(volts,V)为条件,可以求得左声道扬声单元HPL以及右声道扬声单元!PR的共同耦 接点上的电压Vl与左声道信号DL的关系式如下式(1)所示
    权利要求
    1. 一种声音播放装置,其特征在于,所述的声音播放装置包括一数字信号运算单元,接收一左声道信号及一右声道信号进行一算术运算,并藉以分 别获得一补偿左声道信号以及一补偿右声道信号;一数字模拟转换器,连结所述数字信号运算单元,接收所述补偿左声道信号以及所述 补偿右声道信号以转换输出一左声道模拟信号以及一右声道模拟信号;一左声道单元,连结所述数字模拟转换器与所述数字信号运算单元,具有一左声道放 大模块,一左声道磁珠与一左声道扬声单元;一右声道单元,连结所述数字模拟转换器与所述数字信号运算单元,具有一右声道放 大模块,一右声道磁珠与一右声道扬声单元;以及一共同单元,连结所述左声道单元与所述右声道单元,具有一共同磁珠, 其中,所述数字运算单元依据一第一比例值及一第二比例值对所述左声道信号及所述 右声道信号进行所述算术运算,并藉以分别获得一补偿后左声道信号以及一补偿后右声道 信号,其中所述第一比例值是依据所述左声道扬声单元、所述左声道磁珠以及所述共同磁 珠的低频等效阻抗的阻抗值所产生,而所述第二比例值则是依据所述右声道扬声单元、所 述右声道磁珠以及所述共同磁珠的低频等效阻抗的阻抗值所产生。
    2.如权利要求1所述的声音播放装置,其特征在于,所述第一比例值为大于零且小于 两倍的一第一预定值,其中所述第一预定值等于所述共同磁珠的低频等效阻抗的阻抗值除 以所述左声道扬声单元、所述左声道磁珠以及所述共同磁珠的低频等效阻抗的阻抗值的总 禾口。
    3.如权利要求1所述的声音播放装置,其特征在于,所述第二比例值为大于零且小于 两倍的一第二预定值,其中所述第二预定值等于所述共同磁珠的低频等效阻抗的阻抗值除 以所述右声道扬声单元、所述右声道磁珠以及所述共同磁珠的低频等效阻抗的阻抗值的总 禾口。
    4.如权利要求1所述的声音播放装置,其特征在于,所述的声音播放装置进一步包括 一参考电压产生模块,耦接所述数字模拟转换器,用以提供一参考电压;以及一共同单元放大模块,耦接所述参考电压产生模块,依据所述参考电压产生一共同电 压,并由所述共同单元传送所述共同电压至所述左声道扬声单元及所述右声道扬声单元。
    5.如权利要求1所述的声音播放装置,其特征在于,所述数字运算单元包括一模拟数字转换电路,耦接至所述左声道扬声单元与所述右声道扬声单元的连接点, 用以接收一串音电压,获得所述串音电压的检测峰值;以及一数字信号运算电路,耦接所述模拟数字转换电路并依据所述检测峰值产生所述第 一、所述第二比例值,接收所述左、右声道信号,依据所述第一、二比例值以及所述左、右声 道信号进行所述算术运算,并藉以分别获得所述补偿左声道信号以及所述补偿右声道信 号。
    6.如权利要求1所述的声音播放装置,其特征在于,所述数字运算单元更产生一缩小 比例值,并将所述缩小比例值与所述第一、二比例值以及所述左、右声道信号进行所述算术 运算,以分别获得一缩小的补偿左声道信号及一缩小的补偿右声道信号。
    7.一种声音播放装置的补偿方法,其特征在于,所述的方法用以补偿所述声音播放装 置中所产生的串音现象,其步骤包括接收一第一比例值及一第二比例值,其中所述第一比例值是依据所述左声道扬声单 元、所述左声道磁珠以及所述共同磁珠的低频等效阻抗的阻抗值所产生,而所述第二比例 值则是依据所述右声道扬声单元、所述右声道磁珠以及所述共同磁珠的低频等效阻抗的阻 抗值所产生;接收一左声道信号及一右声道信号;以及提供一数字运算单元依据所述第一比例值及所述第二比例值对所述左声道信号及所 述右声道信号进行一算术运算,藉以获得一补偿后左声道信号以及一补偿后右声道信号。
    8.如权利要求7所述的补偿方法,其特征在于,所述第一比例值为大于零且小于两倍 的一第一预定值,其中所述第一预定值等于所述共同磁珠的低频等效阻抗的阻抗值除以所 述左声道扬声单元、所述左声道磁珠以及所述共同磁珠的低频等效阻抗的阻抗值的总和。
    9.如权利要求7所述的补偿方法,其特征在于,所述第二比例值为大于零且小于两倍 的一第二预定值,其中所述第二预定值等于所述共同磁珠的低频等效阻抗的阻抗值除以所 述右声道扬声单元、所述右声道磁珠以及所述共同磁珠的低频等效阻抗的阻抗值的总和。
    10.如权利要求7所述的补偿方法,其特征在于,所述依据所述第一比例值及所述第二 比例值来针对所述左声道信号及所述右声道信号进行所述算术运算的步骤包括将所述左声道信号加上所述第二比例值与所述右声道信号的乘积以获得所述补偿后 左声道信号;以及将所述右声道信号加上所述第一比例值与所述左声道信号的乘积以获得所述补偿后 右声道信号。
    11.如权利要求7所述的补偿方法,其特征在于,所述的方法进一步包括当所述数字运算单元传送一测试信号至所述左声道扬声单元或所述右声道扬声单元 的其中之一时,提供一峰值检测器检测所述左声道扬声单元与所述右声道扬声单元的连接 点上的一串音电压的一检测峰值,并依据所述检测峰值进行计算以获得所述第一比例值以 及所述第二比例值。
    12.如权利要求7所述的补偿方法,其特征在于,所述的方法进一步包括提供所述数字运算单元接收一缩小比例值,并将所述缩小比例值与所述第一、二比例 值以及所述左、右声道信号进行所述算术运算,以分别获得一缩小的补偿左声道信号及一 缩小的补偿右声道信号。
    全文摘要
    本发明公开了一种声音播放装置,包括一数字信号运算单元,一数字模拟转换器,一左声道单元,一右声道单元以及一共同单元。其中初始设定时,数字运算单元检测左声道单元中左声道扬声单元或右声道单元中右声道扬声单元上的一串音电压,进行运算以获得一第一比例值及一第二比例值,依据第一、二比例值以及左、右声道信号进行运算并藉以分别获得一补偿左声道信号以及一补偿右声道信号藉以消除串音现象。
    文档编号H04R3/12GK102056054SQ20091020942
    公开日2011年5月11日 申请日期2009年10月30日 优先权日2009年10月30日
    发明者李鸿邦, 陈昭宇 申请人:扬智科技股份有限公司

    更多相关内容
  • 在微服务的架构范式中由多个微应用构成,而服务间通信和执行流程是分布式系统的基础, 服务间的交互模式一般有3种模式:同步调用模式、接口异步调用模式、消息队列异步模式。因此我们不得不在根据业务场景进行决策,...

    在微服务的架构范式中由多个微应用构成,而服务间通信和执行流程是分布式系统的基础, 服务间的交互模式一般有3种模式:同步调用模式、接口异步调用模式、消息队列异步模式。因此我们不得不在根据业务场景进行决策,但每种交互模式意味着存在都超时的可能性,因此需要系统化的处理以满足我们系统的健壮性、容错性。

    本节主要针对热门话题“微服务同步 & 异步 & 超时 & 补偿 & 快速失败”进行解说,你理解对了吗?

    同步与异步

    一些互联网公司试图通过规范来约束这三种方式的使用和选择:

    • 尽量使用异步来替换同步操作
    • 能用同步解决的问题,不要引入异步

    从字面意义上看是完全不同的,甚至是矛盾的!

    第 1 条原则是从业务功能的角度出发的,也就是从与用户或者使用方的交互模式出发的,如果业务逻辑允许,用户对产品的交互形态没有异议,则我们可以将一些耗时较长的、用户对响应没有特别要求的操作异步化,以此来减少核心链路的层级,释放系统的压力。

    第 2 条原则是从技术和架构的角度出发的,这条原则应用的前提是同步能够解决问题, 这隐含了一个含义:如果性能不是问题,或者所处理的操作是短小的轻量级处理逻辑,那么同步调用方式是最理想不过的,因为这样不需要引入异步化的复杂处理流程。

    所有 JDBC 的实现使用同步阻塞模型,即访问数据库操作时无论是查询还是更新,原则上都是短小操作,不需要异步化。

    交互模式

    同步调用模式

    同步调用模式适用于大规模、高并发的短小操作,

    不适用于后端负载较高的场景

    接口异步调用模式适用于非核心链路上负载较高的处理环节,这个环节经常耗时较长,并且对时效性要求不高
    消息队列异步模式

    消息队列异步处理模式与接口异步调用模式类似,多应用于非核心链路上负载较高的处理环节中

    解耦

    流量具有消峰

    超时问题的解决方案

    同步调用模式服务契约中规定三种处理结果,状态值为:成功、失败和处理中,对于超时等系统错误的请求,其实可以认为是处理中状态的一个特例,可采用超时补偿的原则的方式
    接口异步调用模式不需要三种状态,尽最大努力通知即可
    消息队列异步模式

    有2个阶段:生产者投递和消费者处理, 在每个阶段会产生超时问题

    1.生产者投递超时,基本上可以视为失败(不可以不常见)

    2.消息队列的消费超时,一般消息队列会提供两种方式来消费消息

    • 自动增长消费的偏移量:在一个消费者从消息服务器中取走消息后,消息队列的消息偏移量自动增加,即消息一旦被从消息队列中取走,则不再存在于服务器中。允许丢消息,但并发量高、性能好
    • 手工提交消费的偏移量:在一个消费者从消息服务器中取走消息后,处理机先把消息持久到本地数据库中,然后告诉消息服务器己经消费消息,消息服务器才会移除消息。对消息处理的准确性要求较高

    超时补偿的原则

    服务间同步超时造成的后果进行处理,而处理方法有快速失败内部补偿两种,补偿模式也有调用方补偿和接收方补偿两种。

    快速失败:补偿模式有一种叫取消操作,主动触发即可。

    服务A调用服务B ,如果服务B响应服务A并且告诉服务A 消息己接收,那么服务A的任务就结束了;如果服务B处理失败,那么服务 B应该负责重试或者补偿。

    服务A调用服务B ,如果服务B 没有给出明确的接收响应,例如网络超时,那么服务A应该持续进行重试,直到服务B明确表示己经接收消息。 在这种情况下容易出现重复的消息,因此在服务 B中通常要保证滤重或者幕等性。

    如果你对不一致问题还存在疑问可参阅我之前的分享微服务最终一致性

    展开全文
  • 文章目录一、补偿机制的意义为什么要考虑补偿机制呢?补偿、事务补偿或者重试之间有什么关系?二、补偿应该怎么做?1. 回滚2. 重试为什么说重试有坑呢?重试的最佳实践 分布式对外高可用,对内如何让憋出的内伤消化消化...


    分布式对外高可用,对内如何让憋出的内伤消化消化。

    一、补偿机制的意义

    举例一个常见场景:
    客户端->购物车微服务->订单微服务->支付微服务

    为什么要考虑补偿机制呢?

    因为一次跨机器的请求通信可能会通过DNS、网卡、交换机、路由机、负载均衡等设备,这些设备都不是一直稳定的,在数据传输的过程中只要一个问题出错,就会有问题的产生。
    在分布式里面,一次完整的业务流程是由多次跨机器的通信构成,那么产生问题的概率就会成倍的增加。
    但是这个并不表示真正的系统无法处理请求,所以我们应该尽可能的消化这些异常。

    补偿、事务补偿或者重试之间有什么关系?

    不需要太纠结这些名字,因为目的都是一样的:消化掉某个操作产生的异常,通过内部机制将这些异常产生的不一致消化掉。
    不管通过什么方式,只要通过额外的方式解决问题,都可以理解成补偿的操作。所以事务补偿和重试都是补偿的子集,前者都是逆向操作,后者是一个正向操作。
    只是从结果来看,两者的意义不同,事务的补偿意味着放弃,
    图片
    「重试」 则还有处理成功的机会。这两种方式分别适用于不同的场景。图片
    因为[补偿]已经是一个额外的流程,既然能够走额外的流程,说明时效性并不是第一考虑的因素,所以做补偿的核心要点是:宁可慢,不可错。
    因此,不要草率的就确定补偿的实施方案,需要谨慎的评估,虽然说错误没有办法100%避免,但是要抱着这样的少发生错误的心态。

    二、补偿应该怎么做?

    主流的补偿方式就是前文提到的两种:回滚(事务的补偿),和重试

    1. 回滚

    回滚分为两种形式:

    • 显示回滚(逆向调用接口)

    • 隐式回滚(无需逆向调用接口)

    最常见的显示回滚就是做两件事:

    首先是确定失败的步骤和状态,从而确定回滚范围。一个业务流程,往往是在设计之初就制定好了,所以确定回滚的范围比较容易,但这唯一需要注意的一点是:如果在一个业务处理中涉及到的服务并不是都提供了 「回滚接口」 ,那么在编排服务时应该把提供 「回滚接口」 的服务放在前面,这样当后面的工作服务错误时还有机会 「回滚」

    简单的来说就是让回滚接口有被调用到的机会。最优的选择就是放在第一个。

    其次就是要能提供回滚操作使用到的业务数据。回滚时提供的数据越多,越有利于程序的健壮性,因为程序可以在收到回滚操作的时候做业务检查,比如检查账户是否相等,金额是否一致。

    在这个中间态的数据结构和数据大小并不确定。所以最好是将相关数据序列化成一个JSON,然后存到nosql里面。

    [隐式回滚] 相对来说使用的场景比较少。它意味着这个回滚的动作不需要我们额外的处理,下游服务内部有类似"预占"并且"超时失效"的机制。

    例如:
    在电商的场景里面。会将订单中的商品预占库存,等待用户在多少分钟内支付。如果没有支付,就释放库存。

    2. 重试

    这个操作最大的好处就是不需要提供额外的接口[逆向接口]。这对于代码的维护和长期开发的成本有优势,而且业务是变化的。逆向接口也需要变化。所以更多时候可以考虑重试。

    不过相对于回滚来说,重试使用的场景要少一些。

    • 下游系统返回请求超时,被限流中等临时状态的时候,我们就可以考虑重试了。

    • 而如果是返回余额不足,无权限的明确业务错误,就不需要重试。

    • 一些中间件或者RPC框架,返回503,404这种没有预期恢复时间的错误,也不需要重试了。

    为了进行重试,我们还需要指定一个重试的策略,主流的重试策略主要是以下几种:

    1.立即重试: 有时候故障是暂时性的,可能因为网络数据包冲突或者硬件组件高峰流量等事件造成的,在这种情况下,适合立即重试的操作。不过立即重试的操作不应该超过一次,如果立即重试失败,应该改用其他策略。

    2.固定间隔: 这个很好理解,比如每隔5分钟重试一次。PS:策略1和策略2多用于前端系统的交互操作中。

    3.增量间隔: 这个也很好理解,比如间隔15分钟重试一次。
    return (retryCount-1)*incrementInterval;
    这个的主要使用目的是让重试失败的优先级往后面排。让新的重试入队。

    4.指数间隔: 和增量没有什么大区别,不过就是增长的幅度大一些。

    5.全抖动: 在递增的基础上,增加随机性,适用于某一时刻产生的大量请求进行压力分散的场景。

    return random(0,2^retryCount);
    6.等抖动: 在指数间隔和全抖动之间寻找一个中庸的方案,降低随机性的使用。
    var baseNum = 2 ^ retryCount; return baseNum + random(0,baseNum);
    3、4、5、6策略的表现情况大致是这样。(x轴为重试次数)
    图片

    为什么说重试有坑呢?

    正如前面说到的那样。出于对开发成本考虑,如果重试对接口的调用,就需要考虑到 幂等性 的问题。

    幂等性是一个数学概念,后引申为程序概念。
    这就意味着可能多次调用,如果没有保证幂等性的话,就会产生错误的操作。
    所以,一旦某个功能支持重试,那么整个链路上的解耦都需要考虑幂等性的问题,不能因为多次调用而导致业务数据的变化。

    满足幂等性的实现思路就是将其过滤掉:
    1.给每一个请求定一个唯一的标识。
    2.在进行重试的时候,判断整个请求是否已经执行过,或者正在执行。如果是就抛弃请求。

    第一点:可以使用全局ID生成器或者ID生成服务。或者粗暴一些,使用Guid,或者UUID。给每一个请求赋值。
    第二点:
    使用AOP实现,在业务代码前后进行校验。
    图片

    //【方法执行前】
    if(isExistLog(requestId)){  //1。判断请求是否已被接收过。对应序号3
        var lastResult = getLastResult();  //2。获取用于判断之前的请求是否已经处理完成。对应序号4
        if(lastResult == null){ 
            var result = waitResult();  //挂起等待处理完成
            return result;
        }
        else{
            return lastResult;
        } 
    }
    else{
        log(requestId);  //3。记录该请求已接收
    }
    //do something。。【方法执行后】
    logResult(requestId, result);  //4。将结果也更新一下。
    

    如果 「补偿」 这个工作是通过MQ来进行的话,这事就可以直接在对接MQ所封装的SDK中做。在生产端赋值全局唯一标识,在消费端通过唯一标识去重。

    重试的最佳实践

    重试特别适合在高负载的情况下被降级。当然也应当受到限流和熔断机制的影响。当重试和限流熔断一起搭配使用才是最佳的。

    需要衡量增加补偿机制的投入产出比。一些不是很重要的问题时,应该 「快速失败」 而不是 「重试」

    过度积极的重试策略(例如间隔太短或重试次数过多)会对下游服务造成不利影响,这点一定要注意。

    一定要给 「重试」 制定一个终止策略。当回滚的过程很困难或代价很大的情况下,可以接受很长的间隔及大量的重试次数,DDD中经常被提到的「saga」模式其实也是这样的思路。不过,前提是不会因为保留或锁定稀缺资源而阻止其他操作(比如1、2、3、4、5几个串行操作。由于2一直没处理完成导致3、4、5没法继续进行)。

    转自:https://zhuanlan.zhihu.com/p/258741780

    展开全文
  • 系统是由子系统组成的,子系统有故障时有控制地停止工作(failsilent,故障-静默模式),对系统而言仍是故障,因为它不再提供原定的服务了,这有可能引起全系统功能的失效。所以,安全是要从最高层的全局来分析的。...
  • 微服务的交互模式 服务与服务的交互模式可以分为以下3类: 同步调用模式 也就是同步阻塞。 接口异步调用模式 消息队列异步处理模式 以下是两条原则: 如果业务逻辑允许,我们可以将一些耗时长的、用户对...

    微服务的交互模式

    服务与服务的交互模式可以分为以下3类:

    • 同步调用模式
      也就是同步阻塞。
      在这里插入图片描述

    • 接口异步调用模式
      在这里插入图片描述

    • 消息队列异步处理模式
      在这里插入图片描述

    以下是两条原则:

    1. 如果业务逻辑允许,我们可以将一些耗时长的、用户对响应没有特别要求的操作异步化。
      例如,12306会在订票高峰期开启订票异步模式,用户是通过后续查询得到的结果。
    2. 如果性能不是问题或者处理的逻辑是短小的轻量级逻辑,那么可以使用同步方法。这样不需要引入异步化的复杂处理流程。
      例如,JDBC中的查询和更新,原则上都是短小操作,都是采用的同步阻塞BIO。

    交互模式下超时问题的解决方案

    对返回的状态定义分为以下两种:

    • 两状态:成功和失败。
    • 三状态:成功、失败和处理中。
    1. 同步调用模式下两状态的解决方案

    在这里插入图片描述
    对于同步接口调用服务1超时的情况,我们可以使用查询模式,在明确处理结果后,做相应处理。这种情况下服务1可能实际上没有收到一开始的处理请求,就会返回一个未知状态,而服务使用方需要使用统一请求ID进行重试,这就要求服务1必须具有幂等性。或者是服务1与同步接口的超时,这样也是需要同步接口发起重试的。

    在这里插入图片描述
    如果是服务1和服务2之间的超时,可以使用快速失败的策略,并判断服务2是否需要回滚。

    1. 同步调用模式下三状态的解决方案

    在这里插入图片描述
    三状态的同步接口与服务1的超时问题与两状态类似。
    在这里插入图片描述
    三状态的服务1与服务2的超时问题,与两状态的不太一致。三状态同步调用的内部超时场景下,可以返回给使用方一个中间状态(处理中)。这在这种场景下,系统尽最大努力作出补偿retry执行出错部分。要求服务2具有幂等性。

    1. 异步调用下两状态的解决方案

    在这里插入图片描述
    发生通讯超时的时候,与同步两状态的处理方式一样,也是需要通过查询模式来补齐状态的。

    在这里插入图片描述
    在异步两状态内部超时时,由于异步调用模式使用的是受理模式,一旦受理我们应该尽可能处理成功。因此,服务1需要根据服务2的查询结果,进行补偿。处理成功后异步通知使用方结果。

    在这里插入图片描述
    服务1要确保通知一定送达,所以需要按通知时间设计一个递增间隔通知的策略(比如指数回退),直到通知成功为止。

    1. 消息队列超时的解决方案

    在这里插入图片描述
    在这里插入图片描述

    之前已经提出过解决方案,不再赘述。

    在本节的解决方案,还需要实际项目的加成,现在理解可能还不太深刻。

    展开全文
  • 供电系统无功补偿控制中常需要对现场控制器进行远程控制投切、读取实时、历史数据和接收故障报警信号等,上位机和无功补偿终端之间通讯的命令和数据传输具有数据量小、定时或非定时及实时发送等特点,一方面需实现...
  • 本文介绍交互模式下可能遇到的超时问题,并对每个问题给出相应的方法、模式和解决方案。
  • 科尔多瓦插件相机预览 Cordova插件,允许通过Javascript和HTML进行相机... 设置聚焦模式,缩放,色彩效果,曝光模式,白平衡模式和曝光补偿 点按即可聚焦 录制影片 安装 根据您使用的框架,使用下面列出的任何一种安装
  • 环路补偿的一些知识doc,环路补偿的一些知识
  • 误差补偿网络化应用系统采用B/S模式和三层体系结构,web服务器负责与用户的交互,应用程序服务器负责误差补偿算法的执行,数据库服务器负责数据的存储。实验表明,基于网络的三坐标数控机床误差补偿网络化应用软件...
  • 本文简要介绍了红外线式触控交互技术的发展与探究。
  • 对于量角器Page对象模式。 特征 将您的页面或组件交互和选择器封装在类中 允许抽象测试页面中的元素和组件,这有助于在更改 html 结构时进行重构。 允许轻松设置输入字段 安装 npm install --save-dev protractor-...
  • 人机交互的控制及失误

    千次阅读 2020-04-11 00:00:04
    1 感觉-运动1.1动作的速度和准确性一般讲,速度是完成动作的主要要求。但在诸如跟踪动作(它要求连续的控制)、某些要求有准确性和控制性的定位动作以及进行某些操作活动时,准确性就成了主要...
  • 移动电视是指采用数字广播技术(主要指地面传输技术)播出,接收终端一是安装在公交汽车、地铁、城铁、出租车、商务车和其他公共场所的电视系统,二是手持接收设备(如手机、笔记本、PMP、超便携PC等)等满足移动...
  • 1)3种交互方式之显式交互(语音以及显示) 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。
  • 东北大学 人机交互 复习笔记

    千次阅读 2021-05-07 21:30:57
    (1) 交互设计 (2) 流行术语 (3) HCI (4) UI(人与计算机发生交互的一个空间) (5) GUI (6) HCI和SE (7) Usability和UX (8) User-Centered Design 二、 第三章 用户分析和任务分析 (1) 研究方法 ...
  • 设计模式在实际开发中的应用

    千次阅读 2020-10-26 16:51:56
    设计模式在实际开发中的应用 什么是设计模式 ​ 设计模式和设计原则类似,也是由程序员的前辈们总结出来,写出高质量代码的总结。 设计模式的说明及实际应用 创建者模式 1. 单例模式 ​ 同一个类型的对象,在全局...
  • 建造者模式(Builder Pattern)也称生成器模式,它属于创建型模式
  • 但是对于那些基于web service/rpc/jms等构建的高度自治(autonomy)的分布式系统接口,best efforts 1PC模式是无能为力的,此类场景下,还有最后一种方法可以帮助我们实现“最终一致性”,那就是事务补偿机制。...
  • 丢包补偿技术调查

    2020-08-11 19:37:26
    摘要调查显示了用于IP网络语音应用的各种丢包补偿技术。丢包补偿技术可以分为两类:基于发送端补偿和基于接受端补偿。基于发送端补偿包括前向差错纠正、交织和重传技术;基于接受端补偿包括了多种错误隐蔽算法。最后...
  • 分布式里面的补偿机制

    千次阅读 2020-09-25 10:52:46
    一:补偿机制的意义§ 举例一个常见场景: 客户端->购物车微服务->订单微服务->支付微服务 为什么要考虑补偿机制呢? 因为一次跨机器的请求通信可能会通过DNS,网卡,交换机,路由机,负载均衡等设备,这些设备都...
  • Python的23种设计模式

    千次阅读 2022-03-12 23:57:03
    设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验,考虑了封装性、复用性、效率、可修改、可移植等各种因素的高度总结。它不限于一种特定的语言,它是一种解决问题的思想和方法。...
  • 虽然涉及眼睛凝视分析的研究可追溯到19世纪初,但直到最近,眼睛注视追踪器主要用于分析眼睛参数以进行阅读和各种人机交互任务。 随着处理器速度和图像处理算法的进步,现在还可以实时使用凝视跟踪技术来控制直接...
  • 第三种:设置集群镜像模式 我们先来介绍下RabbitMQ三种部署模式: 1)单节点模式:最简单的情况,非集群模式,节点挂了,消息就不能用了。业务可能瘫痪,只能等待。 2)普通模式:默认的集群模式,某个节点挂了,该...
  • 互联网公司常用架构模式梳理

    千次阅读 2020-01-17 09:46:44
    1.1、大使模式:创建代表消费者服务或应用程序发送网络请求的帮助服务 进程外的代理服务(很多框架层面的事情可以以软件框架的形式寄宿在进程内,也可以以独立的代理形式做一个网络中间件)。这里的大使模式意思...
  • title:RabbitMQ 消息中间机制以及数据补偿策略 了解RabbitMQ 机制 RabbitMQ 能做什么 一直工作中都有使用到RabbitMQ 而最近的工作同样遇到针对于RabbitMQ的问题无法解释甚至解决,意识到“好记性不如烂笔头” 的...
  • 门面模式,也叫外观模式,英文全称...实际上,从隐藏实现复杂性,提供更易用接口这个意图来看,门面模式有点类似之前讲到的迪米特法则(最少知识原则)和接口隔离原则:两个有交互的系统,只暴露有限的必要的接口。...
  • PWM反馈控制模式

    2014-02-26 15:18:58
    开关电源五种PWM反馈控制模式开关电源五种PWM反馈控制模式
  • 文章目录一、命令模式定义二、命令模式的结构和说明三、命令模式示例 一、命令模式定义 将一个请求封装成一个对象,从而使你可用不同的请求把客户端参数化,对请求排队或者记录请求日志,以及支持可撤销和恢复操作...
  • 示波器的三种触发模式详解

    万次阅读 2021-03-30 20:11:49
    一、什么是示波器的触发模式? 示波器的“触发”就是使得示波器的扫描与被观测信号同步,从而显示稳定的波形。为满足不同的观测需要,需要不同的“触发模式”。示波器的基本触发模式有三种: 第一种是“自动模式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,409
精华内容 5,363
关键字:

交互补偿模式