分布式和微服务到底有何区别?

柔情痞子 提交于 2019-12-31 22:33:46

一、微服务架构基本知识(spring-cloud)

1.1 什么是分布式?

不同模块部署在不同服务器上,对系统的水平拓展,分散单个服务器压力.

作用:分布式解决网站高并发带来问题

1.2 什么是集群?

多台服务器部署相同应用构成一个集群,利用硬件优势支撑访问量高的应用.

作用:通过负载均衡设备共同对外提供服务

1.3 什么是微服务?

微服务是对系统进行更细粒度的拆分,侧重于模块解耦和复用,不同的微服务不一定部署到不同服务器上,微服务是使系统各个功能拆分更加精细和独立的垂直拓展。

架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合),其它特性(单一职责,边界,异步通信,独立部署),微服务是分布式概念的更严格执行.换句换说:微服务一定是分布式的,但分布式项目不一定是微服务架构!

二、微服务架构图微服务架构图
三、SpringCloud说明

SpringCloud 为开发人员提供了快速构建分布式(或微服务)系统的一些工具,包括配置管理(config)、服务发现(Eureka)、断路器(hystrix)、路由(zuul)、微代理http客户端(Feign,rpc远程调用)、事件总线(Bus)、负载均衡(Ribbon,rpc远程调用)、日志链路监控(Zipkin)等。

四、服务生产者与消费者的关系

服务生产者:提供服务被人调用;
服务消费者:调用别人服务.

五、概念介绍完,我们开始着手搭建一个微服务项目

5.1 首先,用IDEA初始化一个demo,我的项目结构图是这样的:项目结构图
有5个子模块,下面来一一讲解这5个子模块在项目中充当的角色和起到的作用:

1.demo-eurekaclient,这是springcloud的注册服务组件,即服务生产者,主要配置如图所示:demo-eurekaclient
HelloController:

分布式和微服务到底有何区别?
HelloController
MyEurekaClient:服务生产者启动类,@EnableEurekaClient注解表示服务客户端:
MyEurekaClient
5.2 demo-eurekaserver:springcloud微服务注册中心,用于服务生产者注册服务地址;
服务注册中心
MyEurekaServer:微服务注册程序启动类,@EnableEurekaServer表示这是用于微服务注册的服务:启动类
5.3 demo-servicefeign:服务消费者,下图为基本配置:服务消费者
HelloController:最终服务消费者客户端对外暴露的接口,HelloFeign通过http协议调用服务名为service-hello的微服务:hello的微服务
HelloFeign:通过http调用service-hello,如果出现异常,会调用回调函数HelloFeignCallback:HelloFeign
HelloFeignCallback:回调函数:
HelloFeignCallback
5.4 demo-serviceribbon:负载均衡组件,如果在注册中心注册了多个名为service-hello的服务,ribbon会通过内部的负载均衡机制选择一个service来调用,默认是采用轮询机制:ribbon配置
RibbonService:配合熔断器一起完成service的负载均衡,和HelloFeign不同的是,我这里采用RestTemplate来实现http调用,熔断器生效会调用helloError方法:RibbonService
ServiceRibbon:开启负载均衡组件功能的service启动类:启动类
5.5 demo-servicezuul:springcloud网关组件,我们都知道在微服务架构中,系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?难道要一个个的去调用吗?很显然这是不太实际的,我们需要有一个统一的接口与这些微服务打交道,这就是我们需要服务网关的原因:zuul配置
ServiceZuul:网关组件启动程序,注意这些注解:网关组件启动程序
这几个模块的启动顺序:

Step1.启动注册中心

Step2.启动服务生产者

Step3. 启动负载均衡和服务消费者

注:如果配了网关的话,在启动服务消费者之前也把网关组件启动.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!