负载均衡算法随机
调用关系如上图(简化了公网->防火墙处理),适合场景:所有服务器性能基本一致,且无超阈值流量。
12345private K doSelect(List<K> nodes, String ip) { // 在列表中随机选取一个节点 int index = random.nextInt(nodes.size()); return nodes.get(index);}
如果存在部分机器性能更优,此时可以在随机基础上增加权重,升级为:随机权重算法。
12345678910111213141516171819202122private K doSelect(List<K> nodes, String ip) { int length = nodes.size(); AtomicInteger totalWeight = new AtomicInteger(0); for (K node : nodes) { Integer weight = node.ge ...
Nacos集群搭建1.集群结构图官方给出的Nacos集群图:
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。
我们计划的集群结构:
三个nacos节点的地址:
节点
ip
port
nacos1
192.168.150.1(本地IP地址,不是写死的)
8845
nacos2
192.168.150.1(本地IP地址,不是写死的)
8846
nacos3
192.168.150.1(本地IP地址,不是写死的)
8847
此处的IP是你自己服务的IP,不一定要按照我的来
2.搭建集群搭建集群的基本步骤:
搭建数据库,初始化数据库表结构
下载nacos安装包
配置nacos
启动nacos集群
nginx反向代理
2.1.初始化数据库Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库可以参考传智教育的后续高手课程。
这里我们以单点的数据库为例来讲解。
首先新建一个数据库,命名为nacos,而后导入下面的SQL: ...
上一篇文章地址:SpringCloud大集合01
Nacos注册中心国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。
5.1.认识和安装NacosNacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
安装方式可以参考课前资料《Nacos安装指南.md》
5.2.服务注册到nacosNacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。
主要差异在于:
依赖不同
服务地址不同
1)引入依赖在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖:
1234567<dependency> <groupId>com.alibaba.cloud</gr ...
上一篇文章地址:SpringCloud大集合01
Nacos安装指南1.Windows安装开发阶段采用单机安装即可。
1.1.下载安装包在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
如图:
本课程采用1.4.1.版本的Nacos,课前资料已经准备了安装包:
windows版本使用nacos-server-1.4.1.zip包即可。
1.2.解压将这个包解压到任意非中文目录下,如图:
目录说明:
bin:启动脚本
conf:配置文件
1.3.端口配置Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:
修改其中的内容:
1.4.启动启动非常简单,进入bin目录,结构如下:
然后执行命令 ...
4.Ribbon负载均衡
上一篇文章地址:Eureka注册中心上一节中,我们添加了@LoadBalanced注解,即可实现负载均衡功能,这是什么原理呢?
4.1.负载均衡原理SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。
那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢?
4.2.源码跟踪为什么我们只输入了service名称就可以访问了呢?之前还要获取ip和端口。
显然有人帮我们根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor,这个类会在对RestTemplate的请求进行拦截,然后从Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。
我们进行源码跟踪:
1)LoadBalancerIntercepor
可以看到这里的intercept方法,拦截了用户的HttpRequest请求,然后做了几件事:
request.getURI():获取请求uri,本例中 ...
3.Eureka注册中心
上一篇文章地址:SpringCloud大集合01承接上一篇文章,这次单独开了一篇文章来理解Eureka。
假如我们的服务提供者user-service部署了多个实例,如图:
大家思考几个问题:
order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?
有多个user-service实例地址,order-service调用时该如何选择?
order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?
3.1.Eureka的结构和作用这些问题都需要利用SpringCloud中的注册中心来解决,其中最广为人知的注册中心就是Eureka,其结构如下:
回答之前的各个问题:
问题1:order-service如何得知user-service实例地址?
获取地址信息的流程如下:
user-service服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端)。这个叫服务注册
eureka-server保存服务名称到服务实例地址列表的映射关系
order- ...
所有资料下载地址:https://dlink.host/1drv/aHR0cHM6Ly8xZHJ2Lm1zL3UvcyFBaVlDNncwZHotYlJkY21ZYnpGRHNHSk5MSXc_ZT13NVZxYWw.zip
1.认识微服务随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
1.0.学习目标了解微服务架构的优缺点
1.1.单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
单体架构的优缺点如下:
优点:
架构简单
部署成本低
缺点:
耦合度高(维护困难、升级困难)
1.2.分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
分布式架构的优缺点:
优点:
降低服务耦合
有利于服务升级和拓展
缺点:
服务调用关系错综复杂
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
服务拆分的粒度如何界定?
服务之间如何调用?
服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架 ...
任务背景一、真实案例公司现在需要做MySQL数据库迁移,之前数据库是一主两从,使用MHA做了高可用,跑在私有云平台,现在需要这三台数据库迁移到物理机上,而且云上的数据库正在跑,希望做到热迁移,即不影响业务的情况下,把现有数据库从私有云平台迁移到物理真机上。
二、案例背后核心技术1、熟悉MHA高可用的原理和部署
2、掌握MySQL数据库的迁移
3、熟悉MySQL主从复制的模式和搭建(基于GTIDs)
三、今日场景随着业务功能的逐步完善,现有MySQL数据库架构虽然可以保障数据的相对可靠性,但是不能够完全保障==服务的可用性。==当我们的主库挂掉后,mysql服务不能立马切换到从服务器。所以,需要在现有架构的基础上==扩展和升级,==进而在保障数据的可靠性的同时能够保障服务的可用性。
任务要求
1、使用三台服务器搭建mysql的复制组
2、使用==MHA==管理复制组,当master挂掉后,会立马提升一台slave作为新的master
任务拆解
搭建MySQL的复制组 ...
任务背景一、真实案例 某天,公司领导安排刚入职不久的小冯同学将生产环境中的数据(MySQL数据库)全部导入到测试环境给测试人员使用。当小冯去拿备份数据时发现,备份数据是1个礼拜之前的。原因是之前运维同事通过脚本每天对数据库进行备份,根据结果判断应该是脚本的问题导致备份失败。于是乎,领导让小冯重新制定备份策略对数据库进行备份,并且把数据导入到测试环境。
二、案例背后的核心技术 1)掌握MySQL的备份工具使用及各自特点
2)熟悉SHELL脚本
3)熟悉MySQL数据的导入导出
三、今日任务场景“手里有粮,心里不慌,数据有备,喜气洋洋”。对于重要的数据做好备份,是我们每个运维人员和DBA的重要职责。备份只==是一种手段==,我们最终目的是当数据出现问题时能够及时的通过备份==进行恢复==。所以,现在需要你对我们现有的MySQL数据库进行==备份策略的制定==以及实施。
任务要求
选择==合适的工具==和= ...
任务背景一、真实案例 某同学刚入职公司,在熟悉公司业务环境的时候,发现他们的数据库架构是一主两从,但是两台从数据库和主库不同步。询问得知,已经好几个月不同步了,但是每天会全库备份主服务器上的数据到从服务器上,由于数据量不是很大,所以一直没有人处理主从不同步的问题。这次正好问到了,于是乎就安排该同学处理一下这个主从不同步的问题。
二、案例背后核心技术1、熟悉MySQL数据库常见的主从架构
2、理解MySQL主从架构的实现原理
3、掌握MySQL主从架构的搭建
三、今日任务场景 随着业务量不断增长,公司对数据的安全性越来越重视,由于常规的备份不能够实时记录下数据库的所有状态,为了能够保障数据库的实时备份冗余,希望将现有单机数据库变成双机热备。
任务要求
备份数据库
搭建双机热备数据库架构M-S
课程目标
了解什么是MySQL的Replication
理解MySQL的Replication的架构原理
==掌握MySQL的基本复制架构的搭建(M-S重点==)
了解和掌握基于GTIDs的复制特点及搭建
理论储备一、MySQL集群概述1、 ...






