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. Mysql数据库基础第五章:(一)事务

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  2. Springboot2.0解决跨域问题

    解决办法: import org.springframework.context.annotation.Configuration; import org.springframework.web.se ...

  3. js 页面小数相加精度问题

    解决方法:把需要计算的数字升级(乘以10的n次幂)成计算机能够精确识别的整数,等计算完毕再降级(除以10的n次幂),这是大部分编程语言处理精度差异的通用方法. 比如计算0.33和5.2的和,则需要把( ...

  4. server2008 安装mongodb

    1.下载指定版本 3.6.23  zip压缩文件 ,似乎高版本已经不支持在server2008了! 下载地址:https://www.mongodb.com/try/download/communit ...

  5. task 子线程添加数据到主线程 winfrom

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. APP稳定性测试Monkey工具介绍

    一.Monkey工具简介 1.monkey的来源: Monkey是一个命令行工具,使用安卓调试桥(adb)来运行它,模拟用户:触摸屏幕.滑动Trackball.按键等随机事件流来对设备上的程序进行压力 ...

  7. dayjs取 本周、上周、本月、上月、本季度、上季度时间段

    let dateTimes = [ { id: 1, name: '本周', start_time: dayjs().startOf('week').add(1, 'day').format('YYY ...

  8. .net core格式化响应数据(json驼峰格式)

    //表格字段都是大写的 想要实现首字母小写(特定操作配置输出序列化选项)[HttpPost, ActionName("QueryAll")] public ActionResult ...

  9. hdu 4283You Are the One

    The TV shows such as You Are the One has been very popular. In order to meet the need of boys who ar ...

  10. VUE 打包正则报错:Error parsing regular expression: Invalid regular expression:

    需要用new RegExp代替// 如: num = num.replace(/(?<=\d\.\d{2})./, '');换成 let reg = new RegExp("(?< ...