Architecture microservice的用户特定设置

Architecture microservice的用户特定设置,architecture,microservices,Architecture,Microservices,假设有一个服务,负责向用户销售苹果 如果每个用户都必须为一个苹果支付不同的价格,那么该数据(设置)是存储为服务a数据库的一部分,还是存储在外部 如果我们有多个不同的配置(用户/苹果成本、用户/苹果折扣、用户/苹果津贴),那么什么是处理用户/服务映射的良好体系结构方法,有什么建议吗?我认为最好的方法是将这种关系存储在微服务中,因为价格是与销售过程直接相关的信息,而不是用户固有的东西。 因此,我会有一个表或任何其他存储机制,在其中,我会将用户和他们对每件商品的价格联系起来。例如,以关系方式,我将有一

假设有一个服务,负责向用户销售苹果

如果每个用户都必须为一个苹果支付不同的价格,那么该数据(设置)是存储为服务a数据库的一部分,还是存储在外部


如果我们有多个不同的配置(用户/苹果成本、用户/苹果折扣、用户/苹果津贴),那么什么是处理用户/服务映射的良好体系结构方法,有什么建议吗?

我认为最好的方法是将这种关系存储在微服务中,因为价格是与销售过程直接相关的信息,而不是用户固有的东西。
因此,我会有一个表或任何其他存储机制,在其中,我会将用户和他们对每件商品的价格联系起来。例如,以关系方式,我将有一个表,其中(productId、userId、price)

取决于复杂性。我见过如此复杂的微服务拓扑结构,将
ConfigurationService
分离是一个完全合理的决定。只要您的域足够简单,这样的设置肯定属于服务
a


请记住,以前在其他地方可能需要此设置,所以请编写这样的代码,这样您就可以轻松地将其剪切并发布为独立的包/自托管服务。这完全取决于您的业务逻辑如何运行。微服务只是访问业务规则的一种方式。 假设您有两种规则: 1.RP1:所有参数的产品特定规则(苹果、芒果、橙子等的规则) 此规则集可能是查找产品基值的表:

  • RU1:特定于用户的规则(高级用户、普通用户等)。另一个基于用户ID或用户段的查找
  • ]

    我将尝试以一种方式定义我的计算,即RP1和RU1可以单独计算,然后组合。 因此,我的最后一个微服务服务A将 (输入:产品、用户、参数列表;输出:参数值列表)。 服务A应该在内部调用RP1和RU1,并使用第三组规则组合输出。 此规则可以是返回的静态规则 优质客户周一苹果价格=1*0.9

    或另一种类似于基值和参数组合的查找:

    您可以使用ConfigurationProperties映射每个国家/地区的数据

    示例代码:

    @ConfigurationProperties("a")
    public class customConfiguration{
    
        private final Map<String, String> b= new HashMap<>();
    
        public Map<String, String> getB() {
            return b;
        }
    
    }
    
    当你实现它时,你有一个地图

    b = {c->5, d->10}
    

    这就是我目前所拥有的,我只是想知道是否有更好的方法,因为通过添加更多的设置,如下面的示例中所示,我们将大幅增加服务的规模以及HTTP流量。如果用户和产品的价格可能不同,并且没有可以应用的规则来获取价值。您必须以一种或另一种方式存储所有信息。如果这种组合非常大,我认为唯一的解决方案是按产品提供服务,该产品的每个用户的映射可以独立于其他产品进行扩展。这样,您可能会得到大量的服务,不确定这在商业上是否可行。您是对的,我认为更好的方法是第一个解决方案,通过用户ID使用分片数据库,这样流量将在多个实例之间进行分割,并且只要所有用户都有相同的记录,流量就会平衡。关于http通信量,我认为这与您存储数据的方式或您拥有的微服务量无关。如果价格波动不大,解决方案将使用缓存
    b = {c->5, d->10}