服务部署的挑战
每个服务都需要独立的代码管理、版本管理、编译构建、部署到测试环境,部署到生产环境,代码回滚等等事情,如果要有几十个服务要部署,人工管理几乎不可能完成。
服务伸缩的挑战
无状态服务需要配置负载均衡和增加节点,有状态服务需要扩充单个服务的资源,如果需要减少资源浪费,需要监控每个服务,还需要减少节点和资源。
服务高可用的挑战
每种服务的高可用策略都不一样,无状态服务相对简单,管理每个有状态服务都是难题。
服务容错的挑战
任何一个服务的可用性都不是 100% 的。在分布式系统中,当我依赖的某个服务不可用的时候,我自身也将不能工作。如果是一个复杂的分布式系统,会依赖更多服务,任何一个服务不可用的时候,系统自身也将不能工作,再加上网络不稳定的因素,系统自身的可用性将大幅度下降。
依赖关系的挑战
依赖配置文件,如果写在代码中,需要重新部署才能生效,而配置文件还会污染代码
服务监控的挑战
大量微服务如何同时监控?监控的日志,性能指标如何收集,集中展现?服务间的调用关系如何跟踪?每一次调用经过了哪些服务,调用是否成功?