开发当中要尽量避免,一些无限制的服务拆分,导致服务数量的庞大.架构要保持一个度,其中人力,服务边界,性能等等都要考虑到,本文记录一次,冗余架构拆分带来的性能损耗.
架构模式介绍
一个调度服务(C++)负责下发请求到对应的下游服务,获取对应的结果.由于下游服务是一个业务的整体,就加了一个网关的模块是基于PHP写的.
问题分析
1.首先网关这么重要的业务不应该那一些性能较低的语言去构建,应考虑性能高的语言编写,否则转发效率低下
2.网关的服务以模块功能较少,其中由于我们的场景是内网请求不涉及权限的校验,流量控制(在调度服务控制)等.只是做了协议转换,模块的定位不清晰,与调度服务边界不清晰.
3.问题定位的难度会有增加,请求链越长对问题定位越不利.
解决方案
将网关模块的功能放入调度模块.从架构上看,这块的功能本身就可以放入到调度服务,反而使服务边界更加清晰.
优化后的架构
收益
1.性能提升,显而易见C++重写了PHP网关的功能,而且减少了一层网络调度.
2.稳定性的提升,之前网关服务不稳定会直接影响到对应的业务处理.
3.问题的定位,当一次请求的服务越长,就增加了定位问题的难度.就会有很多的不确定性.
总结
架构设计不是微服务化拆分的越细越好,更是权衡的结果.保持架构的简洁性是很必要的,减少业务流程调用步长.