SpringCloud
1.内容:springCloud+springCloud alibaba
2.技术要求:java8 + maven + git、github +nginx + rabbitMQ+springBoot2.0
技术架构演变
单体应用
Model1模式:jsp+java
Model2模式(MVC模式):Model View Controller (web service dao)
垂直应用
RPC分布式应用
资源调度问题
SOA流动计算架构(面向服务架构)
资源调度 负载均衡 动态服务创建 。。。。。。服务治理
微服务
微,单一职业。
将单体应用通过功能划分为一个个独立运行的程序,通过http协议(或消息队列)进行通信,可以采用不同的编程语言,不同的存储技术,自动化部署减少人为控制,降低出错概率。服务数量越多,管理越复杂,需要采用集中化管理。
(常见的集中管理:Eureka等)
是一种架构风格,将大型的复杂软件应用,改成一个或多个微服务。各个服务独立部署,服务间松耦合。每个服务只需专注于自己的功能。
优点:
1. 简单、灵活独立部署。
2. 专注、专业、高效可靠。
3. 松耦合、高内聚、易扩展。
4. 测试容易,跨语言。协同开发,方便系统迭代。
缺点:
运维成本高,部署项目多。
接口兼容版本问题。
分布式系统复杂性
分布式事务
SOA与MicroServices的区别
SOA面向服务架构是用于设计软件的原则。在SOA中,所有组件是独立自主的,并能为其他组件提供服务。
大体上,SOA与微服务架构是非常相像的。区别是微服务是细粒度的SOA组件。
单个SOA可以被拆分成多个微服务。微服务间分工协作,提供与原SOA组件的功能。
Dubbo和SpringCloud的区别
Spring全家桶:整合了市面上大部分应用,用起来很舒服,只有你想不到,没有它做不到。
Dubbo:支持RESTful风格的API,调用远程API像调用本地API一样,同时基于接口的方式增加了服务间的耦合。
对比 | Spring Cloud | Dubbo |
---|---|---|
服务注册中心 | Spring cloud Netflix Eureka | Zookeeper,Nacos |
服务调用方式 | REST API | RPC |
服务网关 | Spring Cloud Netflix Zuul | Dubbo Proxy |
断路由 | Spring Cloud Netflix Hystrlx | Sentinel |
分布式配置 | Spring Cloud Config | Nacos |
服务跟踪 | Spring Cloud Sleuth | 无 |
消息总线 | Spring Cloud Bus | 无 |
数据流 | Spring Cloud Stream | 无 |
批量任务 | Spring Cloud Task | 无 |
总结:
Dubbo是二进制传输,占用带宽更少。
SpringCloud是http协议传输,占用带宽更多,同时使用http协议一般会使用JSON报文,消耗会更大。
Dubbo的jar包依赖问题很多大型工程无法解决,开发难度更大。
SpringCloud是接口协议比较自由且松散,需要强有力的行政措施来限制接口无序升级。
Dubbo的注册中心可以选择ZooKeeper Redis等多种,SpringCloud的注册中心只能用eureka或者自研。(过时了)
从系统结构简易程序:SpringCloud的系统结构更简单、”注册+SpringMvc=SpringCloud”,而Dubbo各种复杂的url,
protocol,register,invocation,dubbofilter,dubboSPI,dubbo序列化等,炫技成分更多一些。
从性能:Dubbo的网络消耗小于SpingCloud,但在国内95%的公司内,网络消耗不是什么太大问题,可以通过压缩,二进制、高速缓存、分段降级等方法解决。
微服务设计原则
AKF拆分原则
拆分要点:
低耦合,高内聚:一个服务完成一个独立的功能。
按团队结构,小规模团队维护,快速迭代。
抽象总结应用扩展的三个维度,按照这三个扩展模式,可以将一个单体系统,进行无线扩展。
x轴:水平复杂-单体系统多运行几个实例,成为集群加负载均衡的模式。
z轴:基于类似的数据分区-比如一个系统用户激增,集群模式支撑不住,按照用户请求地区进行数据分区,多建几个集群。
y轴:拆分模式-基于不同的业务拆分。
前后端分离原则
技术分离,各自的技术人员对各自的领域进行优化,前端的用户体验优化效果更好。
分离模式下,前后端交互界面更清晰,只剩下了接口模型,后端接口简介明了,更容易维护。
前端多渠道集成场景更容易实现,后端服务无需变更,采用统一的数据的模型,可支持多个前端。如:微信小程序、PC前端、安卓前端、ios前端。
无状态服务
无状态:同一个url请求没有上下文关系。
Restful通信风格
无状态协议http,扩展能力很强,如需要安全加密时,可以用现成的Https。
json报文序列化,轻量简单,人与机器均可读,学习成本低,搜索引擎友好。
热门语言都提供了成熟的Restful API框架,比RPC框架生态完事。
Spring Cloud是什么?
是一个服务治理平台,也是一个微服务框架,提供了一些服务框架:服务注册与发现、配置中心、消息中心、负载均衡、数据监控等。相比Dubbo等RPC框架,提供了全套的分布式系统解决方案。
对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了云端平台和Springboot框架的集成。是一个基于Springboot实现的云应用开发工具,为开发中的配置管理、服务发现、断路由、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服务和构建应用、同时能够快速和云平台资源进行对接。微服务可以独立部署,水平扩展、独立访问(或者有独立的数据库)的服务单元。
spring cloud 第一代netflix
Eureka:一个基于Rest服务的服务治理组件,包括服务注册中心、服务注册和服务发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移。
Hystrix:容错管理工具,实现断路由模式,提高控制服务的节点,从而对延迟和故障提供更强大的容错能力。
(断路由:当某个服务单元故障时,通过断路由的故障监控,向调用方返回一个符合预期的、可处理的备选响应,而不是长时间的等待或者抛出调用方无法处理的异常,保证服务调用方的线程不会被长时间、不必要的占用,避免故障在分布式系统中蔓延,乃至雪崩)
Ribbon:客户端负载均衡的服务调用组件。
Feign:基于Ribbon和Hystrix的声明式服务调用组件。
Zuul:微服务网关,提供动态路由,访问过滤等服务。
Archaius:配置管理Api,包含一系列配置管理Api,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
spring cloud 第二代Alibaba
Nacos:阿里开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Sentinel:面向分布式服务架构的轻量级流量控制产品,从流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术、提供低延时的、高可靠的消息分布与订阅服务。
Dubbo:Apache Dubbo 一款高性能Java RPC框架。
Seate:阿里开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
Alibaba Cloud Oss:阿里云对象存储服务,是阿里云提供的海量、安全、低成本、高可靠的云存储服务。
Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精确、高可靠、高可用的定时任务调度服务。
Alibaba Clouds SMS:覆盖全球的短信服务,友好,高效,智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
版本说明
根据地铁站名称作为版本号的命名,根据首字母排序,字母顺序靠后,版本越大。不用数组用英文命名,是为了避免总版本号和子版本号混淆。
版本号
版本号 | 版本 | 说明 |
---|---|---|
BUILD-XXX | 开发版 | 开发团队内部使用 |
M | 里程碑版 | MileStone,M1表示第一个里程碑版本,一般同时标注PRE, 表示预览版 |
RC | 候选发布版 | Release Candidate,正式发布版的前一个观察期,不添加新功能,主要着重于除错 |
SR | 正式发布版 | Service Release,SR1表示第一个正式版本。一般同时标准GA,表示稳定版本 |
GA | 稳定版 | 经过全面测试并可对外发行称为GA |
子项目版本号
eg:Spring Cloud Alibaba 2.1.0.RELEASE
2:主版本号(整体架构改动,较大更新)
1:次版本号(局部改动)
0:修改版本号(bug修复或小的改动)
RELEASE:希腊字符版本号(标注当前版本处于哪个开发阶段)
- Base:设计阶段。只有设计没有具体的功能实现。
- Alpha:初级版本,存在较多bug。
- Bate:消除了严重bug,还有潜在bug。
- Gamma:正式版本的候选版本。
- Release:最终版。
注册中心
注册中心:微服务架构中的”通讯录“,记录了服务和服务地址的隐射关系。在分布式架构中,服务注册到注册中心,当服务需要调用其他服务时,注册中心找到其他服务的地址,进行调用。
作用:服务的注册和服务的发现。
常见注册中心
特性 | Eureka | Nacos | Consu | Zookeeper |
---|---|---|---|---|
CAP | AP | CP+AP | CP | CP |
健康检查 | Client Beat | TCP/HTTP/MYSQL/Client Beat | TCP/HTTP/gRPC/Cmd | Keep Alive |
雪崩保护 | 有 | 有 | 无 | 无 |
自动注销实例 | 支持 | 支持 | 不支持 | 正常 |
访问协议 | HTTP | HTTP/DNS | HTTP/DNS | TCP |
监听支持 | 支持 | 支持 | 支持 | 支持 |
多数据中心 | 支持 | 支持 | 支持 | 不支持 |
跨注册中心同步 | 不支持 | 支持 | 支持 | 不支持 |
SpringCloud集成 | 支持 | 支持 | 支持 | 支持 |
Eureka注册中心
是Netflix开发的服务发现组件,本身是基于REST的服务,SpringCloud将它集成在子项目Spring Cloud Netflix中,实现Spring Cloud的服务注册和发现,同时还提供了负载均衡,故障转移等能力。