我们公司是做私有云的,已经建成了一个平台,我们都是在这个平台上开发。现在遇到一些问题,希求大神解答。
首先,我是个刚出道的新人,现在所在的公司是做私有云服务的。我们一个项目通常包含多个私有服务,当需要使用其他服务时,直接发请求就OK了,非常方便。重点是这样做可以大大加快项目进度,因为每个人负责的板块都是一个独立的服务,并且service层跟controller层都是分开成独立服务的。
如果不是频繁的调用其它服务的话还好,可是经常会遇到这样的一种情况:比方说页面上有一个列表,列表中每一条数据都包含其他服务所提供的数据(如果是传统的项目很简单,直接在数据库联表查询就好了),那么当我把自己的数据查询出来之后,还要遍历所有数据,逐条去发请求到其他服务获取对应的数据。
这样子频繁的发请求调用其它服务导致了极大的性能开销。
如果页面显示的是10条数据,就差不多需要等2到3秒的时间才能显示出来,因为后台最少都发了10次请求。如果用户把显示条数改成100的话,我都不敢去想那是一个怎么样的情景。
对于这样的问题,我肯定是没办法解决的,当然也已经跟公司的平台研发团队提了,但是暂时没有答复……
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
看来这里没有大神,只有大婶######难就看看什么地方开销大啊,直到问题解决问题就简单了,如果是网络io,就让一次查询携带更多的数据就行了,批量查询,缓存,。如果是业务逻辑。就看看没有能优化的地方额######如果可以一次查询肯定快很多,因为主要是网络传输问题。但是需要跟负责该服务的人提供这样的接口,服务通常都是没有提供传一组ID获取一组数据这样的接口的。——这肯定是解决问题的办法之一,感谢回答。但是还是认为不是长久之计——这样增加了开发的时间,而且没人知道到底哪个服务会需要提供这样的接口,只有发生了才会知道。######如果10条请求是串行的话那必然慢,走并行的话就好了,不过比较考验后端的并发能力######回复 @沃森OS : 为何不能并行?编号1-10的10条数据,没必要等编号1的数据返回之后再开始请求2啊,可以1-10同时请求的######这里应该是不能并行,因为是需要遍历来获取数据的,然后把获取的数据和原来的部分合并######添加批量查询,就可以暂时解决你的问题,架构上频繁交互的服务器最好是局域网内。######@沃森OS 没做过私有云,不了解这块######回复 @ken_zh : 现在做私有云不都这样做的吗######@沃森OS 那只能说,你们这是架构缺陷######因为是私有云,最后可能会部署到客户那边去,但是还是会有外网访问的部分。另外批量查询觉得还是不太靠谱,因为没人知道到底哪个服务会需要提供这样的接口,只有发生了才会知道。我们的服务都分得很细,这样的话会使得开发比较混乱。###### 这和云不云没关系。
如果你页面里10条记录在不同的地方查出来的,你得并行去查,不要一个接一个。如果只从一个地方取,那对方就要实现批量查询的功能,http/1.1有个pipline功能能缓解这个问题,只要你们的API用的是比较标准的服务器,比如nginx那些,不过最好还是做批量接口。