传统的单体应用,将全部功能的表示层、业务逻辑层,数据访问层,包括静态资源等等所有糅合在一个工程里面,编译,打包,部署在单台服务器上上线,好比打成war包放在Tomcat的webapp目录中部署项目。这样的项目开发部署适合小型项目,系统功能不复杂,访问量不大的状况下有绝对的优点。开发速度快,运维方便。可是当业务愈来愈复杂,功能愈来愈多,参与的开发人员愈来愈多,就暴露出问题了:web
将单体应用作集群部署,添加负载均衡服务器(例如Nginx反向代理转发请求)可稍微缓解以上3,4条缺点,可是仍是不能完美解决问题。spring
微服务架构:就是将原来的单体应用按义务范围来进行划分,划分为多个小model,每一个微服务运行在本身的进程中,不相互影响,经过彻底自动化部署来独立部署。并使用轻量级机制通讯,一般是HTTP RESTUFUL API。可对各个微服务进行集中管理。这些小model可使用不一样的编程语言,以及不一样的存储技术。微服务架构是分布式架构。数据库
微服务架构的优势:
- 按业务划分的微服务单元独立部署,运行在独立的进程中,服务与服务之间没有任何耦合,有很好的扩展性和复用性
- 服务与服务之间一般采用HTTP通讯,这种通讯机制与平台和语言无关(可使用不一样的编程语言和存储方法)。也能够采用轻量级的消息总线来通讯,如RabbitMQ、Kafaka消息队列等等,数据格式通常都采用JSON
- 每一个微服务有本身的数据库,服务之间数据库是独立的
- 微服务通常采用自动化部署工具部署。Docker容器技术是微服务最佳部署的容器。
- 服务集中化管理(服务注册与发现Eureka、Zookeeper、Consul),监控(服务运行情况监控Spring-Boot-Admin-Server)
- 微服务架构是分布式架构编程
微服务架构的缺点:服务器
微服务架构难题及解决办法:
- 服务之间故障传播影响:譬如A服务调用了B服务,可是B服务由于网络或其余缘由迟迟没有响应,容易引发服务的雪崩效应 — >采用“熔断机制”,快速报错
- 分布式事物:事物失败容易致使数据不一致 — >采用“两阶段提交”网络
Spring Cloud是最经常使用的微服务框架,依赖于Spring Boot,有快速开发,持续交付,容易部署等优势。
主要功能组件有:架构