微服务:同步与异步的抉择。

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

这两个原则从字面意义上看是完全不同的,甚至是矛盾的。实际上,这里的原则都没有错,只不过原则抽象的太干净利落,以至于没有给出适合这些原则的环境信息。

第1条原则是从业务功能的角度触发的,也就是从用户或者使用方的交互模式出发的,如果业务逻辑允许,用户对产品的交互形态没有异议,则我们可以将一些耗时较长的、用户对响应没有特别要求的操作异步化,依次来减少核心链路的层级,释放系统的压力。例如:12306在订票高峰期会开启订票异步模式,在购票后用户并不会马上得知购票的结果,而是后续通过查询得知结果,这样系统便赢得了为成千上万的用户处理购票逻辑的时间。

第2条原则是从技术和架构的角度出发的,这条原则应用的前提是同步能够解决问题,这隐含了一个含义:如果性能不是问题,或者所处理的操作是短小的轻量级处理逻辑,那么同步调用方式是最理想不过的,因为这样不需要引入异步化的复杂处理流程。例如:所有JDBC的实现使用同步阻塞的BIO模型,即访问数据库操作时无论是查询还是更新,原则上都是短小操作,不需要异步化,而是在同步过程中完成请求的受理和处理过程,这也是为什么不推荐将大数据存储到关系型数据库中,关系型数据库只存储交易相关的最小化核心信息。

你可能感兴趣的:(#,微服务,#,工作建议)