微服务是 SOA 的一个简化版本,并且是具体的实现技术,采用容器对服务打包,可以这样说,如果没有容器技术,微服务就发展不起来。我们都知道,传统的单体应用程序会随着功能的扩展变得越来越庞大,最后修改代码、版本升级或者重新部署都会变得异常困难,甚至根本无法进行。
微服务的出现就是用来解决这个问题的——把一个庞大的单体应用横向切割成若干个微服务,每个微服务只做一件事,但它仍然包含展现层、应用层和数据层。微服务单独运行,对外暴露 API 接口供其他程序调用。所以说,微服务侧重于替换企业内部的大型单体应用,以便于应用程序的可持续演进(持续代码完善、持续版本升级、持续缩放部署、DevOps)。
由于每个微服务都有自己的数据层,所以这个带有状态的微服务就很难跨应用调用。由于每个微服务只做一件事,所以复杂度大大降低;另外,微服务可以单独开发和部署;再者,微服务可以单独缩放扩容,这些都是优点。
但是微服务也存在不足之处:微服务之间的调用关系更复杂,数据一致性保证更复杂,总体微服务部署更复杂。一个典型的基于微服务的应用部署包括若干个微服务实例、API 网关、微服务注册机构及若干负载均衡器等。