Spring-Cloud之开篇
一、为什么会有spring-cloud。随着现代互联网的发展,以前很多传统的单体项目将不再满足于现在的互联网需求,而这个时候就诞生了另外一种说法,微服务。简单理解就是将软件应用程序独立部署的服务的一中特殊方式。微服务架构是一种分布式架构,可以安装业务单元,功能单元进行服务的划分。它有自己化运维、容错、快速演进等特点,它可以解决传统项目的弊病,并且可以满足越来越复杂的业务关系。
二、单体架构和分布式架构的优缺点。
1)单体架构:
以MVC架构模式为例,我们在传统项目中基本都是采用这种方式。通过MVC(表示层、业务逻辑层、数据访问层)的架构基本能够所有应用程序。
缺点:
随着业务复杂性增加,代码量增加。代码的可读性、可维护性和可扩展性就会下降。
随着用户数量增加,并发数增加。单体项目的并发就会存在瓶颈。
测试难度增加。
为了解决上面的一些问题传统的方式:
通过nginx进行反向代理,做负载均衡,运用程序,多台部署。
MySQL设置主从,通过读写分理来改善并发能力。
通过加入缓存,提高读取效率。
但是这种方式还是会存在很大问题:
单体项目代码的可读性、可维护性和可扩展性还是不能提升。
随着海量用户增加,数据库将成为瓶颈。
交付能力越来越弱。新老人员维护代码的成本过高,代码修改添加成本太高。
2)分布式架构
微服务特点:
按业务划分为一个独立单元,即独立的服务。
服务通过http协议通讯。
自动化部署。
可以介于不同语言之间。
可以用不同的存储技术。
服务集中化管理。
是一个分布式系统。
优势:
通过把庞大的业务关系拆分成各个晓得单元,服务之间明确界限,增加了代码的可读性和可扩展性。
由于微服务系统是分布式系统,在业务扩展上面有很强的能力。另外并发能力,可以通过集群方式得以处理。
通过http协议传输数据,服务之间完全解耦。这使得服务之间可以通过不同语言开发。
如果存在部分架构调整,那么单体工程绝对是抓破头皮的存在。
微服务在进行更新或者戎机的情况下,不会影响其他服务。
在CAP理论中使用AP架构,及有具有高可用和分区容错的特点。
缺点:
复杂度高。由于是分布式系统,所以部署复杂、学习成本上升、网路问题、服务依赖、测试都会变得更加复杂。
分布式事务。CAP理论(即同时满足一致性(Consistency)、可用性(Availability)、分区容错(Partition tolerance))。三者不可兼得,又由于P是基本要求所以,只能在CA中做取舍。微服务一般采用AP架构,那么问题就在一致性上面即分布式事务。一般采用两阶段提交方式解决。即第一阶段service-acount发起一个分布式事务,交给事务协调器TC管理。TC向所有参与事务的节点发起准备操作。第二阶段,如果准备成功,则发出提交命令,如果存在一个节点失败,则全部回滚。如果由于网络原因导致提交阻塞,会影响整个系统运行。所以尽量减少分布式事务的发生。
服务划分。业务拆分的界限主要是不是很明确,所以在划定上面一般根据业务的可独立和可更新进行划分。可以参考领域驱动设计进行划分。
服务部署。由于服务的数量和复杂度,还要考虑先后顺序等,所以导致了服务部署难的问题。目前采用的方式可以有docker编排,devops理念等
三、spring-cloud简介
1)微服务应该具备的功能
微服务具有以下特点:
按业务划分,代码量小,易于维护。
每个微服务有自己的独立组件。
通信采用http或者其他方式,具有容错能力。
一套服务治理方案,服务之间不耦合。
单个服务能够集群化,并且具有负载能力。
有一个完整的安全机制。
有链路追踪能力。
有一套完整的实时日志系统。
微服务具有以下功能:
服务的注册和发现。
服务的负载均衡。
服务的容错。(熔断器机制)
服务的网关。
服务配置的统一管理。
链路追踪。
实时日志。
2)简介
spring-cloud是基于spring-boot的。spring-boot是一种全新的web框架,他的特点是简化开发和部署过程。简化了spring的配置和依赖管理。spring-cloud是通过包装其他技术框架来实现的,提供了一些常用组件:服务注册与发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等。
常用组件:
服务注册与发现组件:Eureka |
熔断组件:Hystrix |
| =====> Spring Cloud Netflix
负载均衡组件:Ribbon |
路由网关组件:Zuul |
Spring Cloud Config:配置文件统一管理功能,一般配合spring cloud bus(消息总线)使用
Spring Cloud Security:安全管理,一般配合spring security oauth2使用
Spring Cloud Sleuth:分布式链路追踪组件
Spring Cloud Stream:数据流操作包
其他组件:
Feign:声明式远程调度组件。
Archaius:配置管理API组件。
Spring Cloud Data Flow:大数据操作组件。
Spring Cloud Consul:另一个服务注册与发现组件。
Spring Cloud Zookeeper:服务注册与发现组件。
Spring Cloud CLI:可以让用户以命令形式快速运行和搭建容器。
Spring Cloud Task:任务调度和管理。
四、上面介绍了Spring Cloud,下面看一下阿里的Dubbo。
Dubbo是阿里开源的一个分布式服务架构,致力于高性能和透明化的RPC调用,以及SOA的服务治理方案。
1)RPC远程调用:以NIO为基础实现的Netty框架的使用。
2)集群容错:提供了基于接口方法的远程调用功能,并显示负载均衡、失败容错等功能。
3)服务发现与发现:集成Zookeeper。
4)Dubbo架构流程:
服务提供者向服务中心注册服务。
服务消费者订阅服务。
服务消费者发现服务。
服务消费者远程调度服务提供者进行服务消费,在调度过程中使用了负载均衡、失败容错等功能。
服务消费者和提供者,在内存中记录调用次数,并定时发送监控中心。
特点:
连通性:服务之间均为长连接。
健壮性:监控中心宕机不影响其他服务。
伸缩性:动态增减注册中心和服务数量。
升级性:服务集群升级,不会对现有框架造成压力。
五、Spring Cloud和Dubbo对比
目前Dubbo已经完全开源,捐给apache了,更新的状态不是很频繁。Dubbo使用tcp的协议,从效率上来说,比Spring Cloud的Restful的接口风格更快。Dubbo更好基于xml配置,Spring Cloud更多基于注解进行配置。上手层度上来说,Dubbo上手更加容易,Spring Cloud和Spring Boot的相关文档全都是英文且量大,所以学习成本上来说,Dubbo更好。但是从解耦上来说,Spring Cloud采用http通信,所以在解耦上面做的更好。开发效率和部署效率上来说,Spring Cloud做的更加完善和高效。
六、容器集群管理Spring Cloud和Kubernetes对比
总结:
Spring Cloud采用Java编写,在集成上面会更加实用。
Spring Cloud 有大量的类库。
Spring Cloud 更多关注功能点。
Kubernetes支持跨语言。
Kubernetes提供微服务功能外,还支持环境、资源限制、管理应用程序声明周期等功能。
Kubernetes面向DevOps人员。
Kubernetes学习成本高,比较新的平台。
七、上面主要是介绍Spring Cloud的相关知识,下面详细介绍各个功能。
1)Spring-Cloud之Spring-Boot框架-1
10)Spring-Boot之Security安全管理-10
八、源码地址:https://github.com/lilin409546297/spring-cloud
九、在此说明本博客参考《深入理解Spring Cloud与微服务构建》一书进行编写,如果存在侵权问题,请联系博主。
Spring-Cloud之开篇的更多相关文章
- Spring Cloud Eureka(一): 开篇说明及目录汇总
开篇简述 基于Spring Boot 和 Spring Cloud 的微服务应用,本人在工作中已经使用两年有余了,伴随着个人学习计划的实施,希望借助博文的方式,将工作中使用到的技术点体系化的总结出来, ...
- Spring Cloud Alibaba微服务一站式解决方案-开篇v2.2.1.RELEASE
学习路线 **本人博客网站 **IT小神 www.itxiaoshen.com 生态概述 架构演进 什么是微服务 https://martinfowler.com/microservices/ Mic ...
- 使用Sidecar将Node.js引入Spring Cloud
网上看到的一篇文章,觉得写得挺好,现转载于此,以方便需要的网友查阅. 该文章介绍了非JAVA语言提供的应用集成到Spring Cloud的这样一个实现,以便我们使用其他语言作为参考. 感谢原作者分享, ...
- .NET Core下的Spring Cloud——前言和概述
前言 前几年一直在写类似dubbo,Srping Cloud的微服务框架辗辗转转重复了多次,也重构推翻了很多次,其中诞生了"Rabbit.Rpc","Go",& ...
- 【Spring实战】----开篇(包含系列目录链接)
[Spring实战]----开篇(包含系列目录链接) 置顶2016年11月10日 11:12:56 阅读数:3617 终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Sprin ...
- spring cloud 面试题总结
前言,随着分布式的时代到来,现在微服务越来越火了,Spring Cloud已经成为一个面试必问的考点,下面我们就Cloud这一些列的组件来一个入门到面试的过程.开篇前,先让大家看几个常见的Spring ...
- Spring Cloud 学习 之 Spring Cloud Bus实现修改远程仓库后配置自动刷新
版本号: Spring Boot:2.1.3.RELEASE Spring Cloud:G版 开发工具:IDEA 搭建配置中心,这里我们搭建一个简单版的就行 POM: <?xml ...
- Spring Cloud Gateway实战之一:初探
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<Spring Cloud Gateway实 ...
- Spring Cloud Gateway修改请求和响应body的内容
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- spring/spring boot/spring cloud开发总结
背景 针对RPC远程调用,都在使用dubbo.dubbox等,我们也是如此.由于社区暂停维护.应对未来发展,我们准备尝试新技术(或许这时候也不算什么新技术了吧),选择使用了spring ...
随机推荐
- 分享一个Python脚本--统计redis key类型数据大小分布
概述 今天主要介绍怎么统计redis key类型数据大小分布. 原理:使用redis命令: scan.pipline.type 和 debug object 来得到 redis key 信息. 脚本 ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- npm安装插件怎么判断是--save 还是--save--dev
npm敲到一半的时候发现:诶 这个到底是-g呢还是--save还是--save-dev呢 1.首先要先了解package.json 在Node.js中,模块是一个库或框架,也是一个Node.js项目. ...
- Java编程思想之三 操作符
在底层,Java中的数据是通过使用操作符来操作的. 3.2 使用Java操作符 操作符接收一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可能会改变操作数自身的值,这被称 ...
- 微信小程序怎么获取page/index/main后面的参数
请求例子:page/index/main?id=123,如何获取123? mpvue框架在onLoad(options)函数里面获取options.id即可. 用的框架不同,onLoad的函数不同.原 ...
- IIS 7中添加匿名访问FTP站点
1. 开启FTP和IIS服务: 2.打开IIS 管理器: 我电脑上是IIS 7.5 ,所以选择第一个并点击打开哦. 如果你想知道自己IIS的版本,打开帮助菜单: 3. 新建FTP站点: 4. 填写站点 ...
- SpringBoot(十六):SpringBoot2.1.1集成fastjson,并使用fastjson替代默认的MappingJackson
springboot2.1.1默认采用的json converter是MappingJackson,通过调试springboot项目中代码可以确定这点.在springboot项目中定义WebMvcCo ...
- 基于redis5的session共享:【redis 5.x集群应用研究】
基于springsession构建一个session共享的模块. 这里,基于redis的集群(Redis-5.0.3版本),为了解决整个物联网平台的各个子系统之间共享session需求,且方便各个子系 ...
- Maven依赖包导入错误(IntelliJ IDEA):java.lang.OutOfMemoryError: GC overhead limit exceeded
一.问题背景 最近用IntelliJ IDEA 打开一个老应用,一直加载依赖不成功,主POM中存在如下错误. java.lang.OutOfMemoryError:GC overhead limit ...
- MongoDB开发深入之一:文档数据关系模型详解(一对多,多对多)
文档关联模型通常有3种方式: 嵌入式(一对一.一对多) 后期手动统一ID处理(一对多.多对多) References引用(一对一.一对多) 文档树模型通常有3种方式: 父引用(Parent Refer ...