SpringCloud 微服务入门-Spring Cloud 与微服务概述
导语
首先要了解的是微服务是一种架构风格,跟SOA类似。而Spring Cloud 则是实现这种架构风格的一种技术栈。类似于实现SOA架构风格,用到的具体的技术栈就是ESB。博主也在之前的博客中分享过有关微服务的理论性的东西,这里就不在多说了。
微服务简单介绍
既然微服务是一种架构风格,那么怎么实现这种架构风格就是我们关注的重点了,在讲究效率的今天很多的传统的单体应用其实已经是不满足于互联网公司的发展,现在很多的互联网公司追求的就是高效。无论是从用户角度还是业务角度都追求以高效的方式解决问题。
在传统的单体应用中,也就是说把所有的业务都要放到同一个war包或者是Jar包中。那么可想而知,如果其中有一个业务需要进行变化的话,那么整个的war或者是Jar包都要重新进行发布操作。当然,随着业务的不断的更新迭代,那么整个的Jar包或者是war包就会出现很多的冗余代码,举个例子来说就是实际运行代码大小只有10MB但是整个的Jar包或者是War包大小达到300MB。
当然在刚开始创建项目或者是项目业务内容设计较少的情况下可以使用这种方式。可以快速解决公司所带来的的问题。但是如果后续业务涉及较多,慢慢的集成就就会出现一个BUG导致整个的应用瘫痪。
现在很多厂商都在追求高并发、高可用、高扩展。显然上面描述的单体应用很难满足这些条件。所以就要基于某种技术进行改造。这个时候就出现了一个框架叫做Dubbo框架。为什么这里不是说微服务技术呢?当然在2014年的时候微服务这个名词出现,但是这个概念的提出要比这个名词更早。所以这里Dubbo走在了前面。
Dubbo 解决了服务之间的调用问题,那么在Dubbo这种方案出现之前又是什么呢?那就不得不说SOA和ESB了。在微服务解决方案之前,有一种解耦的办法叫做ESB。它实现了整个的企业系统之间的相互协调。有兴趣的读者可以去看一下这些技术的发展史。
也许有人会问,既然Dubbo做的这么好了,那么为什么还要提到Spring Cloud 呢?首先选用一种技术,需要注意三个点
- 社区的支持程度
- 技术关注点
- 性能问题
Dubbo现在是Apache的顶级项目,当然Ali内部也有相对应的开发。但是就互联网可查的范围内,Dubbo和Spring Cloud其实区别还是蛮大的。一个公司的技术选型要结合具体公司涉及到的业务,如果没有一个很好的技术选型后续的业务开展起来将会是非常困难的一件事情。条条大路通罗马,但是我们也要选择一条最舒适的。
网上有很多的对比其实是针对于Dubbo与Spring Cloud Eureka来进行比较的。而Spring Cloud 对于Eureka的支持也是通过封装的形式来实现的。如果单独把Eureka拿出来也是可以单独使用的,只不过为了形成一个微服务的技术栈而提供了一些复用的东西,避免了重复造轮子。
下面就来说说上面提到的是三个点
- 社区支持
首先是Spring Cloud依托这Spring技术有着强大的社区团体,因为在整个的Java开发界或多或少都使用到Spring框架,Spring Cloud技术栈里面的技术也是频繁的更新。Dubbo 是出自ali,长时间没有维护,而阿里内部又有一个RPC框架HSF,所以当Dubbo被重启之后,与Spring Cloud还是拉开了一段距离。
- 技术关注点
Spring Cloud 关注的整个的微服务的技术栈,在Spring Cloud技术栈中提供了很多的快速继承、快速开发的组件。 而Dubbo来说相对就关注的比较细致一些,只是针对服务治理,也就是相当于Spring Cloud的一个子集,从这个角度上来说,能和Dubbo相比较的就是gRPC、Thrift之类的框架。
- 性能
当然对于性能这个角度上来说,其实关注的点越细致,那么对应的解决问题的性能就越好,这一点Dubbo可能要比较与Spring Cloud相对较好,看过Dubbo源码的都知道Dubbo底层是基于Netty实现TCP以及二进制传输,并且实现了自己的Dubbo协议。而Spring Cloud来说它是基于HTTP请求的方式,每次都要经历创建连接,传输文本的操作,整个在IO以及网络性能上都有所消耗。
当然对于Spring Cloud的性能消耗对于大部分的应用是可以接受的,毕竟HTTP被大众接受,在Spring Cloud技术栈上也做了相应的优化。当然当当网在Dubbo的基础上在REST方面做了扩展并且出现了Dubbox,也就是这个道理。
什么是Spring Cloud技术
Spring Cloud其实不是指某一项技术,而是一系列技术的集合。它是利用 Spring Boot开发的遍历,通过简化分布式及系统基础设施的开发框架,例如服务注册、服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等等。这些内容统一的使用Spring Boot 的开发风格。而Spring Cloud的主要贡献则是来自于 Netflix OSS
Spring Cloud组件模块介绍
- Eureka 注册中心,用于服务管理
- Ribbon 基于客户端负载均衡组件
- Hystrix 容错框架,能够防止服务雪崩
- Fegin Web服务客户端,能够简化HTTP接口调用
- Zuul API网关,提供路由转发、请求过来等功能
- Config 分布式配置管理
- Sleuth 服务跟踪
- Stream 构建消息驱动的微服务应用框架
- Bus 消息代理的消息总线
当然除了上面的内容还要很多的Spring Cloud技术栈。其他的技术在用到的时候都可以自己做二次开发,进行一个归类。
Spring Cloud 版本介绍
首先在Spring Cloud官网的时候会遇到一个问题,就是Spring Cloud的版本选择问题。其实网上有很多的Spring Cloud与Spring Boot的版本对照表。Spring Cloud 的版本是按照地铁栈来进行命名的。但是它使用的Spring Boot,所以说如果没有选择正确的版本,整个的微服务搭建起来会出现很多的版本冲突问题。
现在官网上的版本已经更新到2020 的版本了。
还没有评论,来说两句吧...