要想学习微服务,首先须要知道什么是微服务?为何会有微服务?相信看完架构的发展史读者就会明白html
如图所示:将全部的模块,全部内容(页面、Dao、Service、Controller)所有写入一个项目中,放在一个Tomcat容器中启动适用于小型项目ios
优势:开发速度快,能够利用代码生成工具快速的开发一个项目web
缺点:不易扩展,代码耦合度高,且不容错(当某部分出错后整个服务就会中止运行)spring
既然原来单体架构中代码耦合度高,不利于维护和运行,人们天然就想到将不一样的内容分开。最简单合理的方式就是将系统按照功能划分红不一样的模块,而后将各模块独立放入不一样的Web容器中,这就造成了垂直架构数据库
优势:代码耦合度下降,且不一样模块之间能够独立运行。一旦某个模块压力过大,能够针对性的搭集群服务器
缺点:模块之间有可能不是那么彻底独立,致使实体类或者其余层代码不能复用,须要多出粘贴,不方便往后维护。若是直接经过HTTP调用又不是很合理。架构
分布式架构顾名思义就是分散部署在不一样的机器上的服务,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是经过rpc来交互或者是webservice来交互的架构。从开发的角度看就是Controller层(服务消费者)和Service层(服务提供者)分红不一样的项目,部署在不一样的服务器上,经过RPC(远程方法调用)来实现交互。阿里巴巴著名的Dubbo框架就是做为分布式架构的框架。通常推荐使用Zookeeper做为服务的注册中心,负责注册和发现服务的提供者,并供服务的消费者消费app
单体架构和微服务的比较图示:框架
微服务的核心就是将传统的一站式应用,根据业务拆分红一个个原子应用。完全地去耦合,一个服务只作一件事情,从技术角度讲就是一个服务就是一个进程,能够单独启动或销毁,拥有独立的数据库。而且经过配置中心能够方便的切换数据库等。
优势:
缺点:
微服务条目 | 落地技术 | 备注 |
---|---|---|
服务开发 | Springboot、Spring、SpringMVC | |
服务配置与管理 | Netflix公司的Archaius、阿里的Diamond等 | |
服务注册与发现 | Eureka、Consul、Zookeeper等 | |
服务调用 | Rest、RPC、gRPC | |
服务熔断器 | Hystrix、Envoy等 | |
负载均衡 | Ribbon、Nginx等 | |
服务接口调用(客户端调用服务的简化工具) | Feign等 | |
消息队列 | Kafka、RabbitMQ、ActiveMQ等 | |
服务配置中心管理 | SpringCloudConfig、Chef等 | |
服务路由(API网关) | Zuul等 | |
服务监控 | Zabbix、Nagios、Metrics、Spectator等 | |
全链路追踪 | Zipkin,Brave、Dapper等 | |
服务部署 | Docker、OpenStack、Kubernetes等 | |
数据流操做开发包 | SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息) | |
事件消息总线 | Spring Cloud Bus |
Spring Cloud 是实现微服务思想落地开发的一整套技术的集合
Spring Cloud开发者文档中文版:
https://springcloud.cc/spring-cloud-dalston.html
Spring Cloud中国社区
Spring Cloud中文网