一、概述
集群(Cluster):同一种软件服务的多个服务节点共同为系统提供服务过程,称之为该软件服务集群。
分布式(Distribute):分布式是一种系统架构,是将系统中的不同组件分布在不同的计算机上执行,分布式系统是由多个独立计算机节点组成的系统,分布式系统的设计需要考虑许多重要的因素,例如通信方式、数据的一致性。因此分布式系统的设计和实现需要使用适当的技术和工具,例如分布式算法、消息队列、负载均衡等等。不同的软件集群共同为一个系统提供服务,这个系统则称之为分布式系统。
微服务(Micro Service):微服务是一种架构,这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器(有点像将应用程序强遵循单一职责原则的感觉)。各个微服务之间的关联通过暴露 api 来实现。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中。
为什么微服务?
单体应用
# 1. 优点
- 单体架构模式在项目初期很小的时候开发方便,测试方便,部署方便,运行良好
# 2. 缺点
- 应用随着时间的推进,加入的功能越来越多,最终会变得巨大,一个项目中很有可能数百万行的代码,互相之间繁琐的jar包。
- 久而久之,开发效率低,代码维护困难。
- 还有一个如果想整体应用采用新的技术,新的框架或者语言,那是不可能的。
- 任何模块的漏洞或者错误都会应用这个应用,降低系统的可靠性。
微服务架构应用
# 1. 优点
- 将服务拆分成多个单一职责的小的服务,进行单独部署,服务之间通过网络进行通信。
- 每个服务应该有自己单独的管理团队,高度自治
- 服务各自有自己的单独的职责,服务之间松耦合,避免因一个模块的问题导致服务崩溃
# 2. 缺点
- 开发人员要处理分布式系统的复杂性
- 多服务运维难度,随着服务的增加,运维的压力也在增大
- 服务治理 和 服务监控 关键
Spring Cloud 就是用来处理微服务架构中可能会出现的问题的,它内部有各种各样的组件,各个组件就是用来处理这些问题的。所以可以说Spring Cloud是一种处理微服务架构应用的工具(框架)。
架构的演变过程
- 单一架构(All In One)
起初当网站流量很小时,将所有功能都写在一个应用里面,对整个应用进行部署,以减少部署节点和成本。对于这个架构简化增删改查的工作量的数据访问框架(ORM)是关键。
- 垂直架构
当访问量逐渐增大,单一应用增加器带来的加速度越来越小,提升效率的方法之一是将应用拆分成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
- 分布式服务架构(Tomcat集群、MySQL集群、Redis集群)
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务架构(RPC)是关键。
RPC:远程过程调用 作用:服务间通信一种手段
OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
- SOA 面向服务体系架构 微服务(Micro Service)
当服务越来越多,容量的评估,小服务的资源的浪费等问题逐渐出现,此时需要增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高及其利用率的资源调度和治理中心(SOA)是关键。
微服务的解决方案
a. 国内的阿里系
SpringBoot + Dubbo + Zookeeper 最早期
b. Spring Cloud 技术栈
Spring Cloud netflix
最早期(基于Netflix公司开源的组件进行封装,提供了微服务一栈式解决方案)
Spring Cloud Spring
自己封装的服务解决方案(在Spring Cloud Netflix基础上封装了阿里巴巴的微服务的解决方案)
Spring Cloud alibaba
阿里巴巴解决方案(目前Spring官方趋势整在逐渐吸收Netflix组件的精华,并在此基础进行二次封装优化,打造Spring专有的解决方案)
二、SpringCloud简介
Spring Cloud 是 Java 语言的微服务框架(微服务是一种思想,是一种架构,而Spring Cloud是对它的实现,它可以用来管理微服务的方方面面),它依赖于 Spring Boot,有快速开发、持续交付和容易部署等特点。Spring Cloud组件很多,涉及微服务的方方面面,方便我们去管理。
Spring Cloud 在开发部署上继承了 Spring Boot 的一些优点,提高其在开发和部署上的效率。**Spring Cloud 的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。**Spring Cloud 是通过包装其他技术框架来实现的,例如包装开源的 Netflix OSS 组件,实现了一套通过基于注解、Java 配置和基于模版开发的微服务框架。Spring Cloud 提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、远程调用、智能路由、微代理、控制总线、全局锁、分布式会话等等。
学习网址:
Spring Cloud官方文档地址
Spring Cloud Alibaba 的文档
版本对应关系可以在对应文档查看。
三、SpringCloud常用组件表
服务的注册和发现。(eureka、nacos、consul)
服务的负载均衡。(ribbon、dubbo)
服务的相互调用。(openFeign、dubbo)
服务的容错。(hystrix、sentinel)
服务网关。(gateway、zuul)
服务配置的统一管理。(config-server、nacos、apollo)
服务的消息总线。(bus)
服务安全组件。(Security,Oauth2.0)
服务监控。(admin)(jvm)
链路追踪。(sleuth+zipkin)
微服务架构风格图(来自动力节点)