微服务架构

一 怎么理解微服务以及Spring Cloud?

简而言之,微服务架构风格[1]这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。对这些微服务我们仅做最低限度的集中管理。

解读微服务特点:

1:微服务是一种项目架构思想(风格)

2:微服务架构是一系列小服务的组合(组件化与多服务)

3:任何一个微服务,都是一个独立的进程(独立开发、独立维护、独立部署)

4:轻量级通信http协议(跨语言,跨平台)

5:服务粒度(围绕业务模块拆分)

6:去中心化管理(去中心化”地治理技术、去中心化地管理数据)

理解一:

springcloud提供了微服务治理的能力(服务注册与发现、服务降级、限流、熔断、网关、负载均衡、配置中心...),为微服务开发提供了全家桶服务

理解二:

Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的一-些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一-次性令牌,全局锁,领导选举,分布式会话,群集 状态)。它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心以及Cloud Foundry等托管平台。

二 怎么区分Spring,Spring MVC,Spring boot ,Spring Cloud

  • Spring是核心,提供了基础功能;
  • Spring MVC 是基于Spring的一个 MVC 框架 ;
  • Spring Boot 是为简化Spring配置的快速开发整合包;
  • Spring Cloud是构建在Spring Boot之上的服务治理框架。

 

三 组件介绍

服务注册与发现

服务注册,就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到1个公共的组件上去(比如: zookeeper\consul\eureka\nacos)。

服务发现,就是新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。

注册中心对比

nacos:是阿里开源的,经过了阿里实践的

eureka:netflix公司的,现在不维护了,不开源了

Consul : HashiCorp 公司推出的开源产品,用于实现分布式系统的服务发现、服务隔离、服务配置

Zookeeper: Appache dubbo分布式框架的注册中心使用的是zookeeper

 

nacos安装:

 解压安装包->进入nacos中的conf目录,修改配置文件application.conf--

 创建数据库->配置启动方式为单机启动

在nacos下的bin目录,修改starup.cmd文件,set MODE="standalone"

父工程导入依赖

 <!--    父工程的职责:锁定版本    springboot、springcloud、springcloud-alibaba-->

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

解释上面选择版本问题

SpringCloud Alibaba是SpringCloud的子项目,是阿里巴巴结合自身微服务实践,
◆ SpringCloud Alibaba符合SpringCloud标准,依赖于springcloud

服务注册者导入依赖

 <!--  web场景依赖      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--   端点监控的场景依赖     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--    服务注册与发现的场景依赖    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

配置yml

server:
  port: 9001
spring:
  application:
    name: cloud-goods #指定servicename
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #指定注册中心的地址
        username: nacos
        password: nacos
        ip: 192.168.54.21 #指定服务的监听ip地址

在启动类上加注解

启动nacos,访问网址,即可在nacos上注册 

 负载均衡器Ribbon

是一个"客户端"负载均衡器,运行在客户端上

工作流程:

1 拦截所有远程调用

2 获取请求url,从url解析出servicename

3 根据servicename获取实例列表

先在本地缓存中获取实例列表,如果本地缓存中没有,会向nacos注册中心请求获取实例列表

缓存一份到本地缓存中,如果本地缓存中有,直接返回实例列表

4 从实例列表中通过相应负载均衡算法,选取一个实例

Ribbon核心组件IRule:根据特定算法从服务列表中选取一个需要访问的服务;
其中IRule是一个接口,有七个自带的落地实现类,可以实现不同的负载均衡算法规则:

切换Ribbon负载均衡策略

 

 

 OpenFeign

作为Spring Cloud的子项目之一,Spring Cloud OpenFeign 是一种声明式、模板化的 HTTP 客户端,在 Spring Cloud 中使用 OpenFeign,可以做到使用 HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。同时OpenFeign通过集成Ribbon实现客户端的负载均衡

使用OpenFeign取代Resttemplate

使用步骤

1 场景依赖

<!--在服务消费方依赖Openfeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2 开启openfeign扫描

3 接口声明

 

 4  接口调用

package com.qf.controller;

/**
 * @author: 玉米
 * @description
 * @date: 2022/3/30 16:08
 */


import com.qf.api.JIfenApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("order")
@RefreshScope
public class OrderController {




    @Autowired
    //private RestTemplate restTemplate;
    private JIfenApi jIfenApi;

@Value("${info.name}")
private String Name;
@RequestMapping("info")
public String info(){
    return Name;
}

   /* @RequestMapping("save")
    public Map save(){

        //1:查询商品信息
        //goodService.findByID()本地调用
        //java发送http请求(appache httpclient   ===spring封装==》  RestTempalte)

        String url = "http://cloud-goods/goods/findById/1";
        Map res = restTemplate.getForObject(url, Map.class);


        //2:保存订单信息
        System.out.println("order save success");

        return  res;
    }*/
    @RequestMapping("testjifen")
    public Map testjifen(){
        return jIfenApi.DeleteById(1);
    }


}

之前是上面灰色那段调用,现在是接口调用,同时将接口声明都放在一个工程里更方便维护

配置中心

传统配置文件管理存在弊端

1 配置文件太分散,不能集中管理

2 大量冗余配置,通用配置信息不能共享

3 不支持配置信息的动态刷新

主流配置中心对比

从配置中心角度来看,性能方面Nacos的读写性能最高,Apollo次之,Spring Cloud Config依赖Git场景不适合开放的大规模自动化运维API。
功能方面Apollo最为完善,nacos具有Apollo大部分配置管理功能,而Spring CloudConfig不带运维管理界面,需要自行开发。
Nacos的一大优势是整合了注册中心、配置中心功能,部署和操作相比Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。

服务加载配置文件

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

 总结

1:注册中心(nacos),实现服务的注册与发现

2:Ribbon,客户端的负载均衡器,解决服务集群的负载均衡

3:Openfeign,声明式的http客户端,服务间远程调用,并通过ribbon实现负载均衡

4:配置中心(nacos),配置信息中心化管理,共享配置,支持动态刷新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值