上下文
假设我们有一个有多种业务的组织。在这个例子中,Business A向大学生出售千兆位的互联网服务。商务B公司向老年人出售一种兆位互联网服务。这些企业销售的相关产品略有不同,每一种都针对不同的人口群体。
乍一看,这似乎只需要一个应用程序处理所有请求。然而,企业之间的分歧是很自然的,因为它们各自针对的是一个特定的人口群体--从本质上说,每个企业都有自己的业务需求。例如,Business可能公开一个移动应用程序,以便客户管理他们的帐户。业务B可能会公开一个电话号码,客户必须打电话来管理他们的帐户。清单不胜枚举。
在这种情况下,使用微服务的最佳方法是什么?
问题是,在不同的业务中都有共同的和不常见的功能。
我们可以保持一些干燥,并有一套基本的微服务(计费-api,订单-api等)。可以被不同的企业所消费。这是可行的,但这会导致微服务具有更多的“通用”抽象,从而导致更多的复杂性。具体的例子是,假设计费-api服务有一个由业务A和B共享的/charge端点。业务B的要求是总是从订单中打折5美元:
//billing-api
if (businessB) {
orderCost -= 5;
}在这种枯燥的方法中,我们将为每个业务提供一个API网关(BFF模式),它将聚合不同的微服务以满足它们的业务需求。所有“特定于业务”的逻辑都将从基本的微服务转移到相应的业务API网关。在这个折扣示例中,我们可以将此控件倒转到使用者,而不是在计费-api端点中进行if (businessB)检查:
//billing-api
const { orderDiscountAmount } = req.body; //body parameters
if (orderDiscountAmount > 0) {
orderCost -= orderDiscountAmount;
}然后,在调用计费- API端点时,Business的api网关中的端点将传递为5的orderDiscountAmount:
//Business B API Gateway
billingApi({ orderDiscountAmount: 5 });这似乎很好,但我们所做的只是在计费-api端点中使用了Business的逻辑,并创建了一个通用(但却是强制的)抽象。这是“合理的”说,也许商业A可能会使用这一天--但这可能永远不会发生。总的来说,对于开发人员和端点的使用者来说,这是一个不自然的练习。各方面的复杂性和认知负荷都在增加。
为了最大限度的灵活性和简单性,我们可以废弃干,避免在企业之间共享微服务。然而,如果增加更多的业务(10-20),那么可能会有大量的重复功能。
在这种情况下,团队应该如何构建?
如果我们对上面的枯燥方法没有意见,那么团队应该如何构建呢?我们可以有垂直分割的特性团队,但这是否意味着如果我们有10家企业,一个团队就需要拥有所有业务的特性(即结帐)?这种方法的缺点是,特性团队不会是任何业务的整体专家--在给定的业务中,这些团队只会是某一特性的专家。没有完整的商业背景,就很难做出正确的决定。
我们可以为每个业务建立一个流对齐团队,专门用于UI和API网关。然后,我们将让平台团队创建微服务,供与流对齐的团队使用。这样做的缺点是在流对齐的团队和平台团队之间有一个切换步骤,即依赖关系。
我不知道我是不是从错误的镜头看所有这些-任何反馈都会感谢!
发布于 2022-04-16 07:35:47
很抱歉,但是这对于Stackoverflow来说不是一个好问题,因为任何答案都是基于意见的,而且许多方法都可能有效,并且取决于特定用例中的更多细节。所以,如果问题在某个时候结束了,不要失望。
话虽如此,我并不羞于提出我的意见,或至少对你所描述的情况提出一些想法。
,
(明智地指更详细的/反映更多的业务需求)第二种方法最初通常比较困难,但在我的经验中,当达到一定的复杂性阈值时,效果会更好。
当我读到你的问题时,这些只是我脑海中浮现的几件事。我很抱歉,他们不能回答你关于如何分割计费API的详细问题,但是也许您手头还有一些额外的考虑。
https://stackoverflow.com/questions/71882274
复制相似问题