一、了解微服务架构

1、微服务技术栈

  1. 整体框架
  2. 整体学习规划路线2、微服务与单体架构的区别

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署

优势

  • 结构简单
  • 部署成本低

缺点

  • 耦合度高,不利于构建和开发

3、分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,成为一个服务。

优点:

  • 降低服务耦合度
  • 有利于服务升级扩展

缺点:

  • 架构非常复杂
  • 运维、监控,部署难度提高

4、微服务:是一种经过良好架构设计的分布式架构方案

微服务架构特征:

  • 单一职责:微服务菜饭粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立,技术独立,数据独立,部署独立
  • 隔离性强:服务调用做好隔离、容错、降级、避免出现级联问题

5、微服务技术对比

6、一般企业需求对比

 二、SpringCloud

1、介绍:SpringCloud是目前国内使用最广泛的微服务框架。

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验

SpringCloudyuSpringBoot的版本兼容关系如下:

2、服务拆分及远程调用

  • 不同微服务,不能重复开发相同业务
  • 微服务数据独立,不要访问其他微服务的数据库
  • 微服务可以将自己的业务暴露为接口,供其他微服务调用

3、微服务远程调用

  • 远程调用分析:在模块中发出http请求,访问其他模块的接口,实现远程接口的调用
  • 基于RestTemplate发起的http请求实现远程调用
  • http请求做远程调用是与语言无关的调用,只要知道对方的ip,端口,接口路径,请求参数即可。
//在主类(配置类)中引入springboot带有的RestTemplate(),注入spring容器
//主类springbootApplication就是配置类

@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}

restTemplate.getForObject(url,User.class);
可根据请求地址(该请求地址和在浏览器中的地址相同),User.class可将返回的json类型转换为对应的类(对象);

  远程调用的提供者与消费者:

  • 服务提供者:在一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)
  • 服务消费者:在一次业务中,调用其他微服务的服务。(调用其他微服务的接口)
  • 中间角色(调用其他微服务,又被其他微服务调用):按照业务逻辑来看,提供接口和调用接口分别就是服务提供者和服务消费者
  • 提供者与消费者的角色相对而言(相对业务而言)

三、Eureka注册中心

1、传统直接地址调用的问题

硬编码:写死地址(微服务多个地址如何解决)

 Eureka的作用:

(1)Eureka注册中心分为两部分:

消费者根据负载均衡选择对应微服务,并进行远程调用

注册中心与服务提供者存在一个30秒心跳续约,检测该微服务是否还是正常运行,如果没有正常运行,

就从注册中心删除,并且消费者也不会再收到这个微服务的对应信息,如图中的8083

主要问题:解决

  • 消费者该如何获取服务提供者具体信息?
  1. 服务提供者启动时向Eureka注册自己的信息
  2. Erueka保存这些信息
  3. 消费者根据服务名称向Eureka拉取提供者信息
  • 如果有多个服务提供者,消费者该如何选择?
  1. 消费者利用负载均衡算法,从服务列表中挑选一个
  • 消费者如何感知服务提供者健康状态?
  1. 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  2. Eureka会更新记录服务列表信息,心跳不正常会被剔除
  3. 消费者就可以拉取到最新的信息

 Eureka的搭建主要步骤:

Eureka服务端:

  • 引入eureka-server依赖
  <!--eureka服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 主类上添加@EnableEurekaServer注解
  • 在application.yml中配置Eureka地址
server:
port: 10086 # 服务端口
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka

Eureka客户端:

  • 引入Eureka-client依赖
<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 在application.yml中配置Eureka地址
spring:
application:
name: user-service #服务名称 eureka:
client:
service-url: # eureka的地址信息(客户端与服务端的相同)
defaultZone: http://127.0.0.1:10086/eureka

大致服务搭建流程:@LoadBalanced注解用于负载均衡

 四、Ribbon(实现负载均衡)SpringCloud的组件

  • 负载均衡原理
  • 负载均衡策略
  • 懒加载

底层源码实现原理:

流程:

  1. 发起请求:RibbonLoadBanlancerClient根据URL中的id去动态的获取服务列表DynamicServerListLoadBalancer拉取对应的服务列表
  2. 获取服务列表之后根据自己的策略IRule(可自定义),选择某个服务器返回给RibbonLoadBanlancerClient,重新拼接地址,请求到对应服务器

轮询策略:

