zoukankan      html  css  js  c++  java
  • 同步、异步的使用场景及好处

    异步的使用场景:

    1、不涉及共享资源,或对共享资源只读,即非互斥操作

    2、没有时序上的严格关系

    3、不需要原子操作,或可以通过其他方式控制原子性

    4、常用于IO操作等耗时操作,因为比较影响客户体验和使用性能

    5、不影响主线程逻辑

    同步的使用场景:不使用异步的时候

    同步的好处:

    1、同步流程对结果处理通常更为简单,可以就近处理。

    2、同步流程对结果的处理始终和前文保持在一个上下文内。

    3、同步流程可以很容易捕获、处理异常。

    4、同步流程是最天然的控制过程顺序执行的方式。

    异步的好处:

    1、异步流程可以立即给调用方返回初步的结果。

    2、异步流程可以延迟给调用方最终的结果数据,在此期间可以做更多额外的工作,例如结果记录等等。

    3、异步流程在执行的过程中,可以释放占用的线程等资源,避免阻塞,等到结果产生再重新获取线程处理。

    4、异步流程可以等多次调用的结果出来后,再统一返回一次结果集合,提高响应效率
    ---------------------

    典型的用户场景

    在公众号的运营过程中,典型的事件包括:

    • 发送短信验证码

    • 购买成功或者抽奖成功短信通知

    • 卡券或优惠券发放

    • 发放微信红包

    • 微信消息通知

    • 订单流程处理

    • 定时批处理(比如数据同步)

    • 工作流性质的异步任务(未完成异步任务补偿)

    面详细说明不同场景能够异步的原因:

    1. 不同场景(用户注册,用户购买产品等)下的短信验证码发送,可以使用异步方式发送: 一方面是因为客户这个时效性要求没有那样高,另一方面在特定时间范围内用户没有收到验证码,用户可以点击再次发送验证码。

    2. 购买成功或者抽奖成功后短信或者邮件通知,可以通过异步的方式进行。 因为涉及用户的利益,要谨慎对待。一方面一定要把数据先存到数据库或者日志里面(注意信息安全^-^,别存敏感明文信息或者加密存储),然后再放入到异步队列中执行。

      另一个方面,要考虑到应用服务意外停止时,没有发送成功数据的补偿机制。 这种情况不常见,并且为了减少耦合和当前异步程序的复杂度。我们使用单独的服务上部署异步任务补偿程序,来扫描未完成的任务,并且进行重放(一定要注意严谨性)。

    3. 优惠券和卡券的发放,跟购买成功或抽奖成功的方式类似。u000b可以在当前活动高峰后延时发放,并且使用异步的方式进行。

    4. 微信红包,因为需要跟微信进行交互,并且微信会通知客户红包的情况,可以使用异步的方式进行。 当涉及资金或者礼品时,一定要谨慎对待设计,并且需要有方便进行异步任务停止和启动的功能。

    5. 微信消息通知,因为跟微信进行交互,成功后微信进行通知,可以使用异步。 这个跟短信验证码类似。

    6. 订单流程处理,可以使用异步,因为涉及到后续步骤可以使用简单工作流来完成。有几个开源的框架可以参考。

    7. 数据同步或者异步任务补偿,因为是延时处理,可以使用异步进行处理。在使用时,可以配合定时任务,比如cron4j来周期性的进行补偿。适合后面总-分-总的任务处理模式。

    使用异步后的烦恼

    烦恼一: 数据丢失的风险

    解决方式:先写日志或数据库,后放入异步队列.

    烦恼二:对其他系统的压力变大

    解决方式:使用一定的限流和熔断,对其他系统进行保护。

    烦恼三:数据保存后异步任务未执行

    解决方式:使用异步任务补偿的方式,定期从数据库中获取数据,放到队列中进行执行,执行后更新数据状态位。

    烦恼四:怎样队列长设置和消费者数量

    解决方式:使用实际的压力测试来获得队列长度。或者使用排队论的数学公式得到初步的值,然后进行实际压测。

    最后介绍一下项目中的经验:

      • 量力而行:根据业务特点进行技术选型,业务量小尽量避免使用异步。有所为,有所不为

      • 数据说话:异步时一定要进行必要的压力测试

      • 先找出系统的关键点:优化单体系统内的性能,再通过整体系统分解来全局优化

      • 根据团队和项目的特点选择框架。

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/h-c-g/p/10717535.html
Copyright © 2011-2022 走看看