五分钟了解微服务和springcloud

2020-11-19 16:03:55 浏览数 (1)

摘要:本文主要是对自己学习微服务做一个总结和回顾,如果读者感兴趣的话,希望也能帮助到你,后面会一直更新springcloud实战开发相关的内容,敬请关注?


一、单体应用

所谓单体应用就是把所有的功能和模块全部都堆积到一起,这种模式也是传统项目中最经常使用的一种模式,我们熟知的有MVC这种架构模式,在单体应用中这三个模块是全部放在一起的,不会存在网络之间程序相互进行调用的情况。更通俗的理解就是项目只会打包成一个jar包或war包,所有的功能全部在一块,优点就是部署很方便,不用考虑分布式事务和分布式锁的问题,因为他们都跑在一个进程里面,缺点就是1.团队协作不方便,2.很难单独去更新某一个服务,只能进行全量更新部署。

二、架构的演进

关于架构演进可以前往我的另外一篇文章,讲述的很清楚架构的演进

三、集群、分布式、微服务的关系及区别

集群的含义就是每个节点执行相同的功能,单体应用转变到集群是不需要修改任何代码的,只需要将单体应用部署在多个节点上,然后前面搭载一个能够实现负载均衡的组件就可以了,例如nginx就可以,nginx实现负载均衡支持三种算法,IPhash,权重,轮询,关于nginx会在后面的章节详细的进行介绍。

分布式是由单体架构演变过来的,主要是换缓解单台服务器的压力,将一个系统拆分成多个模块,将每个业务分散到不同的机器去处理,这样第一个不会造成一旦系统出现问题就全部不可用的情况,第二个就是提高效率,能够针对单个业务进行升级与更新,不需要单独更新某个业务功能,而更新整个系统。实现分布式我们熟悉的有阿里的dubbo,它通过rpc进行程序之间的通信,它基于TCP协议进行二进制的数据传输,当当网为了能够dubbo更加方便的使用,在dubbo的基础上开发了dubbox的框架,该框架实现了rest格式进行调用,通信方式是基于应用层的http协议,传输的是文本

微服务其实属于分布式,同样都是实现业务的垂直分割,但是微服务更加专注单个服务的开发,他从每个业务某块下再进行抽取成底层服务,供上层调用,并且服务彼此之间尽量的不相互调用,将低耦合做到极致,这样做的目的是为了当某一个服务启动不了的时候,不会影响其他服务的使用,微服务的实现通常使用springcloud来完成,springcloud是基于http协议进行调用,所以服务为提供方和消费方不受任何限制。

引用网络上的几张图来更加清晰的说明这三者的关系,我就不画了,直接引用网友的图片 https://www.jianshu.com/p/1f9455139a31

分布式

集群

微服务

所以说如果不能在水平方向继续扩展,那就只能在垂直方向上拆分成单个的服务,为每个服务配置不同的集群。

四、springcloud简介

springcloud是一系列框架的有序集合,它提供了服务注册、服务发现、配置中心、网关、限流器、负载均衡等功能,springcloud提供了如下几个模块,也是我后面着重讲解的几个模块,到最后也会将这些功能结合起来做一个项目,进行实战开发

子组件

  • eureka:服务注册中心
  • ribbon:客户端的负载均衡组件
  • hystrix:容错框架
  • feign:封装了http接口调用方式的框架
  • zuul:网关,提供路由分发和过滤等功能
  • config:分布式配置管理中心

版本号

关于springcloud还有一个特点就是他的版本号命名规则,他不像我们普通的版本命名规则v1.1.1,他是以英文字符abc开头进行命名,而且这些单词都是以伦敦地铁站来命名的,大家或许会有疑问为什么这样命名?前面也说过springcloud其实他不是一个框架,他是一系列框架的集合,所以他是不能单独进行更新的,更新的是里面的子组件,子组件有自己的版本号,所以官网会有一个版本号对照表,springcloud的版本号对应的子组件的版本号。

五、总结

本文主要介绍了架构演进过程中出现几个重要的概念和模式,并且阐述了分布式,集群、微服务这三者的关系,及其介绍了相关的框架dubbo和springlcoud,简单概述了他们之间的优缺点及其通信调用的方式。引入springcloud介绍是为了后面的一系列的springcloud 实战开发做铺垫。

0 人点赞