我正在尝试了解 gRPC 并利用其在流客户端和服务器端功能中的优势,并将其性能与 REST 进行比较。
在我的 POC 中,我在应用程序中创建了请求观看电影并获得推荐的应用程序。
应用程序在接收到请求后,会获取按类型分类的电影列表,然后将其与用户偏好进行匹配,最后将其传递给推荐引擎以向用户推荐电影响应。
将为该解决方案构建总共四个微服务。微服务之间的所有交互。
请求流:Movie Finder -> Movie Store -> User Preferences -> Recommender
pipeline(
movieStoreClient.getMovies({genre}),
new Transform({
objectMode: true,
transform({movie}, encoding, callback) {
callback(null, {userId, movie});
}
}),
userPreferencesClient.getShortlistedMovies(),
recommenderClient.getRecommendedMovie((err, recommenderResponse) => {
if (err) {
console.error(err);
return next(err)
}
return res.send(recommenderResponse);
}),
(err) => {
if (err) {
next({message: err.message})
}
}
);
由于流式传输和轻量级有效负载,我假设 gRPC 将击败 Rest API。但事实并非如此,REST API 在 600 毫秒内返回,而 gRPC 在 4 秒内返回。
我正在考虑使用 makeGenericClientConstructor 来防止序列化\反序列化请求和响应,以减少消息数据对话时间,但不幸的是我需要对数据进行操作以添加用户信息,所以我必须反序列化它。
我错过了什么?
如果有人有时间看,这是我的 POC。 https://github.com/amit034/grpc-node-poc