Rpc网关
2018-09-15 本文已影响372人
zxRay
背景
用户下单后,商家的ERP系统想实时获取订单数据,以提供更好的服务。一个解决方案是,商家在公有云环境订购一个RDS,用户下单后,平台实时的将订单数据推送到此RDS中。但是,此方法碰到一个网络问题![](https://img.haomeiwen.com/i2036372/77d8ec68d77dd267.png)
![](https://img.haomeiwen.com/i2036372/9a4690b702bad065.png)
![](https://img.haomeiwen.com/i2036372/b97e7657a0e887a3.png)
架构设计
传统的RPC框架Provider会开启监听端口,等待Consumer请求。但是,在此网络环境下,Proxy无法主动访问Provider,所以需要Provider主动访问Proxy,即在CS架构下,Provider也是Client一方. 这也决定了无法直接在Dubbo等开源框架上进行扩展,所以我们决定重头开发一个简易RPC框架+代理网关。本着简单的原则,设计了如下架构:![](https://img.haomeiwen.com/i2036372/7467fb37201a9032.png)
这个架构非常简单,配上监控降级等Ops系统,很好的解决了我们的需求。
但是,这个架构有个明显的缺陷,那就是每一台ProxyServer都需要跟所有的Provider跟Consumer维持长连接,即缺乏扩展性,无法接入更多的业务系统,无法平台化
平台化
我们的环境Consumer跟Provider总共就300来台服务器,所以为了快速开发,一开始我们就采用上面的专用化方案,总共架设了50来台ProxyServer搞定了这个需求. 需求发布后,没多久我们收到了个别业务方表示也有这方面的需求,这让我们有了平台化的诉求。但是平台化是个复杂的工程,本着学习的态度我们进行了一些尝试。
![](https://img.haomeiwen.com/i2036372/c418fbfea9d155f6.png)
- Proivder根据{provider_name}做一致性hash,筛选出一批ProxyServer进行服务注册(上面架构图步骤1)
- 经过一致性has后,从大的层面看,我们发现无需多大改动,系统就支持了这种按Provider切分。但是,从细节处,优雅上下线,连接管理变的复杂的多,有很多细节是需要优化的
- 此外,平台化后,还需要有接入平台,更加专业的监控,管理等Ops系统支持.