解决如上问题有大致几种解决方案:
1、dubbo直连;
2、dubbo group 服务分组;
3、dubbo version 版本过渡;
在开发以及测试环境下,经常需要绕过注册中心,只测试指定服务的提供者,这时候可 以使用点对点直连的方式。点对点直连方式,将以服务接口为单位,忽略注册中心的提供者表。A接口配置点对点,不影响B接口从注册中心获取列表。
消费者应用,在注入的提供者api上添加 @Reference(version = "100", url = "dubbo://ip:port") 即可!
此时,如果提供者不希望本地的服务被别人调用到,设置:dubboregistryregister=false,默认值是true。该属性含义: 是否向此注册中心注册服务,如果设为false,将只订阅,不注册。
通过服务分组实现环境隔离,不用绕过注册中心,大家可以共用一个注册中心。服务注册分组,使跨组的服务不会相互影响,也无法相互调用,适用于环境隔离。
场景:服务A希望调用到本地的服务B(此时,B服务正常的调用远程服务C),而不是远程服务B。
本地服务B的配置设置如下: //应用全局配置 dubboprovidergroup=local-group //设置本地B所提供的dubbo服务均在local-group分组下如图:
//针对某个Api进行配置
也可以针对某个api单独做分组,例如:@Service(version = "100",group = "local-group")服务A:在注入的B dubbo服务的api上加 @Reference(version = "100", group = "local-group") 即可。
服务分组的几个属性解释:
1、dubboregistrygroup=local-group
该值自行定义,确保唯一即可,该属性含义:服务注册分组,跨组的服务不会相互影响,也无法相互调用,适用于环境隔离。 该配置不推荐配置,配置之后服务在dubbo admin上默认无法查看,也调用不到该服 务。不同环境,通过zookeeper做数据隔离。
2、dubboprovidergroup=local-group
该属性含义:服务分组,当一个接口有多个实现,可以用分组区分。该配置使当前服务所有的提供者都在local-group下。也可以只针对某个api做配置@Service(version ="100",group ="local-group");推荐后者!
3、dubboconsumergroup=local-group
该配置使当前服务只消费local-group分组下的提供者,建议只针对某个api进行配置即可,例如: @Reference(version ="100", group ="local-group")
当一个接口的实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。dubboproviderversion=10 //服务版本, 建议使用两位数字版本,如:10 ,通常在接口不兼容时版本号才需要升级。
dubboconsumerversion=10 //消费10版本的提供者
可全局配置,亦可配置到某个api服务上,此时优先级大于全局配置。
提供者服务示例:@Service(version ="your version")
消费者api服务示例: @Reference(version ="your version")Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。
1单一应用框架(ORM)
当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本。
缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护
2垂直应用框架(MVC)
垂直应用架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,且系统的体积可控,一定程度上降低了开发人员之间协同以及维护的成本,提升了开发效率。
缺点:但是在垂直架构中相同逻辑代码需要不断的复制,不能复用。
3分布式应用架构(RPC)
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心
4流动计算架构(SOA)
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架
从以上是电商系统的演变可以看出架构演变的过程:
1单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
2垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
3分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
4流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。
在这里插播一条关于RPC的简介:
RPC(Remote Procedure Call Protocol):远程过程调用:
两台服务器A、B,分别部署不同的应用a,b。当A服务器想要调用B服务器上应用b提供的函数或方法的时候,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义传达调用的数据。
说白了,就是你在你的机器上写了一个程序,我这边是无法直接调用的,这个时候就出现了一个远程服务调用的概念。
RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
RPC需要解决的问题:
通讯问题 : 主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
寻址问题 :
A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。
序列化 与 反序列化 :
当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。
同理,B服务器接收参数要将参数反序列化。B服务器应用调用自己的方法处理后返回的结果也要序列化给A服务器,A服务器接收也要经过反序列化的过程。
Dubbo是
1什么Dubbo是:一款分布式服务框架
2高性能和透明化的RPC远程服务调用方案
3SOA服务治理方案
每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。
Dubbo架构
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。
调用流程
0服务容器负责启动,加载,运行服务提供者。
1服务提供者在启动时,向注册中心注册自己提供的服务。
2服务消费者在启动时,向注册中心订阅自己所需的服务。
3注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
Dubbo注册中心
对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;
对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。
Dubbo提供的注册中心有如下几种类型可供选择:
Multicast注册中心
Zookeeper注册中心
Redis注册中心
Simple注册中心
Dubbo优缺点
优点:
1透明化的远程方法调用
- 像调用本地方法一样调用远程方法;
只需简单配置,没有任何API侵入。
2,软负载均衡及容错机制
可在内网替代nginx lvs等硬件负载均衡器。
3服务注册中心自动注册 & 配置管理
-不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。
使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群。
4服务接口监控与治理
-Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理。
缺点:
只支持JAVA语言
Dubbo入门Demo
了解了Dubbo以后,自然要搭建一个简单的Demo实现。本文采用Dubbo与Zookeeper、Spring框架的整合。
主要是以下几个步骤:
1 安装Zookeeper,启动;
2 创建MAVEN项目,构建Dubbo+Zookeeper+Spring实现的简单Demo;
3 安装Dubbo-admin,实现监控。
1 Zookeeper介绍与安装
本Demo中的Dubbo注册中心采用的是Zookeeper。为什么采用Zookeeper呢? Zookeeper是一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据 ,这里能很好的作为Dubbo服务的注册中心。
Dubbo能与Zookeeper做到集群部署,当提供者出现断电等异常停机时,Zookeeper注册中心能自动删除提供者信息,当提供者重启时,能自动恢复注册数据,以及订阅请求具体的安装方法在此不一一叙述,可参考博文:
/details/52028945
安装完成后,进入到bin目录,并且启动zkServercmd,这个脚本中会启动一个java进程:
(注:需要先启动zookeeper后,后续dubbo demo代码运行才能使用zookeeper注册中心的功能)
2 创建MAVEN项目
项目结构:
主要分三大模块:
dubbo-api : 存放公共接口;
dubbo-consumer : 调用远程服务;
dubbo-provider : 提供远程服务。
下面将详细叙述代码构建过程。
1) 首先构建MAVEN项目,导入所需要的jar包依赖。
需要导入的有spring, dubbo, zookeeper等jar包。
(详情参看后面提供的项目代码)
2)创建dubbo-api的MAVEN项目(有独立的pomxml,用来打包供提供者消费者使用)。
在项目中定义服务接口:该接口需单独打包,在服务提供方和消费方共享。
3)创建dubbo-provider的MAVEN项目(有独立的pomxml,用来打包供消费者使用)。
实现公共接口,此实现对消费者隐藏:
需加入公共接口所在的依赖
用Spring配置声明暴露服务
启动远程服务:
4)创建dubbo-consumer的MAVEN项目(可以有多个consumer,但是需要配置好)。
调用所需要的远程服务:
通过Spring配置引用远程服务:
通过Spring配置引用远程服务:
5)运行项目,先确保provider已被运行后再启动consumer模块:
运行提供者:
消费者成功调用提供者所提供的远程服务:
当然,这只是一个模拟的项目,实际中有多提供者多消费者情况,比这要复杂的多,当然只有这样才能体现dubbo的特性。
Dubbo管理控制台介绍
下载dubbo-admin,可自行根据网上介绍安装。大致做法就是将dubbo-admin中 的某个文件夹内容替换到tomcat的conf中,再运行tomcat即可。但我在实际 *** 作中发现JDK8无法运行,后来找到一个JDK8可以实现的dubbo-admin版本,下载地址:/226631678709806/resource/901920001882583/1html。
成功开启输入用户名密码root后,即可进入控制台首页查看消费者提供者情况:
查看提供者:
查看消费者:/回答内容很长,能看完的少走一个月弯路,绝不抖机灵/提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获。废话不多少了,先了解一下Java零基础入门学习路线:第一阶段:JavaSE阶段变量、数据类型、运算符
二进制和十进制的转化
注释、单行注释、多行注释、文本注释、注释内容和字节码的关系
标识符、关键字、驼峰原则
变量的本质、内存画图、变量声明和初始化
变量的分类和作用域(局部变量、成员变量、静态变量)
常量和Final
基本数据类型介绍
整型变量和整型常量
浮点类型、float、double
char字符型、转义字符
boolean布尔型、if语句使用要点、布尔类型占用空间问题
运算符介绍
算数运算符(二元、自增、自减)
赋值和赋值运算符
关系运算符详解
逻辑运算符、短路运算符详解
位运算符详解
字符串连接符
条件运算符(三元运算符)
运算符优先级问题
自动类型转换详解
强制类型装换详解
基本数据类型装换常见错误、溢出、L问题
使用Scanner获取键盘输入
控制语句控制语句和实现逻辑对应
if单选结构
if_elseif_else多选结构
switch语句_IDEA更换主题
循环_while
循环_for循环_dowhile
嵌套循环
break和continue语句_标签_控制语句底层原理
写一个年薪计算机_百度查问题的秘诀(重要)
个人所得税计算器软件
方法核心详解_天才思维模型教你高手学习思维模式
方法的重载
递归结构讲解_递归头_递归体
面向对象编程-基础面向过程和面向对象的区别
类和对象的概述
类的属性和方法
创建对象内存分析
构造方法(Construtor)及重载
对象类型的参数传递
this关键字
static关键字详解
局部代码块、构造代码块和静态代码块
package和import详解
JavaDoc生成API文档
面向对象编程-进阶面向对象的三大特性
面向对象之封装(Encapsulation)
访问权限修饰符
面向对象之继承(Inheritance)
Object类
方法重写Override
super关键字详解
重写equals()和toString()
继承中对象创建的内存分析
面向对象之多态(Polymorphism)
向上转型
向下转型
instanceof运算符
编译时和运行时详解
final修饰符
抽象类和抽象方法(abstrct)
接口的定义和实现
JDK8的接口新特性
接口应用:内部类比较器Comparable
内部类详解
Java的内存管理与垃圾回收
异常机制异常的概述
异常的执行过程与分析
try-catch-finally捕捉异常
throw抛出异常
throws声明异常
异常继承体系
运行时异常和编译异常
自定义异常
Java常用类Wrapper包装类自动装箱和自动拆箱
包装类的源码分析
String类的使用与内存原理
String类的源码分析
StringBuffer
StringBuilder
字符串处理类性能分析
Date类
System类
DateFormat类
Calendat类
Math类
BigInteger类和BigDecimal类
Random类
枚举类
File类
常见的面试题讲述与分析
数据结构算法
数据结构的概述
线性表
顺序表
链表
栈和队列
树
二叉树
二叉查找树
二叉平衡树
黑红树
图
冒泡排序
选择排序
递归
折半查找
集合(容器)
集合和数组的联系和区别
集合框架体系
ArrayList的使用和源码分析
集合中使用泛型
LinkedList的使用和源码分析
HashSet的使用和源码分析
哈希表及原理
TreeSet的使用和源码分析
比较器Comparable和Comparator
HashMap的使用和源码分析
TreeMap的使用和源码分析
Iterator于ListIterator
Collections工具类
旧集合类Vector、Hashtable
集合总结和选择依据
泛型接口
泛型类
泛型方法
IO流
IO流的概念
IO流的分类及其原理分析
文件流FlieInputStream、FileOutputStream
缓冲流BufferedInputStream、BufferedOutputStream
数据流ObjectInputStream、ObjectOutputStream
序列化和反序列化
转换流InputStreamReader、OutputStreamWriter
打印流PrintWrite和PrintStream
数组流ByteArrayOutputStream、ByteArrayInputStream
使用IO复制文件夹
多线程
进程和线程
线程的创建与启动
创建线程的三种方式对比
线程的生命周期
线程控制
多线程的安全问题与解决办法
线程的同步:同步代码块
线程的同步:同步方法
线程的同步:Lock锁
线程的死锁问题
线程通信
Condition
线程的完整生命周期
线程池ThreadPoolExecutor
ForkJoin框架
ThreadLocal类
网络编程
计算机网络基础知识
网络通信协议
OSI参考模型
TCP/IP参考模型
数据的封装与拆封原理解析
TCP协议
UDP协议
IP地址和端口号
URL和Socket
使用TCP编程实现登录功能
使用UDP编程实现客服系统
使用TCP编程实现文件上传
集合提升寻训练
手写ArrayList
手写单链表
手写Linkedlist
手写HashMap
手写HashSet
最新并发集合类
多线程提升训练
生产者消费者模式扩展
Lock锁和Condition
ReadWriteLock
BlockingQueue
volatile关键字
多线程题目练习
JDK新特征
面试题详解
设计模式
设计模式入门
面向对象设计七大原则
简单工厂模式
工厂方法模式
单例模式
原型模式
装饰模式
适配器模式
外观模式
第二阶段:数据库MySQL基础
数据库基础知识
MySQL基础知识
MySQL8新特征
安装和卸载MySQL8
使用navicat访问数据库
SQL语言入门
创建数据库表
DML
修改删除数据库表
表的完整性约束
表的外键约束
DML扩展
MySQL 查询语句
基本select查询
where子句
函数
group by
having
SQL99-内连接查询
SQL99-外连接查询
SQL99-自连接查询
SQL92-连接查询
不相关子查询
相关子查询
分页查询
数据库对象
索引
事务及其特征
事务的并发问题
事务的隔离级别
存储过程
导入导出数据
JDBC
JDBC概述
使用JDBC完成添加/更新/删除 *** 作
使用JDBC完成查询 *** 作
JDBC常用接口
使用PreparedStatement
使用事务完成银行转账
提取DBUtil工具类
使用Properties读写属性文件
日志框架log4j
开发员工管理系统
第三阶段:JavaEE阶段
Servlet
web开发概述
B/S和C/S架构简介
>
>
Tomcat安装使用
Tomcat目录结构
Servlet概述
Servlet快速入门
Servlet生命周期
读取配置文件信息
>
>
GET和POST区别
解决中文乱码
请求转发与重定向
绝对路径和相对路径
Cookie
Session
ServletContext
ServletConfig
JSP
JSP技术介绍
JSP的执行过程
scriptlet
表达式
声明
JSP指令元素
JSP动作元素
JSP隐式对象
JSP底层原理
九大内置对象
四个作用域
Servlet和JSP的关系和区别
MVC模式
合并Servlet
JavaScript
JavaScript概述与特点
JS基础语法
函数
数组
Math对象
String对象
Date对象
事件event
浏览器开发者工具
console
DOM和BOM
window
location
navigator
history
认识DOM
DOM获取元素
jQuery
jQuery简介及快速入门
jQuery入口函数
jQuery对象与DOM对象互相转换
基本选择器
属性选择器
位置选择器
表单选择器
内容选择器
jQuery事件
jQuery动画效果
DOM *** 作- *** 作文本
DOM *** 作- *** 作属性
DOM *** 作- *** 作元素
直接 *** 作CSS样式
*** 作CSS类样式
购物车案例
表单验证
正则表达式
EL+JSTL+过滤器+监听器
EL介绍及使用
EL取值原理
EL隐含对象
EL逻辑运算
JSTL介绍-核心标签库
JSTL核心标签库
JSTL-格式标签库
Filter原理
Filter生命周期
Filter链
Filter登录验证
Filter权限控制
Listener概述及分类
Listener监听在线用户
Ajax和JSON
Ajax异步请求和局部刷新的原理
使用原生Ajax验证用户唯一性
jQuery Ajax
JSON的格式和使用
主要JSON解析器
Jackson的使用
Jackson的实现原理
使用jQuery Ajax实现三级联动
使用jQuery Ajax实现自动补全
分页和文件上传/下载
分页的意义
理解分页工具类
实现基本分页
实现带查询的分页
文件上传原理
文件上传API
实现文件上传
文件下载原理
文件下载响应头
实现文件下载
第四阶段:框架阶段
MyBatis
MyBatis概述
MyBatis入门配置
基本的CRUD *** 作
核心配置文件详解
Mapperxml基础详解
模糊查询
分页的实现及插件PageHelper的使用
动态sql+sql片段的使用
一对多、多对一的关系处理
注解的使用
一级缓存和二级缓存说明及使用
generator逆向工程使用
Spring
Spring框架简介
Spring官方压缩包目录介绍
Spring环境搭建
IoC/DI容器详解
Spring创建Bean的三种方式
scope属性讲解
Spring中几种注入方式
静态代理设计模式
动态代理设计模式
AOP详解
AOP中几种通知类型
AOP两种实现方式
自动注入
声明式事务
事务传播行为
事务隔离级别
只读事务
事务回滚
基于注解式配置
常用注解
Spring 整合MyBatis
i18n
Spring整合Junit
SpringMVC
MVC架构模式
手写MVC框架
SpringMVC简介
SpringMVC运行原理
基于配置文件方式搭建环境
基于注解方式搭建环境
SpringMVC的跳转及视图解析器的配置
SpringMVC和Ajax的交互
Spring 参数注入
SpringMVC作用域传值
视图解析器
文件下载
文件上传
Spring拦截器/拦截器栈
登录状态验证
SpringMVC容器和Spring容器介绍
异常处理4种方式
SpringMVC5其他常用注解
Maven
Maven简介
Maven原理
Linux安装及注意事项
Maven项目结构
POM模型
Maven 中项目类型
创建WAR类型的Maven项目
scope属性可取值
SSM项目拆分演示
Maven的常见插件讲解
热部署
BootStrap
BootStrap概述
BootStrap栅格系统
BootStrap常用全局CSS样式
常用组件
常用JavaScript插件
RBAC
RBAC概述
RBAC发展历史
基于RBAC的数据库表设计
URL拦截实现
动态菜单实现
密码学
第五阶段:前后端分离阶段
Spring Boot
Spring Boot简介
Spring Boot实现Spring MVC
配置文件顺序及类型讲解
Spring Boot项目结构
Spring Boot 整合MyBatis
Spring Boot 整合Druid
Spring Boot 整合PageHelper
Spring Boot 整合logback
Spring Boot 整合JSP
Spring Boot 整合Thymeleaf
Spring Boot 开发者工具
Spring Boot 异常显示页面
Spring Boot 整合Junit4
Spring Boot 项目打包部署
Spring Boot 整合Quartz
Spring Boot 中Interceptor使用
Spring Boot Actuator
HikariCP
Logback
Logback简介
Logback依赖说明
Logback 配置文件讲解
Logback 控制台输出
Logback 文件输出
Logback 数据库输出
Spring Security
Spring Security简介
Spring Security架构原理
什么是认证和授权
基础环境搭建
自定义认证流程
UserDetailsService和UserDetails
PasswordEncoder
自定义认证结果
授权-访问路径匹配方式
授权-权限管理
基于注解实现权限管理
Thymeleaf整合Security权限管理
Rememberme 实现
退出实现
CSRF
Linux - CentOS 8
Linux简介
VMWare安装及使用
Linux安装及注意事项
Linux目录结构及路径
Linux常用命令
VMWare常用配置
XShell安装及使用
Xftp安装及使用
JDK解压版配置步骤
Tomcat配置步骤
安装MySQL
WAR包部署
Docker
Docker简介
Docker与VM对比
Docker特点
Docker架构
Docker安装与启动
镜像加速配置
Docker镜像 *** 作常用命令
Docker容器 *** 作常用命令
DockerFile
搭建本地镜像仓库
推送镜像到阿里云及本地仓库
Docker容器生命周期
Docker数据管理
Redis
Redis简介
Redis 单机版安装
Redis 数据类型介绍
Redis 常用命令
Redis 持久化方案
Redis 的主从搭建
Redis的哨兵搭建
Redis 的集群搭建
Spring Boot整合Spring Data Redis
Redis的缓存穿透
Redis的缓存雪崩
Redis的缓存击穿
Vue
vsCode和插件安装
webpack介绍
Vue项目创建
Vue模板语法
Vue条件渲染
Vue列表渲染
Vue事件处理
Vue计算属性
Vue Class与Style
Vue表单处理
Vue组件
Vue组件生命周期
Vue 路由配置
Vue Axios网络请求
Vue跨域处理
Vue Element
Mockjs
Swagger
Swagger2简介
Springfox
Swagger2基本用法
Swagger-UI用法
Swagger2配置
Swagger2常用配置
Git/GitEE
Git的下载和安装
Git和SVN对比
Git创建版本库
Git版本控制
Git远程仓库
Git分支管理
Git标签管理
GitEE建库
GitEE 连接及使用
GitEE 组员及管理员配置
第六阶段:微服务架构
FastDFS
分布式文件系统概述
FastDFS简介
FastDFS架构
Tracker Server
Storage Server
FastDFS安装
安装带有FastDFS模块的Nginx
Fastdfs-java-client的使用
创建Fastdfs-java-client工具类
实现文件上传与下载
KindEditor介绍
通过KindEditor实现文件上传并回显
RabbitMQ
AMQP简介
RabbitMQ简介
安装Erlang
安装RabbitMQ
RabbitMQ原理
Spring Boot 集成RabbitMQ
RabbitMQ的交换器
Spring AMQP的使用
Spring Cloud Netflix Eureka
Eureka简介
Eureka和Zookeeper 对比
搭建Eureka注册中心
Eureka 服务管理平台介绍
搭建高可用集群
集群原理
Eureka优雅停服
Spring Cloud Netflix Ribbon
Ribbon简介
集中式与进程内负载均衡区别
Ribbon常见的负载均衡策略
Ribbon的点对点直连
Spring Cloud OpenFeign
Feign简介
Feign的请求参数处理
Feign的性能优化
配置Feign负载均衡请求超时时间
Spring Cloud Netflix Hystrix
Hystrix简介
服务降级
服务熔断
请求缓存
Feign的雪崩处理
可视化的数据监控Hystrix-dashboard
Spring Cloud Gateway
Spring Cloud Gateway简介
Gateway基于配置文件实现路由功能
Gateway基于配置类实现路由功能
Gateway中内置过滤器的使用
Gateway中自定义GatewayFilter过滤器的使用
Gateway中自定义GlobalFilter过滤器的使用
Gateway中使用过滤器实现鉴权
Gateway结合Hystrix实现熔断功能
Spring Cloud Config
什么是分布式配置中心
创建配置中心服务端
创建配置中心客户端
基于Gitee存储配置文件
基于分布式配置中心实现热刷新
Spring Cloud Bus
什么是消息总线
基于消息总线实现全局热刷新
ELK
ElasticSearch介绍
ElasticSearch单机版安装
ElasticSearch集群版安装
ElasticSearch索引管理
ElasticSearch文档管理
ElasticSearch文档搜索
SpringDataElasticSearch访问ElasticSearch
LogStash介绍
基于LogStash收集系统日志
TX-LCN
分布式事务简介
分布式事务两大理论依据
分布式事务常见解决方案
LCN简介
TX-LCN的3种模式
LCN原理
LCN环境搭建及Demo演示
Nginx
Nginx的简介
什么是正向代理、反向代理
Nginx的安装
Nginx配置虚拟主机
Nginx配置服务的反向代理
Nginx的负载均衡配置
Spring Session
Spring Session介绍
通过Spring Session共享session中的数据
通过Spring Session同步自定义对象
Spring Session的Redis存储结构
设置Session失效时间
Spring Session序列化器
MyBatis Plus
MyBatis Plus简介
Spring整合MyBatis Plus
MyBatis Plus的全局策略配置
MyBatis 的主键生成策略
MyBatis Plus的CRUD *** 作
条件构造器EntityWrapper讲解
MyBatis Plus的分页插件配置
MyBatis Plus的分页查询
MyBatis Plus的其他插件讲解
MyBatis Plus的代码生成器讲解
MyBatis Plus的公共字段自动填充
ShardingSphere
简介
数据库切分方式
基本概念
MySQL主从配置
切片规则
读写分离
实现分库分表
第七阶段:云服务阶段
Kafka
Kafka简介
Kafka架构
分区和日志
Kafka单机安装
Kafka集群配置
自定义分区
自动控制
Spring for Apache Kafka
Zookeeper
Zookeeper简介和安装
Zookeeper 数据模型
Zookeeper 单机版安装
Zookeeper常见命令
ZClient *** 作Zookeeper
Zookeeper 集群版安装
Zookeeper 客户端常用命令
Zookeeper分布式锁
RPC
什么是分布式架构
什么是RFC、RPC
>
RestTemplate
RMI实现RPC
基于Zookeeper实现RPC 远程过程调用
Dubbo
SOA架构介绍
Dubbo简介
Dubbo结构图
Dubbo注册中心
Dubbo 支持的协议
Dubbo 注册中心搭建
Spring Boot 整合 Dubbo
Admin管理界面
Dubbo 搭建高可用集群
Dubbo 负载均衡
Spring Cloud Alibaba Dubbo
Spring Cloud Alibaba Dubbo简介
基于Zookeeper发布服务
基于Zookeeper订阅服务
实现远程服务调用处理
Spring Cloud Alibaba Nacos
Spring Cloud Alibaba Nacos简介
搭建Nacos服务器
基于Nacos发布|订阅服务
实现远程服务调用处理
Nacos Config配置中心
Spring Cloud Alibaba Sentinel
Spring Cloud Alibaba Sentinel简介
搭建Sentinel服务器
Sentinel-实时监控
Sentinel-簇点链路
Sentinel-授权规则
Sentinel-系统规则
@SentinelResource注解
持久化规则
Spring Cloud Alibaba Seata
Spring Cloud Alibaba Seata简介
搭建Seata服务器
Seata支持的事务模式-AT模式
Seata支持的事务模式-TCC模式
Seata支持的事务模式-Saga模式
Seata支持的事务模式-XA模式
SeataAT事务模式应用方式
SeataTCC事务模式应用方式
(1) 连通性:
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
(2) 健壮性:
监控中心宕掉不影响使用,只是丢失部分采样数据
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
服务提供者无状态,任意一台宕掉后,不影响使用
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
(3) 伸缩性:
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)