redis

redis产生

redis是MySQL数据库经常直接面对大量的读写访问,面对比较复杂的数据据操作,会导致数据库I/O反映缓慢或者奔溃;

有人研究学习CPU从内寸直接读取数据,把MYSQL经常访问的数据缓冲到内存中,先通过redis访问内存读取数据返回数据,没有再去关系型数据库查

Docker简述

Docker是什么

  • 官方概念:Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上

  • 个人理解:好比如一台机器上,运行了3个docker, 每个docker里面分别运行着nginx,php和mysql。你想把这台机器上的nginx,php和mysql部署到另外10台机器。直接执行一系列docker命令就可以了

Docker作用

  • Docker是将linux操作系统分割作为一个个容器,相比于虚拟机由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Dockers对系统的利用率更高,

  • 相比于传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主主机内核,无需启动操作系统,启动时间加快

  • Docker的镜像提供了除操作系统外完整的运行时环境,确保了应用运行环境一致性,避免操作系统不一致报错的问题。


ZooKeeper

ZooKeeper是什么

  • ZooKeeper 是一个分布式的、开源的分布式应用程序协调服务。作为一个协调服务,常常用来配合其他中间件来用,比如 Dubbo + ZooKeeper,Hadoop + Zookeeper 等。ZooKeeper 可以实现服务注册发现、分布式锁、配置中心等功能

ZooKeeper的主要功能

步骤 0 到 4 是服务注册发现的核心流程。

  • 每个服务实例启动之后将自己的信息(IP+port)写入公共区域;
  • 调用者订阅自己感兴趣的服务实例,获取服务实例信息列表后缓存在自己本地;
  • 服务实例停止或者宕掉后将公共区域自己的信息清除掉;
  • 公共区域通知调用者你感兴趣的信息已经发生变更,请更新一下本地的缓存。

ZooKeeper 的重点特性

1)树状目录结构

ZooKeeper 是一个树状的文件目录结构,与 Unix 文件系统很类似。树中每个节点可以称作为一个 znode,每一个 znode 都可以通过其路径唯一标识,最重要的是我们可以对每个 znode 进行增删改查。

2) 持久节点(Persistent)

客户端与 ZooKeeper 服务端断开连接后,节点仍然存在不会被删除。这样的节点就叫做持久节点。

3)持久有序节点(Persistent_sequential)

持久有序节点是指,在上面持久节点的特性上加上了有序性。有序性的意思是服务向 ZooKeeper 注册信息时,ZooKeeper 根据注册顺序给每个节点编号。

4)临时节点(Ephemeral)

客户端与 ZooKeeper 服务端断开连接后,该节点被删除。

注意:临时节点下不存在子节点;持久节点下可以存在临时节点。

5)临时有序节点(Ephemeral_sequential)

临时有序节点在临时节点的基础上再加上有序性,跟持久有序节点类似。

6)节点监听(Wacher)

节点监听是 ZooKeeper 最重要的特性之一。客户端可以监听任意节点,节点有任何变化 ZooKeeper 可以通过回调的方式通知给客户端。这样,客户端不用轮询就可以及时感知节点变化。

如下图所示,客户端(Client)开始监听临时节点 1,因某种原因临时节点 1 被删除了,ZooKeeper 通过回调将变化通知给 Client 了。

示例( ZooKeeper 实现服务注册发现)

业务梳理

了解了 ZooKeeper 的一些重要特性,我们再来看下 ZooKeeper 是如何实现服务注册和发现的。还是以订单服务、用户服务的场景为例。

服务提供方(用户服务)启动成功后将服务信息注册到 ZooKeeper,服务信息包括实例的 IP、端口等元信息。注册成功 ZooKeeper 还可以通过心跳监测来动态感知实例变化,详细的过程这里不展开。

服务消费方(订单服务)需要调用用户服务的接口,但因为不知道实例的 IP、端口等信息,只能从 ZooKeeper 中获取调用地址列表,然后进行调用,这个过程成为服务的订阅。

订阅成功后服务消费方可以将调用列表缓存在本地,这样不用每次都去调用 ZooKeeper 获取。一旦 ZooKeeper 感知到用户服务实例变化后就会通知给服务消费方,服务消费方拿到结果后就会更新本地缓存,这个过程称之为通知。

服务注册原理

服务启动后会自动向 ZooKeeper 注册,注册的规则如下:

每个服务会创建一个持久节点和若干个临时节点。比如用户服务首先创建一个持久节点 user,然后每个服务实例会在持久节点下创建一个临时有序节点。

服务动态发现原理

由于订单服务需要调用用户服务的接口,所以订单服务会订阅 user 节点。一旦用户服务有变化(增加实例或者减少实例),ZooKeeper 都会将最新的列表信息推送给订单服务。这个过程就是服务动态发现的基本原理。大家直接看图:

