一、微服务架构基本知识(spring-cloud)
1.1 什么是分布式?
不同模块部署在不同服务器上,对系统的水平拓展,分散单个服务器压力.
作用:分布式解决网站高并发带来问题
1.2 什么是集群?
多台服务器部署相同应用构成一个集群,利用硬件优势支撑访问量高的应用.
作用:通过负载均衡设备共同对外提供服务
1.3 什么是微服务?
微服务是对系统进行更细粒度的拆分,侧重于模块解耦和复用,不同的微服务不一定部署到不同服务器上,微服务是使系统各个功能拆分更加精细和独立的垂直拓展。
架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合),其它特性(单一职责,边界,异步通信,独立部署),微服务是分布式概念的更严格执行.换句换说:微服务一定是分布式的,但分布式项目不一定是微服务架构!
SpringCloud 为开发人员提供了快速构建分布式(或微服务)系统的一些工具,包括配置管理(config)、服务发现(Eureka)、断路器(hystrix)、路由(zuul)、微代理http客户端(Feign,rpc远程调用)、事件总线(Bus)、负载均衡(Ribbon,rpc远程调用)、日志链路监控(Zipkin)等。
四、服务生产者与消费者的关系
服务生产者:提供服务被人调用;
服务消费者:调用别人服务.
五、概念介绍完,我们开始着手搭建一个微服务项目
5.1 首先,用IDEA初始化一个demo,我的项目结构图是这样的:
有5个子模块,下面来一一讲解这5个子模块在项目中充当的角色和起到的作用:
1.demo-eurekaclient,这是springcloud的注册服务组件,即服务生产者,主要配置如图所示:
HelloController:
分布式和微服务到底有何区别?
MyEurekaClient:服务生产者启动类,@EnableEurekaClient注解表示服务客户端:
5.2 demo-eurekaserver:springcloud微服务注册中心,用于服务生产者注册服务地址;
MyEurekaServer:微服务注册程序启动类,@EnableEurekaServer表示这是用于微服务注册的服务:
5.3 demo-servicefeign:服务消费者,下图为基本配置:
HelloController:最终服务消费者客户端对外暴露的接口,HelloFeign通过http协议调用服务名为service-hello的微服务:
HelloFeign:通过http调用service-hello,如果出现异常,会调用回调函数HelloFeignCallback:
HelloFeignCallback:回调函数:
5.4 demo-serviceribbon:负载均衡组件,如果在注册中心注册了多个名为service-hello的服务,ribbon会通过内部的负载均衡机制选择一个service来调用,默认是采用轮询机制:
RibbonService:配合熔断器一起完成service的负载均衡,和HelloFeign不同的是,我这里采用RestTemplate来实现http调用,熔断器生效会调用helloError方法:
ServiceRibbon:开启负载均衡组件功能的service启动类:
5.5 demo-servicezuul:springcloud网关组件,我们都知道在微服务架构中,系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?难道要一个个的去调用吗?很显然这是不太实际的,我们需要有一个统一的接口与这些微服务打交道,这就是我们需要服务网关的原因:
ServiceZuul:网关组件启动程序,注意这些注解:
这几个模块的启动顺序:
Step1.启动注册中心
Step2.启动服务生产者
Step3. 启动负载均衡和服务消费者
注:如果配了网关的话,在启动服务消费者之前也把网关组件启动.