要理解微服务,首先要理解软件架构的演变
单体架构
早期的服务将所有功能都写在一起,这称为单体架构,随着功能的增加,程序将变得极为复杂和难以维护:
- 所有功能都耦合在一起,相互影响最终难以管理。
- 每次程序有改变,即便很小的改变,必须重新编译部署,成本较高。
- 因为软件做成了一个整体,不能每个功能单独开发和测试,只能整体开发和测试,所以必须采用瀑布流开发模式。
单体架构开发的大型软件,不仅开发效率慢,而且会生成难以维护和升级的复杂代码。
面向服务架构
为了解决单体架构问题,必须打破代码耦合,拆分单体架构。把软件拆分成一个个独立的功能单元,功能单元通过远程”服务“的形式提供,这就是面向服务架构(service-oriented-architecture,简称SOA。
服务就是一个在后台不间断运行,提供某种功能的一个程序。”面向服务架构“就是把一个大型的单体架构拆分成多个独立服务,每个独立服务都是一个独立的功能单元,承担不同的功能,服务之间通过通信协议连在一起。
这个架构有很多优点:
- 每个服务功能单一,方便开发和测试
- 各服务运行相互独立,简化架构,提高可靠性
- 鼓励和支持代码复用,同一个服务可以用于多种目的
- 不同服务间可以单独开发部署,便于升级
- 扩展性好,可以容易的加机器、加功能,承受高负载
- 不容易出现单点故障,一个服务发生故障不影响其他服务
面向服务架构对语言不敏感,不同服务可使用不同语言和工具开发,可能需要部署在不同的系统和环境上,所以面向服务架构默认运行在不同服务器上。
微服务
docker使程序运行在容器中,每个容器分别设定运行环境且占用较少的系统资源。这让多个不同服务运行在同一台服务器上变得简单且方便,这种实现方式叫做微服务架构。
简单说微服务就是采用容器技术的面向服务架构。它依然使用服务作为功能单元,但变成了轻量级实现,不需要新增服务器,只需要新建容器(一个进程),所以才叫微服务。
一个微服务就是一个独立的进程,它可以运行在本地,也可以运行在启发服务器或云端。它的特点与面向服务架构是一样的,但因为更轻量级所以功能的解耦和服务化可以做的更彻底。而且它可以标准化,同样的容器不管在哪里运行,运行结果都是一样的。