微服务技术栈简单介绍,Eureka和Ribbon的引入和使用
一、了解微服务架构
1、微服务技术栈
- 整体框架

整体学习规划路线
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

主要问题:解决
- 消费者该如何获取服务提供者具体信息?
- 服务提供者启动时向Eureka注册自己的信息
- Erueka保存这些信息
- 消费者根据服务名称向Eureka拉取提供者信息
- 如果有多个服务提供者,消费者该如何选择?
- 消费者利用负载均衡算法,从服务列表中挑选一个
- 消费者如何感知服务提供者健康状态?
- 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
- Eureka会更新记录服务列表信息,心跳不正常会被剔除
- 消费者就可以拉取到最新的信息
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的组件
- 负载均衡原理
- 负载均衡策略
- 懒加载

底层源码实现原理:
流程:
- 发起请求:RibbonLoadBanlancerClient根据URL中的id去动态的获取服务列表DynamicServerListLoadBalancer拉取对应的服务列表
- 获取服务列表之后根据自己的策略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的引入和使用的更多相关文章
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
- 微服务技术栈:API网关中心,落地实现方案
本文源码:GitHub·点这里 || GitEE·点这里 一.服务网关简介 1.外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用 ...
- 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius
前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特 ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- .NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现
Tip: 此篇已加入.NET Core微服务基础系列文章索引 => Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...
- 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 微服务架构的常 ...
- SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践
一. 前言 日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat . 话不多说,先看实现的效果图 ...
- [转帖]微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务
微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 http://skaka.me/blog/2016/04/21/springcloud1/ APR 21ST, ...
- 微服务的发现与注册--Eureka
目录 服务提供者.服务消费者.服务发现组件三者之间的关系 Eureka 简介 Eureka Server Eureka Client 编写Eureka Server 将微服务注册到Eureka Ser ...
随机推荐
- MySQL_事务(四大特性)
本文转载:https://www.cnblogs.com/kismetv/p/10331633.html 事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首 ...
- mysql自动安装脚本
#!/bin/bashif [ -d /software ] ;then cd /softwareelse mkdir /software && cd /softwarefi #is ...
- centos7 安装locate
使用locate my.cnf命令可以列出所有的my.cnf文件 yum -y install mlocate 原因是安装完后没有更新库 更新库:updatedb
- CentOS7 安装mysql并解决安装慢的问题
0.centOS7 mini版安装及网络配置 //可从我的网盘保存下载,可用虚拟机安装 链接:https://pan.baidu.com/s/10_AHxN0DtJ75s1oFOaaZ3A 密码:ud ...
- xml文件 加载properties文件的两种方法与注意事项
1.遇到的问题: 配置redisSpringContext.xml 时,遇到 properties加载失败,提示BeanDefinitionStoreException 和 java.lang. ...
- Git创建分支进行开发
一.业务场景 自己当前开发的项目算是一个中型项目,整个项目都是由自己一个人开发完成,主要有两个子项目,一个是小程序的后台,一个是小程序的后台管理系统. 因为从一开始就只有我一个人在进行开发,所以自己平 ...
- KMP算法解题模板(更新)
/* kmp算法的主要作用在于对next数组的运用,所以这里只给出next数组的模板 性质1:对于每一个长度len的子串,该子串的最小循环节为len-next[len] 性质2:kmp的next不断向 ...
- mysql之突破secure_file_priv写webshell
在某些情况下,当我们进入了一个网站的phpMyAdmin时,想通过select into outfile来写shell,但是通常都会报错. 这是因为在mysql 5.6.34版本以后 secure_f ...
- Android官方文档翻译 八 2.1Setting Up the Action Bar
Setting Up the Action Bar 建立Action Bar This lesson teaches you to 这节课教给你 Support Android 3.0 and Abo ...
- Servlet-斜杠在web中不同意义
Servlet-斜杠在web中不同意义 在web中 / 斜杠是一种绝对路径 / 斜杠 如果被浏览器解析,得到的地址是:http://ip/port/ / 斜杠 如果被服务器解析,得到的地址是:http ...