修改负载均衡策略:(server:服务器;service:服务)
1、代码方式,在配置类中,定义一个新的IRule;这种方式配置之后不论是该类访问哪一个服务都会遵循这个规则,分配的服务器都是随机的。

  
//此处是在application(需要随机服务器的主类)中配置的配置类,负载均衡策略为随机
@Bean
public IRule randomRule() {
return new RandomRule();
}

2、在配置文件中application.yml,添加新的配置也可以修改配置的规则; (这里可以指定某种服务请求会使用这种规则,此处为userservice)表示该类,该服务类请求userservice时就会按照这个规则,其他的不管。

userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

负载均衡的加载:初始化为懒加载,懒加载之后会进行缓存,后面请求访问就会更快

(开启饥饿加载)

如果有多个指定服务:

微服务技术栈简单介绍,Eureka和Ribbon的引入和使用的更多相关文章

  1. SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么

    从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...

  2. 微服务技术栈:API网关中心,落地实现方案

    本文源码:GitHub·点这里 || GitEE·点这里 一.服务网关简介 1.外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用 ...

  3. 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius

    前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特 ...

  4. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  5. .NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 =>  Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...

  6. SpringCloudAlibaba—微服务概念及SpringCloudAlibaba介绍

    目录 1.1 系统架构演变 1.1.1 单体应用架构 1.1.2垂直应用架构 1.1.3 分布式架构 1.1.4 SOA架构 1.1.5 微服务架构 1.2 微服务架构介绍 1.2.1 微服务架构的常 ...

  7. SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践

    一. 前言 日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat . 话不多说,先看实现的效果图 ...

  8. [转帖]微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务

    微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 http://skaka.me/blog/2016/04/21/springcloud1/ APR 21ST,  ...

  9. 微服务的发现与注册--Eureka

    目录 服务提供者.服务消费者.服务发现组件三者之间的关系 Eureka 简介 Eureka Server Eureka Client 编写Eureka Server 将微服务注册到Eureka Ser ...

随机推荐

  1. 三角网格上的寻路算法Part.2—A*算法

    背景 继上一篇三角网格Dijkstra寻路算法之后,本篇将继续介绍一种更加智能,更具效率的寻路算法-A*算法,本文将首先介绍该算法的思想原理,再通过对比来说明二者之间的相同与不同之处,然后采用类似Di ...

  2. Git 标签使用详解

    列出标签 # 默认按字母排序显示 $ git tag # 模糊匹配查找标签 $ git tag -l "v1.8.5*" 创建标签 # 创建附注标签 $ git tag -a v1 ...

  3. shell2-if判断2

    1.条件判断if 判断条件:then //单分支语句 命令1 命令2fi 例子: #!/bin/bash ls if [ $? -eq 0 ]; then echo "执行成功了" ...

  4. ApkToolBoxGUI 0.0.8发布了!!

    https://github.com/jiangxincode/ApkToolBoxGUI APKToolBoxGUI是一个程序员常用的小工具合集,有个比较友好的交互界面.主要包含编码转换,时间戳转换 ...

  5. postgresql使用pg_dump工具进行数据库迁移

    一.使用管理员身份打开cmd,切换到postgresqlp安装目录下的bin目录 必须要以管理员身份打开cmd,否则报拒绝访问 二.把生成的文件上传到服务器上,同样cd 到postgresql的安装b ...

  6. Linux命令查看各端口号占用情况

    yum -y install net-tools netstat -ntpl

  7. 注意,你所做的 A/B 实验,可能是错的!

    对于 A/B 实验原理认知的缺失,致使许多企业在业务增长的道路上始终在操作一批"错误的 A/B 实验".这些实验并不能指导产品的优化和迭代,甚至有可能与我们的初衷背道而驰,导致&q ...

  8. 单篇长文TestNG从入门到精通

    简介 TestNG是Test Next Generation的缩写,它的灵感来自于JUnit和NUnit,在它们基础上增加了很多很牛的功能,比如说: 注解. 多线程,比如所有方法都在各自线程中,一个测 ...

  9. AGC041F Histogram Rooks

    有生之年自己做出了一个 AGC F 还踩了标算,但是好像在我之前已经有人踩过标算了,再鞭尸一波也无可厚非 hhh 看到"全部被覆盖" 条件不好做,考虑容斥,即选择若干个位置强制它们 ...

  10. leetcode 1288. 删除被覆盖区间

    问题描述 给你一个区间列表,请你删除列表中被其他区间所覆盖的区间. 只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖. 在完成所有删除操作后 ...