微服务基础知识
本文系统的总结了架构的演变过程,并对微服务架构进行了整体说明,使各位读者对于微服务架构能有一个系统性的了解,并着重介绍了Spring Cloud的整体结构,在之后的几篇文章中,笔者将对Spring Cloud的各个组件进行详细的讲解说明:注册中心组件Eureka、Consul;服务调用组件Ribbon、Feign;服务熔断组件Hystrix。
文章目录
- 微服务基础知识
- 1. 系统架构的演变
- 2. 核心概念
- 3. 常见的微服务框架
- 4. 服务调用
1. 系统架构的演变
- 单体应用架构
所有的前端和后台模块代码都继承在同一个系统中,部署时只部署这一个包即可。要增加并发量只能通过增加集群节点的方式。
- 优点:开发简单,适用于小型应用
- 缺点:不易扩展、维护,代码耦合度高
- 垂直应用架构
按照各个业务模块,分为不同的系统,各个系统分开部署,可以针对某一并发量需求高的系统单独增加集群节点
- 优点:能够解决高并发问题;针对不同的模块进行优化;方便水平扩展,提高容错
- 缺点:系统之间相互独立;重复开发工作
- 分布式架构
将垂直应用架构中的各个系统,又划分为功能层(展示层)
和服务层
两个系统。展示层需要哪些功能,就去调用对应的服务层获取;而服务层只需要准备数据,提供专一的服务即可
- 优点:解决了垂直应用结构的缺点
- 缺点:服务的评估、治理、调度等管理工作不足
- 分布式SOA架构
在分布式架构的功能层和服务层中间,加了一个SOA调度层,实现服务的评估
、治理
、调度
等管理工作
- SOA:Service-Orientd Architecture 面向服务的架构
特点:分布式、可重用、扩展灵活、松耦合 - 常用SOA:ESB总线技术、DUBBO框架
- 优点:抽取公共的功能为服务,提高开发效率;对不同的服务进行集群化部署解决系统压力;基于ESB/DUBBO减少系统耦合
- 缺点:抽取服务的粒度较大;服务提供方与调用方接口耦合度高
- 微服务架构
将服务层的服务拆分到原子化
,服务层与展示层之间通过http等轻量协议传输
,实现服务提供方与调用方接口的解耦
- 优点:通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降;微服务遵循单一原则,微服务之间采用Restful等轻量协议传输
- 缺点:微服务过多,服务治理成本高,不利于系统维护;分布式系统开发的技术成本高(容错、分布式事务等)
2. 核心概念
- 远程调用技术
服务消费者远程调用服务提供者提供的服务
流行的调用技术:
- RPC
- RPC:Remote Procedure Call 进程间的通信方式。允许像调用本地服务一样调用远程服务
- 负责屏蔽底层的传输方式(TCP/UDP)、序列化方式(XML/JSON/二进制)、通信细节
- Http
- 使用Restful(Repreentational State Transfer)
- 相对更规范、更标准、更通用,无论哪种语言都支持Http协议
两种调用技术的比较:
比较项 | Restful | RPC |
通信协议 | Http | 一般使用TCP |
性能 | 略低 | 较高 |
灵活度 | 高 | 低 |
应用 | 微服务架构 | SOA架构 |
- CAP原理
A:可用行(保证整个系统始终是可用的)——多节点
C:一致性(保证系统中的各个节点上的数据始终是一致的)
P:分区容忍行(是否容忍把数据放到不同的数据节点上)
- 一个系统不可能同时满足以上三个要求,所以只需要满足其中两项即可:
- AC:使用传统数据库的方式
- AP:使用非关系型数据库的方式
- CP:例如zookeeper,在一个节点中存储数据的同时,向其他的节点备份数据,而在备份的过程中,整个服务是不可用的
3. 常见的微服务框架
- Spring Cloud
是一系列框架的有序集合
。利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务注册发现
、消息总线
、配置中心
、负载均衡
、断路器
、数据监控
等,都可以利用SpringBoot的开发风格做到一键启动和部署。集合了目前各家公司开发的比较成熟的服务框架并加以改造,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署、易维护的分布式系统开发工具包。
- 核心组件
Spring Cloud Netflix组件
组件名称 | 作用 |
Eureka | 服务注册中心 |
Ribbon | 客户端负载均衡 |
Feign | 声明式服务调用 |
Hystrix | 客户端容错保护 |
Zuul | API服务网关 |
Spring Cloud Alibaba组件
组件名称 | 作用 |
Nacos | 服务注册中心 |
Sentinel | 客户端容错保护 |
Spring Cloud 原生及其他组件
组件名称 | 作用 |
Consul | 服务注册中心 |
Config | 分布式配置中心 |
GateWay | API服务网关 |
Sleuth/Zipkin | 分布式链路追踪 |
- ServiceComb
Apache的微服务顶级项目 - ZeroC ICE
4. 服务调用
- 传统方式
使用Java
中的urlconnection
、httpclient
、okhttp
等 - RestTemplate
Spring框架提供RestTemplate
类可用于在应用中调用rest
服务,只需要传入url
及返回值类型即可
- 常用方法
Http Method | RestTemplate Method |
GET |
|
POST |
|
PUT |
|
DELETE |
|
HEAD |
|
OPTIONS |
|
ANY |
|
- 使用方式
- 创建RestTemplate对象
Bean
交给Spring容器
管理
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
- 使用的时候,直接调用RestTemplate的方法即可
@Autowired
private RestTemplate restTemplate;
T t = restTemplate.getForObject("http://ip:post/请求路径", T.class);