微服务架构遇到的问题
- 客户端如何访问这么多服务
API 网关 - 服务与服务直接如何通信
- 同步通信
HTTP:Apache Http Client
RPC:Dubbo,Apache Thrift - 异步通信
消息队列:kafka,RabbitMQ,RocketMQ
- 同步通信
- 这么多服务如何管理
- 服务治理
- 服务注册与发现
- 基于客户端的服务注册与发现:Apache Zookeeper
- 基于服务端的服务注册与发现:Netflix Eureka
- 服务注册与发现
- 服务治理
- 服务挂了怎么办
- 重试机制
- 服务熔断
- 服务降级
- 服务限流
一、三层架构 + MVC
使用架构是为了解耦
二、开发框架
Spring
- Ioc AOP
- 是一个轻量级的 JavaEE 开源框架,主要是为了解决企业级开发的复杂度(耦合度)问题
- 使用 Spring 容器来统一管理
- 但使用 Java 开发仍然笨重
Spring Boot
新一代 JavaEE 开发标准,开箱即用
三、微服务架构
更好的进行分布式系统开发,拆分单体应用,将一个应用拆分成多个服务,每一个服务都是可以独立运行的项目
分布式开发遇到的问题
- 客户端如何访问这么多服务
- 这么多服务如何治理
- 服务与服务直接如何通信
- 服务挂了怎么办
四、解决方案
Spring Cloud,是一套生态,是为了解决微服务架构遇到的问题,使用 Spring Cloud,必须基于 Spring Boot
1. Spring Cloud Netflix
- 客户端如何访问这么多服务
- API 网关:Zuul 组件
- 这么多服务如何治理
- 服务注册与发现:Eureka
- 服务与服务直接如何通信
- Feign,是基于 Http Client的,所以是基于 Http 的通信方式:同步并阻塞
- 服务挂了怎么办
- 熔断机制:Hystrix
2. Apache Dubbo Zookeeper
- 客户端如何访问这么多服务
- API 网关:没有,找第三方
- 这么多服务如何治理
- 服务注册与发现:Zookeeper
- 服务与服务直接如何通信
- Dubbo 是一个高性能的 Java RPC 通信框架
- 服务挂了怎么办
- 熔断机制:没有,借用 Hystrix