一些微服务的策略

通信

  • 如果有同步要求,使用 REST HTTP 接口,提供 JSON 数据。
  • 如果同步事务对事务完整性非常敏感,通信应该提供二次提交机制,并辅以定时检查。
  • 注意连接超时,连接错误, 40x, 50x。
  • 如果没有同步要求,使用消息队列。
  • 如果希望得到松耦合的系统,消息应该说我处于一种状态,Fanout 至所有队列,由消费者决定如何处理消息。
  • 如果希望得到紧耦合的系统,消息应该说我要做一种行为,发送到特定几个队列,由发送者决定如何处理消息。

日志

要有中心化的日志服务。 收集的内容最好包含

  • 要记录请求的来源方(自定义 UserAgent ),如果是通过 HTTP 通信。
  • 要记录消息的状态变更(出队,入队),如果是通过消息队列通信。
  • 要记录用户请求的唯一ID,如果用户请求被拆解到多个微服务请求。
  • 要记录时间戳。

要有脚本监控这些日志,设定业务规则,若以唯一ID为索引的日志条数没有满足预期,发出报警 相对应的,缺失的事务,如果允许,可以通过重新执行修复事务。

路由配置

  • 如果对跨域感到烦恼,使用一个域名,同时将路由的第一层用于标识服务,Load Balancer 用于转发请求。

API 文档

  • 如果有自动化集成服务,应该自动生成文档,并保留历史版本。
  • 文档里要带上例子。
  • 如果有一些特性多服务都会拥有,提供这些特性的说明。
  • 如果能 Host 文档,提供一个能用浏览器查看的地址。

环境

  • 预发布环境依然很重要。
  • 测试环境要与其它环境彻底隔离。

服务发现

  • 在机器上配置 Host 和 Port 完成服务发现,没有单点依赖,但需要做好 Failover。
  • 通过服务发现服务(etcd, consul)完成服务发现,要保证该服务的高可用。