微服务——公共表查询

在微服务中,多个服务可能查询同一个 MySQL 的表,比如用户表等,这时需要考虑解耦和性能问题。

问题

  • 多个服务同时使用同一个公共表,一旦其中一个服务的查询语句索引失效,就会引发全表搜索,导致其他服务也被阻塞

方案

  • 方案 1
    • 将公共表下沉为基础服务(关联公共表数据库),业务模块上浮为业务服务(关联业务自己的独立数据库),业务应用通过 RPC/RestfulAPI 间接访问公共表
    • 优点:
      • 某个服务阻塞不会影响其他服务
    • 缺点:
      • 开发繁琐,连表查询需要用逻辑实现,容易犯错
  • 方案 2
    • 用注册发现机制,将服务可以提供的 url 注册到注册中心,由调用者发现、关联
    • 利用 java 注解实现数据字段的关联和自动查询;在 golang 中可以用 tag 和反射实现
    • 优点:
      • 通过框架屏蔽了复杂性
    • 缺点:
      • 限于数据量较小的情况,如果量太大需要专门的批量查询优化