主页

Dubbo RpcContext 在异步并发场景下的一个隐藏 Bug

问题出现 我们团队基于 Apache Dubbo 开发了公司自用的 RPC 框架,整合了一些治理功能,比如限流、熔断等等。之前这个框架都是基于 Dubbo 2.7.3 开发的,今年才升级到 Dubbo 2.7.7。上周,有业务团队反馈,说升级到使用 Dubbo 2.7.7 的新版本框架之后,在一个异步的服务调用中客户端出现了持续的信号量耗尽报错,且无法自行恢复。低版本框架则没有这个问题。 Netflix 开源的 Hystrix 组件提供了信号量隔离的功能。每个请求在发出前都需要获取信号量,执行完成后释放信号量。这样就可以控制请求的并发数。 问题排查 我们在 Dubbo 中整合 Hystrix 中客户端的限流是通过 Comsumer Filter 进行的。框架在 Filt...

阅读更多

从一个问题来理解 JS 中 instanceof 的实现方式

问题出现 这周,在对接一个第三方组件的时候,我遇到了一个问题。问题本身比较复杂,这里就不展开了。排查到最后,我的注意力集中在了下面这段代码上: const xhr = new XMLHttpRequest(); // 此处对xhr的初始化逻辑省略 if (responseType !== 'text' && xhr instanceof XMLHttpRequest) { xhr.responseType = responseType; } 通过调试,我发现 xhr instanceof XMLHttpRequest 的值居然是 false!作为一名 Java 程序员,看到这个的时候我表示震惊。 随后,我谷歌了 JavaScript 中 instanc...

阅读更多

面向对象的一些设计原则

作为一个使用面向对象编程语言的程序员,掌握一些基本的设计原则对提升我们的代码质量是很有帮助的。 首先要介绍的是SOLID原则,它实际是由美国软件工程师罗伯特·C·马丁在21世纪早期引入的针对5个设计原则的首字母缩写。它们分别是单一功能原则(S)、开闭原则(O)、里氏替换原则(L)、接口隔离原则(I)以及依赖反转原则(D)。如果能够在设计中应用这些原则,我们就会得到一个容易进行软件维护和扩展的软件系统。 单一职责原则(Single responsibility principle, SRP) 单一职责原则认为一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类或模块中,即有且仅有一个原因对该它变更。如果一个类负责了两个不同的职责:职责A,职责B。当由于职责A需求发生改变而需...

阅读更多