redis 和docker等名词了解的更多相关文章

  1. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  2. Redis in Docker on Linux Container

    记录:在Docker中运行一个Redis实例当我们在Windows系统中安装好Docker以后,在Hyper-V中会自动创建一个Linux虚拟机,如果这个虚拟机没有运行,说明当前运行的是Windows ...

  3. Redis的Docker镜像

    原文地址:https://hub.docker.com/_/redis/ Pull Command docker pull redis Short Description Redis is an op ...

  4. mysql|tomcat|nginx|redis在docker中的部署

    MySQL部署 拉取MySQL镜像 docker pull mysql 查看镜像 创建MySQL容器 docker run -di --name pinyougou_mysql -p 33306:33 ...

  5. redis 连接 docker容器 6379端口失败

    redis部署在docker容器中Could not connect to Redis 容器内redis-cli是可以直接连上的,但是在另一台服务器上就不能用外网ip来连了 虽然我创建redis容器时 ...

  6. redis 的 docker 镜像使用

    redis 镜像使用: 创建容器(暴露端口:6379,使用 Redis 可视化界面工具(如:Fastoredis)连接 redis 时连接该端口): docker run -it -p 6379:63 ...

  7. 在Windows上弄一个redis的docker容器

    [本文出自天外归云的博客园] Docker核心概念简介 镜像是一个面向docker引擎的只读模板,包含了文件系统. 镜像是创建容器的基础,容器类似于一个沙箱,用来运行和隔离应用. 容器是从镜像创建的应 ...

  8. redis的docker化安装

    只需要关注几点: 端口映射 配置文件映射 持久化映射 要做的就是拉取官方镜像并把关注的几个点处理一下就好了: docker pull redis docker run -d -p : -v /data ...

  9. 手写redis的docker文件,通过docker-compose配置redis

    在前面一遍随笔,配置的是mysql主从的docker-compose配置.今天我们来学习配置编排容器redis. 准备环境: docker 18.06.1-ce docker-compose 1.23 ...

  10. 最简单的启动并连接一个redis的docker容器

    启动一个容器: $ sudo docker run --name <name> -d redis 连接一个容器: sudo docker run -it --link <name&g ...

随机推荐

  1. stm32 出入栈

    Start.S 一般指定栈顶指针及栈大小 1.硬件中断 有硬件入栈和软件入栈部分 硬件入栈寄存器:   R0,R1,R2,R3,R12,PSR 软件入栈寄存器:   r4 - r11 2.程序切换入栈 ...

  2. 谷歌浏览器console.log打印失效问题

    什么都没干,谷歌浏览器console.log就失效了,百度说如下图就能打印了,该勾选的勾选了,就是打印无效 后来发现是眼睛边上的那个输入框将打印的内容给过滤掉了,将输入框中的内容删掉就好了 Filte ...

  3. 如何写出不可维护的Vue代码

    前言 不止一次接手过复杂业务功能模块,开端总是深陷其中难以自拔,无数个深夜抚摸着头皮在内心暗暗咒骂. 相信你也有过类似的经历,面对复杂的业务逻辑,看代码俩小时,写代码五分钟,没有点胆识和谋略都不敢下手 ...

  4. java springboot项目树结构递归查询

    记录工作 本文记录树结构递归查询,像菜单栏和部门 首先需要一张表 CREATE TABLE `sys_dict` ( `id` int NOT NULL AUTO_INCREMENT, `parent ...

  5. List循环问题

    list循环时的问题,报错,称找不到该字段属性,原因如下: 1.字段名与toString里不匹配: 2.首字母大写了: 原回答:https://blog.csdn.net/qq_42671193/ar ...

  6. ts-基础

    1. 定义变量// 将b赋值为 hello,只能是 hello或者 wowrldlet b : "hello" | "world" // 设置变量c只能为num ...

  7. 【Java】@Scheduled注解各参数详解

    每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? 每天凌晨1点执行一次:0 0 1 * * ? 每月1号凌晨1 ...

  8. 第五章:用Python分析商品退单数据并找出异常商品

    文章目录 项目背景 获取数据 数据计算 统计次数 异常商品 源码地址 本文可以学习到以下内容: 使用 pandas 中的 read_sql 读取 sqlite 中的数据 获取指定的日期的周一和周日 使 ...

  9. Linux 第十节( APACHE )

    Apache   基金会,软件 http 协议 httpd  软件包 vim /etc/httpd/conf/httpd.conf   //网站配置主文件 systemctl restart http ...

  10. 前端之Vue day08 Vue3项目搭建、setup、toRefs

    一.Vue3 介绍 # 新项目使用vue3,有部分老项目使用vue2 # vue3 的变化 1.性能的提升 -打包大小减少41% -初次渲染快55%, 更新渲染快133% -内存减少54% 2.源码的 ...