目录
一、微服务
1、概念
简单地说, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于 HTTP 的 RESTful API 进行通信协作;
被拆分后的每一个小型服务都专注于完成系统中的某一项业务功能,职责单一, 并且每个服务都是一个独立的项目,可以进行独立的测试、开发和部署等;
由于各个独立的服务之间使用的是基于 HTTP 的 JSON 作为数据通信协作的基础,所以这些微服务也可以使用不同的语言来开发;
重点梳理
微服务是一种架构风格
一个应用拆分为一组小型服务
每个服务运行在自己的进程内,也就是可独立部署和升级
服务之间使用轻量级HTTP交互
服务围绕业务功能拆分
可以由全自动部署机制独立部署
去中心化,服务自治。每个服务可以使用不同的开发语言、不同的存储技术2、微服务架构
二、SpringCloud
Spring官网:https://spring.io/
1、SpringCloud概念
基于SpringBoot的一套实现微服务的框架,提供了微服务所需的配置管理,基于Http协议的restful风格(返回异步数据),SpringCloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。
SpringCloud框架的核心其实就是基于Http协议,这也是它与Dubbo最本质的区别。
Dubbo:基于RPC
SpringCloud:基于HttpSpring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry. --官网
Spring Cloud为开发人员提供了在分布式系统中快速构建一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调产生了一些样板性质的模式,使用Spring Cloud开发人员可以快速地建立实现这些模式的服务和应用程序。它们在任何分布式环境下都能很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和云计算等托管平台。--翻译
2、SpringCloud Alibaba微服务
Spring Cloud Alibaba 是Spring Cloud的一个子项目,致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
核心组件
服务限流降级:
默认支持WebServlet、OpenFeign、RestTemplate、Spring Cloud GateWay、RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控
服务注册与发现:
基于Spring Cloud服务注册与发现标准,借助Nacos进行实现,默认还继集成了Ribbon支持
分布式配置管理:
基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新
消息驱动能力:
基于spring Cloud Stream为微服务应用构建消息驱动能力
分布式事务:
使用@GlobalTransactional注解,高效并且对业务零侵入地解决分布式事务问题
分布式任务调度:
提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker上执行。3、SpringCloud版本
版本说明
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
由于 Spring Boot 2.4+ 和以下版本之间变化较大,目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下,为了同时满足存量用户和新用户不同需求,社区以 Spring Boot 2.4 为分界线,同时维护 2.2.x 和 2021.x 两个分支迭代。
2021.x 分支
适配 Spring Boot 2.4, Spring Cloud 2021.x 版本及以上的 Spring Cloud Alibaba 版本如下表(最新版本用*标记): (注意,该分支 Spring Cloud Alibaba 版本命名方式进行了调整, 未来将对应 Spring Cloud 版本, 前三位为 Spring Cloud 版本,最后一位为扩展版本,比如适配 Spring Cloud 2021.0.1 版本对应的 Spring Cloud Alibaba 第一个版本为:2021.0.1.0,第个二版本为:2021.0.1.1,依此类推)
Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version 2021.0.1.0*
Spring Cloud 2021.0.1
2.6.3
2021.1
Spring Cloud 2020.0.1
2.4.2
2.2.x 分支
适配 Spring Boot 为 2.4, Spring Cloud Hoxton 版本及以下的 Spring Cloud Alibaba 版本如下表(最新版本用*标记):
Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version 2.2.8.RELEASE*
Spring Cloud Hoxton.SR12
2.3.12.RELEASE
2.2.7.RELEASE
Spring Cloud Hoxton.SR12
2.3.12.RELEASE
2.2.6.RELEASE
Spring Cloud Hoxton.SR9
2.3.2.RELEASE
2.1.4.RELEASE
Spring Cloud Greenwich.SR6
2.1.13.RELEASE
2.2.1.RELEASE
Spring Cloud Hoxton.SR3
2.2.5.RELEASE
2.2.0.RELEASE
Spring Cloud Hoxton.RELEASE
2.2.X.RELEASE
2.1.2.RELEASE
Spring Cloud Greenwich
2.1.X.RELEASE
2.0.4.RELEASE(停止维护,建议升级)
Spring Cloud Finchley
2.0.X.RELEASE
1.5.1.RELEASE(停止维护,建议升级)
Spring Cloud Edgware
1.5.X.RELEASE
组件版本关系
每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示:
Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version 2.2.8.RELEASE
1.8.4
2.1.0
4.9.3
~
1.5.1
2021.0.1.0
1.8.3
1.4.2
4.9.2
~
1.4.2
2.2.7.RELEASE
1.8.1
2.0.3
4.6.1
2.7.13
1.3.0
2.2.6.RELEASE
1.8.1
1.4.2
4.4.0
2.7.8
1.3.0
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE
1.8.0
1.4.1
4.4.0
2.7.8
1.3.0
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE
1.8.0
1.3.3
4.4.0
2.7.8
1.3.0
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE
1.7.1
1.2.1
4.4.0
2.7.6
1.2.0
2.2.0.RELEASE
1.7.1
1.1.4
4.4.0
2.7.4.1
1.0.0
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE
1.7.0
1.1.4
4.4.0
2.7.3
0.9.0
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE
1.6.3
1.1.1
4.4.0
2.7.3
0.7.1
4、架构演进
技术是服务于业务需求的,架构的演进是为了满足日益复杂的业务场景需求,互联网架构的演进大致可以分为以下几个阶段。
a、单节点架构
传统架构其实就是SSH或SSM架构,属于单节点结构。
优点:开发简单,运维简单
缺点:复杂性逐渐变高,技术债务越来越高,部署速度逐渐变慢(功能不断扩展,造成系统越来月庞大),阻碍技术创新(所有的功能都在一个系统里面,难以按需选择合适的技术),无法按需伸缩,不适合团队模式协同开发;如果系统中某个模块出现不可用,会导致整个系统无法使用。
应用场景:政府项目、管理系统、crm、oa总结:随着系统的功能日趋完善和复杂,应用之间的交互越来越频繁,我们会将系统的核心业务抽取出来,单独部署,形成服务中心,同时将公共的API抽取出来,提供给外部去调用,实现服务的共享,逐渐形成分布式架构体系。
b、分布式架构模式(以项目进行拆分)
分布式架构根据不同的标准将系统拆分成不同的子模块,各个子模块之间相互独立,子模块之间通过RPC远程调用来实现通信,RPC框架底层封装了传输方式(TCP/UDP)、序列化方式(xml/json)和通讯细节,使用者只需要知道who在where提供what 服务即可。
RPC的优缺点:
服务的url管理越来越复杂(配置、更改、删除);
服务之间的依赖越来越复杂,很难分清哪个服务在哪个服务之前启动。
随之服务的增加,部署机器的容量不够,什么时候增加容量,增加多少等
缺少一个动态发现服务,注册服务的管理中心
服务化之后随之而来的是服务的治理问题,要解决这个问题还要引入服务治理框架。
c、SOA架构模式(面向服务架构)
采用SOAP协议(Http + XML)
Service-Oriented Architecture,面向服务的架构,是一种粗粒度的松耦合的以服务为中心的架构,各组件之间通过定义明确的协议来进行通信。SOA在分布式的基础上引入服务治理中心,相较于传统的架构,具有更好的伸缩性和容错性以及系统的稳定性。目前比较流行的服务治理框架有阿里巴巴开源的Dubbo和非开源的HSF,国外比较流行的SpringCloud。阿里巴巴第一代RPC框架Dubbo是国内第一款成熟的商用级RPC框架,已于2011年正式对外开源,目前已发展成为国内开源价值最高、用户使用规模最大的开源软件之一。2016年度中国开源软件Top10。最新一代RPC框架HSF,全称High Speed Framework,也叫"好舒服","很舒服"框架,是阿里内部对这一款高性能服务框架的昵称,是一款面向企业级互联网架构量身定制的分布式服务框架。HSF以高性能网络通信框架为基础,提供了诸如服务发布与注册,服务调用,服务路由,服务鉴权,服务限流,服务降级和服务调用链路跟踪等一系列久经考验的功能特性。
SOA框架可以抽象成3层:
RPC层:底层通信框架(例如NIO框架的封装),序列化和反序列化框架等;
FilterChain层:服务调用职责链,例如负载均衡,服务调用性能统计,服务调用完成通知,失败重发等等。
Service层:java动态代理,将服务提供者的接口封装成远程服务调用;java反射,服务提供者使用,根据消费者请求消息中的接口名、方法名、参数列表反射调用服务提供者的接口本地实现类。
分布式服务框架的两个核心功能:服务治理和服务注册中心,服务中心中dubbo默认使用的是ZooKeeper,HSF默认使用的为ConfigServer,springCloud支持Eurake、consul、Zookeepr
缺点:
1、采用soap协议实现通讯,xml传输非常重,效率比较低
2、服务和管理设施不够完善
3、不适合前后端分离架构模式
4、依赖与中心服务发现机制d、微服务架构
随着业务的进一步发展,系统流量越来越大,业务复杂度越来越高,需求迭代越来越频繁,技术团队成员也快速发展(50人以上),此时,团队协作、业务响应效率、系统“三高”诉求等问题日益凸显,集群架构的不足之处日渐明显,此时,分布式集群架构的改造工作,也就需要开始提上日程了。
从集群架构演变到分布式集群架构,业务场景复杂度、技术复杂度都变地极高,繁杂的业务/技术需求,要求一个更专业的团队去整体协作支撑。在这一阶段,技术团队的关键问题在于技术选型/团队协作/工具化自动化/业务重构 。
定义:
是以开发一组小型服务的方式来开发一个独立的应用系统,每个微服务都运行在自己独立的进程里,微服务之间通过一些轻量级的通信机制进行通讯。
优点:
易于开发和维护
启动速度比较快
局部修改容易部署
各模块技术栈不受限制
按需伸缩
缺点:
运维要求比较高
分布式的复杂性
接口调整的成本高
重复劳动
微服务架构与SOA架构的不同:
1.微服务架构基于 SOA架构 演变过来,继承 SOA架构的优点,在微服务架构中去除 SOA 架构中的 ESB 企业服务总线,采用 http+json(restful)进行传输。
2. 微服务架构比 SOA架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,微服务架构更加轻巧,轻量级。
3.SOA 架构中可能数据库存储会发生共享,微服务强调独每个服务都是单独数据库,保证每个服务于服务之间互不影响。
4.项目体现特征微服务架构比 SOA 架构更加适合与互联网公司敏捷开发、快速迭代版本,因为粒度非常精细。5、核心组件与功能
SpringCloud的Hoxton版本,和之前的版本相比,用新的组件替换掉了原来大部分的组件,老的组件现在处于 停更不停用 的状况。
服务注册中心
Eureka:官方停止更新,并且已经有更好的替代产品了,可以使用,但是官方已经不建议使用了。
Zookeeper:某些老系统,以前是用的Zookeeper + Dubbo,后来做技术升级,结果发现SpringCloud的Eureka停更了,然后就用了最少的技术切换,那么就用了Zookeeper做注册中心。
Consul:go语言开发的,也是一个优秀的服务注册框架,但是使用量较少,风头都被Nacos抢了。
Nacos:来自于SpringCloudAlibaba,在企业中经过了百万级注册考验的,不但可以完美替换Eureka,还能做其他组件的替换,所以强烈建议使用,是学习的重点。
服务调用
Ribbon:也进入了维护状态,停止更新了,但是Spring官方还在使用。
LoadBalancer:Spring官方推出的一个新的组件,打算逐渐取代掉Ribbon,但是现在还处于萌芽状态。
服务调用2
Feign:Netflix 公司产品,也停止更新了。
OpenFeign:Spring社区等不了Netflix更新了,然后就自己做了一个组件,不用Feign了。
服务降级
Hystrix:官网不推荐使用,但是中国企业中还在大规模使用。
Resilience4J:官网推荐使用,但是国内很少用这个。
Sentienl:来自于SpringCloudAlibaba,在中国企业替换Hystrix的组件,国内强烈建议使用。
服务网关
Zuul:Netflix 公司产品,公司内部产生分歧,有的人想自己出一个Zuul2。
Zuul2:也是Netflix 公司准备出的产品,但是由于内部分歧,所以Zuul2已经胎死腹中了。
gateway:Spring社区自己出的网关组件,官方隆重介绍和极度推荐的网关服务组件。
服务配置
Config:目前也在使用,风头被Nacos抢了。
Nacos:来自于SpringCloudAlibaba,后来居上,把Config给替换了。
服务总线
Bus:SpringCloud原生的服务总线组件,现在风头也被Nacos抢了。
Nacos:来自于SpringCloudAlibaba,后来居上,把Bus给替换了。
综上可以看出,Nacos 是重中之重,一个组件就替换掉了原来的几个组件。
目前的热门组合:Nacos+Ribbon+OpenFeign+Sentienl+gateway6、Spring Cloud集成相关优质项目推荐
三、分布式工程各个组件集成
四、参考博客及资料
SpringCloud入门及创建分布式项目_秃头哥编程的技术博客_51CTO博客
SpringCloud微服务架构_Mr_Jin.的博客-CSDN博客_springcloud微服务架构
SpringClound系列之架构演变_zhuimengzhe5的博客-CSDN博客
微服务架构Springcloud详解-初识springcloud - 哔哩哔哩
微服务架构图_微服务架构图_weixin_39754603的博客-CSDN博客
架构杂谈——也谈互联网系统架构演进_老农小江的博客-CSDN博客_互联网系统框架
微服务架构Springcloud详解-初识springcloud - 哔哩哔哩
SpringCloud:一文搞懂分布式微服务架构(VIP典藏版)
于 2019-08-26 11:20:59 首次发布