传统服务架构

单体架构

也就是一个web提供服务,所有代码逻辑全都在一起,这种紧偶合应用架构会随着业务复杂度提升,整个网站的维护成本变得很高,想改一个功能都会牵一发动全身,随着架构上的演变出来mvc。

mvc架构

前端、后端逻辑、数据访问层会有所分离,前端、后端、DBA每个角色可以关注自己所关注的领域,但这种架构下所有的功能逻辑还是在一起的,业务逻辑变得复杂后,维护成本依然很高,架构的演变又推向了SOA。

SOA面向服务的架构

soa也就是把业务解绑,把一个大的系统分成几个小模块通过api调用来交互(开发中经常接触到的SOAP、REST、RPC就是依据这种架构形成的规范协议),soa演变到后面形成了系统服务总线(ESB)的概念,ESB做为一个统一的API中心在应用的相互调用(数据转换、路由处理、记录服务调用与监控,让不同的服务互联互通),随着业务的发展这个ESB也变得复杂了。架构的再次演变形成了微服务架构

微服务架构

可以理解为去中心化的SOA实现,微服务没有强调说服务与服务之间必须用ESB进行通信,可以在服务中点对点通信,也可以通过ESB进行通信,当一个业务背后的应用服务很多的时候,那么就需要进行很多的服务发布。

微服务应用发布

在传统一台物理机的方式下,一个服务发现就是一个ip+端口,而多个服务应用就是ip+不同的端口,如果服务很大,需要很多的端口,那这样的话,就会把物理机拆成多个虚拟机,一个虚拟机就是一个系统,所有的虚拟机都集成在这个物理机上,由于虚拟机是有独立的网卡也就拥有了不同的ip,也就形成了一个应用一个虚拟机+端口的方式。

虚拟机所带来的是运维成本增高,也就需要更轻量级的技术应用实现虚拟化,docker容器技术

Docker容器化技术

docker是基于linux内核的Cgroup、Namespace、UnionFS等技术,对进程实现封装隔离的操作系统层面的虚拟化技术,而隔离的进程独立于宿主机和其它的隔离进程 ,因此也称为容器。

Docker与虚拟机的区别

对于一个完整的虚拟机来说,需要在系统上面安装一个虚拟机监视器(HyperVisor),然后由hyperVisor里面再构建一个操作系统,安装应用、集成系统驱动等,这就导致应用的处理变得复杂

  • 调试变得复杂(网络无法连接可能在系统本机,也可能是在虚拟机里面);
  • 网络连接也变得臃肿(先在物理机跑一次再转到虚拟机跑一次);
  • 性能的开销也变大了(需要将物理机的内存、硬盘资源分配给虚拟机);

而对于docker来说,是在系统上使用docker引擎(可以简单理解为一个linux进程)实现的物理机与虚拟机的进程隔离,由于docker技术本身并没有吃太多资源,所有的资源都可以交给应用使用,启用docker的时间是非常快的也就是一个linux的进程的时间。比起虚拟机的几分钟来得快很多了。