微服务技术简介
- 服务架构的演变
- 微服务架构的常见概念
- 微服务常见的解决方案
- Spring Cloud
- Spring Cloud Alibaba
- 微服务技术对比
- 常用的微服务组件
- 微服务架构图
服务架构的演变
单体架构:当一个系统业务量很小的时候,将业务的所有功能集中在一个项目中开发,将这个项目打成一个包部署在一台服务器上。整个项目所有的服务都由这台服务器提供。这就是单体架构。
优点: 架构简单。前期开发成本低、开发周期短,适合小型项目。部署成本低。
缺点: 全部功能集成在一个工程中,对于大型项目不易开发、扩展和维护。开发效率低,代码维护困难。
技术栈受限,只能使用一种语言开发。如果想整体应用采用新的技术,新的框架或者语言,那是不可能的。
任意模块的漏洞或者错误都会影响这个应用,降低系统的可靠性。
垂直应用架构:按照业务进行切割,形成小的单体项目。将原来的一个应用拆成互不相干的几个应用,以提升效率。
优点:系统拆分实现了流量分担,解决了并发问题,而且可以针对不同模块进行优化和水平扩展。一个系统的问题不会影响到其他系统,提高容错率。不同的系统可以用不同的编程语言编写。
缺点:系统之间相互独立, 无法进行相互调用。系统之间相互独立, 会有重复的开发任务,功能冗余、数据冗余。
分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点:抽取公共的功能为一个独立服务,提高代码复用性。 可重用性高。 可维护性高。
缺点:系统间耦合度变高,调用关系错综复杂,难以维护。
微服务架构:微服务是一种经过良好架构设计的分布式架构方案。更加强调服务的"彻底拆分"。将每一个服务单独开发,每一个服务都可以看作一个独立的项目。
微服务架构的特征:
- 单一职责,微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发。
- 面向服务,微服务对外暴露业务接口。
- 自治,每一个微服务都看作一个独立的项目,可以做到团队独立,技术独立,数据独立,部署独立。
- 隔离性强:服务调用做好隔离,容错,降级,避免出现级联问题。
优点: 服务拆分粒度更细,有利于提高开发效率。服务独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展。微服务之间采用RESTful等轻量级Http协议相互调用。服务各自有自己单独的职责,服务之间松耦合。服务之间隔离性强。
缺点:分布式系统开发的技术成本高(容错、分布式事务等)。 粒度太细导致服务太多,维护成本高。架构非常复杂,运维,监控,部署难度提高。
微服务架构的常见概念
服务治理:
服务治理就是进行服务的自动化管理,其核心是服务的注册与发现。
服务注册:服务实例将自身服务信息注册到注册中心。
服务发现:服务通过注册中心,获取到已经注册到注册中心的服务实例的信息,去请求他们提供服务。
服务剔除:服务注册中心将出问题的服务自动剔除到可用列表之外,使其不会被调用到。
服务调用:多个服务之间的远程调用。主流的远程调用的技术有基于HTTP请求的RESTFul接口及基于TCP的RPC协议。
服务网关:不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求。网关是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个网关的基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。
服务容错:在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。
服务容错的三个核心思想是:
- 不被外界环境影响。
- 不被上游请求压垮。
- 不被下游响应拖垮。
链路追踪:一次请求往往需要涉及到多个服务。这些服务,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要对一次请求涉及的多个服务链路进行日志记录,性能监控即链路追踪。
微服务常见的解决方案
Spring Cloud
官网地址: https://www.springcloud.cc/ (中文)
官网地址: https://spring.io/projects/spring-cloud (英文)
Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud组件介绍
Eureka:一个基于 Rest 服务的服务治理组件,包括服务注册中心、服务注册与服务发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移。
Hystrix:容错管理工具,实现断路器模式,通过控制服务的节点,从而对延迟和故障提供更强大的容错能力。
Ribbon:客户端负载均衡的服务调用组件。
Feign:基于 Ribbon 和 Hystrix 的声明式服务调用组件。
Zuul:微服务网关,提供动态路由,访问过滤等服务。
Spring Cloud Alibaba
致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
Spring Cloud Alibaba 组件介绍
Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。