公司新项目又要用java了,我是最熟悉的,就我顶上了。复习的同时也整理下所学,方便他人学习。
Spring 、Spring Boot 和 Spring Cloud 的关系
Spring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题。
Spring Boot 是在强大的 Spring 帝国生态基础上面发展而来,发明 Spring Boot 不是为了取代 Spring ,是为了让人们更容易的使用 Spring 。所以说没有 Spring 强大的功能和生态,就不会有后期的 Spring Boot 火热, Spring Boot 使用约定优于配置的理念,重新重构了 Spring 的使用,让 Spring 后续的发展更有生命力。
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
根据上面的说明我们可以看出来,Spring Cloud 是为了解决微服务架构中服务治理而提供的一系列功能的开发框架,并且 Spring Cloud 是完全基于 Spring Boot 而开发,Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。
综上我们可以这样来理解,正是由于 Spring Ioc 和 Spring Aop 两个强大的功能才有了 Spring ,Spring 生态不断的发展才有了 Spring Boot ,使用 Spring Boot 让 Spring 更易用更有生命力,Spring Cloud 是基于 Spring Boot 开发的一套微服务架构下的服务治理方案。
用一组不太合理的包含关系来表达它们之间的关系。
Spring ioc/aop > Spring > Spring Boot > Spring Cloud
SpringBoot教程
SpringBoot入门及进阶:https://blog.csdn.net/dwhdome/article/details/83418817
组件和配置讲解
SpringBoot入门教程:https://blog.csdn.net/huzecom/article/details/101191705
超详细的Spring Boot入门笔记:https://blog.csdn.net/rickiyeat/article/details/77543445
SpringCloud简介
SpringCloud是一个基于SpringBoot实现的微服务架构开发工具。它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
SpringCloud技术栈
参考英文官网列举的20个主要项目:
微服务开发:快速开发服务。Spring、SpringMVC、SpringBoot
微服务调用协议:REST、RPC(Remote Procedure Call)、RMI(Remote Method Invocation)
微服务注册发现:发现服务,注册服务,集中管理服务。Eureka、Zookeeper、Nacos、consul
微服务配置管理:统一管理一个或多个服务的配置信息, 集中管理。Disconf、SpringCloudConfig、Apollo
服务负载均衡:Ribbon(客户端)、Nginx(服务端)
服务熔断:当请求到达一定阈值时不让请求继续。Hystrix、Sentinel
服务接口调用:多个服务之间的通讯。Feign(HTTP)(HTTP)、Dubbo、Apache HttpClient、Spring RestTemplate
API网关:外部请求通过 API 网关进行拦截处理, 再转发到真正的服务。Spring Cloud GateWay、Zuul
服务链路追踪:明确服务之间的调用关系。Zipkin、Brave
服务监控:以可视化或非可视化的形式展示出各个服务的运行情况 (CPU、内存、访问量等)。Zabbix、Nagios、Metrics
权限认证:根据系统设置的安全规则或者安全策略, 用户可以访问而且只能访问自己被授权的资源。Spring Security、Apache Shiro
批处理:批量处理同类型数据或事物。Spring Batch
定时任务:定时调度任务。Quartz、Elastic-job
消息队列:解耦业务, 异步化处理数据。Kafka、RabbitMQ、RocketMQ、ActiveMQ
日志采集(elk):收集各服务日志提供日志分析、用户画像等。Elasticsearch、Logstash、Kibana
数据存储:存储数据。关系型:MySql、Oracle、MsSQL、PostgreSql;非关系型:Mongodb、Elasticsearch
缓存:存储数据。redis
分库分表:数据库分库分表方案。ShardingSphere、Mycat
服务部署:将项目快速部署、上线、持续集成。Docker、Jenkins、Kubernetes(K8s)、Mesos
Spring Cloud Netflix 和Alibaba
Spring Cloud 本身其实只是一套微服务规范,并不是一个拿来即可用的框架,Spring Cloud Netflix 和Spring Cloud alibaba是为开发者提供了这套规范的实现方式。由于Spring Cloud Netflix 2018年12月12日进入维护模式(Maintenance Mode),所以不太适合长期再使用。故选择Spring Cloud alibaba的技术方案。
Spring Cloud Netflix 和Spring Cloud alibaba服务技术架构比较
Dubbo 和 Spring Cloud
Spring Cloud 完整技术
Dubbo 和 Spring Cloud 对比
可见:Dubbo 专注 RPC 和服务治理,Spring Cloud 则是一个微服务架构生态。
其实相比于 Dubbo,Spring Cloud 可以说是一个更完备的微服务解决方案,它从功能性上是 Dubbo 的一个超集,个人认为从选型上对于一些中小型企业 Spring Cloud 可能是一个更好的选择。
Dubbo 一些问题
Registry 严重依赖第三方组件(zookeeper 或者 redis),当这些组件出现问题时,服务调用很快就会中断。
Dubbo 只支持 RPC 调用。使得服务提供方(抽象接口)与调用方在代码上产生了强依赖,服务提供者需要不断将包含抽象接口的 jar 包打包出来供消费者使用。一旦打包出现问题,就会导致服务调用出错,并且以后发布部署会成很大问题(太强的依赖关系)。
另外,以后要兼容 .NET Core 服务,Dubbo RPC 本身不支持跨语言(可以用跨语言 RPC 框架解决,比如 Thrift、gRPC(重复封装了),或者自己再包一层 REST 服务,提供跨平台的服务调用实现,但相对麻烦很多)
Dubbo 只是实现了服务治理,其他微服务框架并未包含,如果需要使用,需要结合第三方框架实现(比如分布式配置用淘宝的 Diamond、服务跟踪用京东的 Hydra,但使用相对麻烦些),开发成本较高,且风险较大。
社区更新不及时(虽然最近在疯狂更新),但也难免阿里以后又不更新了,就尴尬了。
主要是国内公司使用,但阿里内部使用 HSF,相对于 Spring Cloud,企业应用会差一些。
参考
spring、spring boot、spring cloud的关系:https://www.cnblogs.com/daguozb/p/10063269.html
带你更好的入门 Spring Cloud 常用组件学习:https://juejin.cn/post/ 6857291841767735310
Spring Cloud 微服务架构学习笔记与示例:https://www.cnblogs.com/edisonchou/p/java_spring_cloud_foundation_sample_list.html
微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比:https://blog.csdn.net/fly910905/article/details/100023415
SpringCloud版本Hoxton SR5 — 第二讲:eureka 、eureka与zookeeper的区别与使用场景。:https://blog.csdn.net/chuxin_mm/article/details/106691212
10分钟看懂SpringCloud微服务:https://cloud.tencent.com/developer/article/1666060
Java 微服务框架选型(Dubbo 和 Spring Cloud?):https://www.cnblogs.com/xishuai/p/dubbo-and-spring-cloud.html
java spring系列
java_spring01读书要点
java_spring02ioc有什么优点
java_spring04Autowired与Resource差异解析
java_spring05循环依赖
java_spring06AOP
java_spring07mybatis学习要点
java_微服务01SpringCloud基础
java_微服务02SpringBoot学习笔记
java_微服务03SpringBoot常见问题
java_微服务04SpringCloud学习笔记
java_微服务06SpringCloud常见问题之Eureka
java_微服务07SpringCloud常见问题之Feign
java_微服务08SpringCloud常见问题之Hystrix
java_微服务09SpringCloud常见问题之Ribbon
java_微服务10SpringCloud常见问题之Zuul
java_微服务11SpringCloud其他问题