微服务架构的好处之一是可以在不扩展应用程序其他部分的情况下扩展频繁使用的部分。
然而,我的问题是,如果一个被大量使用的微服务依赖于其他微服务来完成它的工作,那么你不需要扩展其他服务吗?如果一个微服务实时调用其他微服务来完成它的工作,是否意味着微服务边界没有正确建立?
这没有经验法则。
扩展通常取决于一些指标,当达到某些阈值时,就会创建新的实例。当它们不再需要时,也同样如此。
一些服务正在执行简单,快速的任务,例如接受输入并将其写入数据库,而其他服务可能是运行时间较长的任务,可能会占用任何时间。
如果一个需要扩展的服务正在调用一个可以以可靠的方式轻松处理繁重负载的服务,那么就不需要扩展该服务。
扩展背后的思想是在需要时扩大规模以支持负载,然后在负载达到常规指标范围时缩小规模以降低成本。
这里要讨论两个主题。首先,通常情况下,同步通信两个微服务并不是一个好的实践,因为你是在时间上耦合它们,我的意思是,一个服务必须等待另一个完成它的任务。因此,通常使用一些消息队列来解耦生产者和消费者是一种更好的方法,这样一个服务的负载不会影响另一个服务。
然而,在某些情况下,两个服务之间有必要进行同步通信,但这并不意味着它们必须以相同的方式扩展,例如:如果一个服务必须多次调用其他服务、查询数据库或其他繁重的计算任务,而其中一个被调用的服务只执行数组排序,那么为了处理相同数量的请求,第一个服务可能必须比第二个服务扩展更多,因为第一个服务中的线程将比第二个服务占用更长的时间