一个微服务是否应该同时是 public 和内部的
Should a single microservice be both public and internal simultaneously
存在三个微服务:
作者
它有能力 SELECT 和 CRUD 实体 "author"
图书
它有能力 SELECT 和 CRUD 实体 "book"
移动应用主机
专为移动客户端构建,以响应请求的完整数据模型,以便移动应用程序不会 'enrich' 数据在其端。
示例:API 'MobileHost.getAllBooksOfGivenAuthor' 将通过调用 'Authors.getAuthorData(authorId)' 并将其数据与 'Books.getBooksByAuthorIds(authorId)' 合并,从而生成如下结构,同时返回作者姓名和书名:
{
"author" : {
"name" : "Winner",
"id" : 1
},
"books" : [
{
"name" : "Book A",
"id" : "13231231"
}
]
}
我的问题是:
如果手机客户端通过"Mobile app host"读取数据,是不是也应该通过"Mobile app host"读取数据"add author",还是直接联系"Authors"服务就可以了?在这种情况下是否应该代理 CRUD?
这取决于你的目标。
根据我的经验,此类“托管”或“代理”服务往往会变得越来越大,但没有任何真正的责任。将许多 类、功能和职责耦合到一个地方绝对不是一个好主意——随着时间的推移,维护这样的服务会很困难。
此外,如果例如只需要扩展作者服务,则扩展此类服务的实例可能非常困难且资源效率低下。因此,如果您打算分别横向扩展不同的服务和活动,那么,当然,您不需要仅使用一项服务来代理请求。您可以有多个代理服务,例如,单独扩展它们或直接调用 Authors 服务并扩展它们而不是代理。
但是,如果您没有看到提到的机会,那么请尽可能保持简单——您始终可以在需要时将服务及其代理分开,只需将所有内容分开即可。
存在三个微服务:
作者
它有能力 SELECT 和 CRUD 实体 "author"
图书
它有能力 SELECT 和 CRUD 实体 "book"
移动应用主机
专为移动客户端构建,以响应请求的完整数据模型,以便移动应用程序不会 'enrich' 数据在其端。
示例:API 'MobileHost.getAllBooksOfGivenAuthor' 将通过调用 'Authors.getAuthorData(authorId)' 并将其数据与 'Books.getBooksByAuthorIds(authorId)' 合并,从而生成如下结构,同时返回作者姓名和书名:
{
"author" : {
"name" : "Winner",
"id" : 1
},
"books" : [
{
"name" : "Book A",
"id" : "13231231"
}
]
}
我的问题是:
如果手机客户端通过"Mobile app host"读取数据,是不是也应该通过"Mobile app host"读取数据"add author",还是直接联系"Authors"服务就可以了?在这种情况下是否应该代理 CRUD?
这取决于你的目标。
根据我的经验,此类“托管”或“代理”服务往往会变得越来越大,但没有任何真正的责任。将许多 类、功能和职责耦合到一个地方绝对不是一个好主意——随着时间的推移,维护这样的服务会很困难。
此外,如果例如只需要扩展作者服务,则扩展此类服务的实例可能非常困难且资源效率低下。因此,如果您打算分别横向扩展不同的服务和活动,那么,当然,您不需要仅使用一项服务来代理请求。您可以有多个代理服务,例如,单独扩展它们或直接调用 Authors 服务并扩展它们而不是代理。
但是,如果您没有看到提到的机会,那么请尽可能保持简单——您始终可以在需要时将服务及其代理分开,只需将所有内容分开即可。