-
Redis多种部署方式及交互原理
2020-06-07 23:06:16Redis作为目前使用较为广泛的中间件之一,大量使用于缓存、分布式锁、业务排行榜甚至是持久化的场景中,性能及可用性是我们关注的重点,本文主要探索Redis部署的几种方式及交互原理。 部署方式 单节点  ...前言
Redis作为目前使用较为广泛的中间件之一,大量使用于缓存、分布式锁、业务排行榜甚至是持久化的场景中,性能及可用性是我们关注的重点,本文主要探索Redis部署的几种方式及交互原理。
部署方式
单节点
单节点(standalone)模式即在操作系统实例中单节点启动Redis进程如下图,暴露对应的服务端口号即可。缺点也比较明显,既无法保证高可用,也无法很好的支持横向扩展(只能增加宿主机配置)。
主从部署
主从(master-slave)部署的方式如下图,一个master节点和n个slave节点,其中slave也可以有更多的slave节点,主从之间同步分为全量或增量。全量同步:master节点通过BGSAVE生成对应的RDB文件,然后发送给slave节点,slave节点接收到写入命令后将master发送过来的文件加载并写入;增量同步:即在master-slave关系建立开始,master每执行一次数据变更的命令就会同步至slave节点。;在主从架构中,客户端针对写请求转发至master节点,读请求多走slave节点。相对于单节点部署,主从架构提高了Redis的性能。
哨兵
哨兵(Sentinel)部署方式如下图,分别有哨兵集群与Redis的主从集群,哨兵作为操作系统中的一个监控进程,对应监控每一个Redis,如果master服务异常(ping pong其中节点没有回复且超过了一定时间),就会多个哨兵之间进行确认,如果超过一半确认服务异常,则对master服务进行下线处理,并且选举出当前一个slave节点来转换成master节点;如果slave节点服务异常,也是经过多个哨兵确认后,进行下线处理;相对于前面的单节点、主从,哨兵的部署方式使redis集群有了高可用的特性,但横向扩展能力依然是强依赖于宿主机。
集群
Redis官方集群(cluster)部署方式如下图,属于“去中心化”的一种方式,多个master节点保存整个集群中的全部数据,而数据根据key进行crc-16校验算法进行散列,将key散列成对应16383个slot,而Redis cluster集群中每个master节点负责不同的slot范围。每个master节点下还可以配置多个slave节点,同时也可以在集群中再使用sentinel哨兵提升整个集群的高可用性。
对于Redis客户端来读写数据的流程,如常用的jedis客户端,首先获取集群中机器列表,然后随机向其中一个master节点发起数据读写请求,master节点接收到后,如果该key的校验后slot为自身的范围则直接进行操作,否则给jedis客户端返回一个重定向的异常,客户端便会连接正确的节点进行接下来的操作。
而由于Redis cluster中每个master节点对应的hash slot都是在集群建立时定死的即预分片效果,因此在对集群中增加节点、移除节点时注意相应的操作顺序(个人觉得Redis集群是分布式hash一致性算法的最佳实践场景,没有使用这个,但是官方推荐使用一些插件和开源代理中有相应的实现方案):
增加节点
- 增加对应机器配置;
- 分配对应slot;
- 进行slot数据迁移;
移除节点
- 将对应节点slot key进行迁移至目标slot的节点;
- 移除机器;
除此之外,由于集群中每个节点负责不同的slot,因此之前的单节点、主从等方式部署的集群中我们使用的批量操作Mget、Mset等不再集群模式下支持。Redis cluster部署模式很好的解决了Redis横向扩展的瓶颈问题。
阿里云Redis集群
我们当前使用的是阿里云集群,使用方式既可以是代理模式,也可以直连集群中的节点。代理模式在我们使用的视角中就相当于是非集群的直连master节点,并且也可以支持批量操作命令如Mget、Mset等,不用在使用jedis客户端时使用集群方式连接,并且与对应key slot节点的交互也全都proxy代理完成。
阿里云集群不仅在横向扩展方面有着优秀的快速升配方案,而且在可用性上,有着跨机房、地域的灾备方案,即master节点下的slave节点会在多处部署,master出现异常时进行替换。结语
本文探索了Redis 多种部署方式及其优劣性,为以后的选型及中间件配置选取可以提供相应参考。
参考
阿里云文档:
https://help.aliyun.com/document_detail/52228.html?spm=a2c4g.11186623.2.21.4ca07d2cKuofBV#section-h69-izd-531redis多种部署实践:
https://blog.csdn.net/xxssyyyyssxx/article/details/72831909#comments_12414256redis官网集群模式:
https://redis.io/topics/cluster-tutorial/ -
ESP8266与手机交互(多种方式)
2020-07-13 15:48:02一、原料 硬件:①esp8266-wifi模块②usb转ttl③5v转3.3v模块④杜邦线 软件:安卓下安装...3、模块与手机交互 手机端发送数据 串口工具接收数据后显示 串口工具发送数据AT+CIPSEND 手机接收到数据 -
多种方式实现JS调用后台方法进行数据交互
2020-12-11 12:48:25项目开发过程中很多地方都需要前端和后台的数据交互,几种典型常用的方法如利用控件的AutopostBack属性、Button提交表单等等。但这些都是有条件的,AutoPostBack具有实时性但会刷新页面,Button提交表单不能实现数据... -
VTK之交互方式(interactor style)
2015-04-27 17:27:33VTK提供了多种交互方式,最常用的包括joystick和trackball,并且可以分别对actor和camera进行操作。 在VTK中,可以通过集成已有的交互方式类,然后添加自己的功能,则可以完成在触发响应时,完成响应的操作。 ...VTK提供了多种交互方式,最常用的包括joystick和trackball,并且可以分别对actor和camera进行操作。
在VTK中,可以通过集成已有的交互方式类,然后添加自己的功能,则可以完成在触发响应时,完成响应的操作。
以下是自定义交互方式类的一个实例。该实例实现的是对鼠标点击的物体进行高亮显示。
#include <vtkVersion.h> #include <vtkSmartPointer.h> #include <vtkMath.h> #include <vtkActor.h> #include <vtkProperty.h> #include <vtkSphereSource.h> #include <vtkInteractorStyleTrackballCamera.h> #include <vtkObjectFactory.h> #include <vtkSphereSource.h> #include <vtkPolyDataMapper.h> #include <vtkPropPicker.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> // Handle mouse events class MouseInteractorHighLightActor : public vtkInteractorStyleTrackballCamera { public: static MouseInteractorHighLightActor* New(); vtkTypeMacro(MouseInteractorHighLightActor, vtkInteractorStyleTrackballCamera); MouseInteractorHighLightActor() { LastPickedActor = NULL; LastPickedProperty = vtkProperty::New(); } virtual ~MouseInteractorHighLightActor() { LastPickedProperty->Delete(); } virtual void OnLeftButtonDown() { int* clickPos = this->GetInteractor()->GetEventPosition(); // Pick from this location. vtkSmartPointer<vtkPropPicker> picker = vtkSmartPointer<vtkPropPicker>::New(); picker->Pick(clickPos[0], clickPos[1], 0, this->GetDefaultRenderer()); // If we picked something before, reset its property if (this->LastPickedActor) { this->LastPickedActor->GetProperty()->DeepCopy(this->LastPickedProperty); } this->LastPickedActor = picker->GetActor(); if (this->LastPickedActor) { // Save the property of the picked actor so that we can // restore it next time this->LastPickedProperty->DeepCopy(this->LastPickedActor->GetProperty()); // Highlight the picked actor by changing its properties this->LastPickedActor->GetProperty()->SetColor(1.0, 0.0, 0.0); this->LastPickedActor->GetProperty()->SetDiffuse(1.0); this->LastPickedActor->GetProperty()->SetSpecular(0.0); } // Forward events vtkInteractorStyleTrackballCamera::OnLeftButtonDown(); } private: vtkActor *LastPickedActor; vtkProperty *LastPickedProperty; }; vtkStandardNewMacro(MouseInteractorHighLightActor); // Execute application. int main(int argc, char *argv[]) { int numberOfSpheres = 10; if (argc > 1) { numberOfSpheres = atoi(argv[1]); } // A renderer and render window vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer ( renderer ); // An interactor vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow ( renderWindow ); // Set the custom type to use for interaction. vtkSmartPointer<MouseInteractorHighLightActor> style = vtkSmartPointer<MouseInteractorHighLightActor>::New(); style->SetDefaultRenderer(renderer); renderWindowInteractor->SetInteractorStyle( style ); for (int i = 0; i < numberOfSpheres; ++i) { vtkSmartPointer<vtkSphereSource> source = vtkSmartPointer<vtkSphereSource>::New(); double x, y, z, radius; x = vtkMath::Random(-5,5); y = vtkMath::Random(-5,5); z = vtkMath::Random(-5,5); radius = vtkMath::Random(.5, 1.0); source->SetRadius(radius); source->SetCenter(x, y, z); source->SetPhiResolution(11); source->SetThetaResolution(21); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection ( source->GetOutputPort()); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper ( mapper ); double r, g, b; r = vtkMath::Random(.4, 1.0); g = vtkMath::Random(.4, 1.0); b = vtkMath::Random(.4, 1.0); actor->GetProperty()->SetDiffuseColor(r, g, b); actor->GetProperty()->SetDiffuse(.8); actor->GetProperty()->SetSpecular(.5); actor->GetProperty()->SetSpecularColor(1.0,1.0,1.0); actor->GetProperty()->SetSpecularPower(30.0); renderer->AddActor ( actor ); } renderer->SetBackground ( .3, .4, .5 ); // Render and interact renderWindow->Render(); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }
在VTK的示例中,对常用的交互方式,以及常用的自定义交互方式都进行了实现,各个示例的源码地址如下:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/MoveAGlyph
http://www.itk.org/Wiki/VTK/Examples/Cxx/Interaction/Game
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/TrackballActor
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/SelectAnActor
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Picking/HighlightPickedActor
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/Picking
http://stackoverflow.com/questions/27628493/vtk-interacting-with-multiple-objects
-
中国人工智能学会通讯——意识科学研究进展 1.5 多种脑机交互方式的实现
2017-09-01 17:22:001.5 多种脑机交互方式的实现 人机融合是指人和机器物理上的组合或 作用。人机融合已经有了多种形式,包括脑 信号直接与机器交互,已经实现了脑 - 机接 口(BCI)、机 - 脑接口(CBI)、脑 - 脑 接口(BBI)。此外也...1.5 多种脑机交互方式的实现
人机融合是指人和机器物理上的组合或 作用。人机融合已经有了多种形式,包括脑 信号直接与机器交互,已经实现了脑 - 机接 口(BCI)、机 - 脑接口(CBI)、脑 - 脑 接口(BBI)。此外也包括人体与物体的直 接融合、连接,人机的入侵式交互,比如电 子器件嵌入人体、人造肢体的某些神经化等 形成人机混合体。人机一体化实现了图灵和 非图灵计算、人工计算和自然计算、连续变 量处理和离散变量处理的高度融合,并实现 了在空间上生命体与非生命体、生命体之间 的在细胞和分子级别上进行通信或物质交 换,以多种方式突破了生命与非生命的界限。
脑 - 机接口是获取脑信号再进行利用, 如操控机器或记性进一步计算。一个实例如 UCBC 心理学系的实验,当实验者看某一个 图像时,脑电波波形被计算机记录下来,波 形打碎重新组合,对组合的波形编译的结果, 最后合成的图像就是这个图像,就是说计算 机根据人脑波形重新制造的图像 [32]。见图 4。
通过获取脑信号操控肢体和机器的成 功实验也出现了,如美国匹兹堡大学的安 德鲁 • 施瓦茨博士等人对两只短尾猴进行了 “意念”操纵机械臂抓取食物的实验,他们在猴子脑部运动神经皮层植入 100 个微 小电极。电极彼此形成网络,每个电极与 一个神经细胞连接,这些电极还通过计算 机与机械臂相连,当脑细胞发出某种活动 指令时,电极会将接收到的信号经计算机 处理后传送给三维机械臂,指挥其完成抓 取放在面前的葡萄等食物的任务 [33-34]。
脑 - 脑接口通讯,是将脑电波传递给计 算机,计算机把脑电波解码,进行计算机间 的通信,再通过计算机编码合成脑电波,传 递给第二个脑,让这个脑产生第一个脑类似 的思维。当前的实验实现了这一点。这个实 验在印度法国异地做的。一个在印度的人想 了一个问候的一句话,然后通过脑电波识别, 远程传送给法国,法国当地的一个人接受和 理解了这个信号。这两个人在两个国家,脑 电波进行通讯 [35],如图 5 所示,身在印度的 实验者用脑电波对位于法国的人说出了 hola 和 ciao( 西班牙语和意大利语“你好”),对 方通过脑电波理解了这个问候。
脑 - 机接口实现了以物理装置接收意识 或者以机器制造意识并使人体接受。这是意识 物理化的直接的、可经验和实证的直观证据, 并在一定程度上由意识体之间的直接交互。
-
②ESP8266与手机交互(多种方式)
2019-03-02 00:23:45说明:学习edp8266模块与手机发送与接收数据,这节为今后学习8266与8266模块的交互和使用手机控制8266模块的的目的。 一、原料 硬件:①esp8266-wifi模块②usb转ttl③5v转3.3v模块④杜邦线 软件:安卓下安装...说明:学习edp8266模块与手机发送与接收数据,这节为今后学习8266与8266模块的交互和使用手机控制8266模块的的目的。
一、原料
硬件:①esp8266-wifi模块②usb转ttl③5v转3.3v模块④杜邦线
软件:安卓下安装“有人网络助手”
二、TCP
1、AP模式下模块的tcp服务配置步骤
2、手机作为tcp客户端连接模块
3、模块与手机交互
手机端发送数据
串口工具接收数据后显示
串口工具发送数据AT+CIPSEND
手机接收到数据尝试许久之后,你会发现,这样的方式送数据是不是很麻烦,每次都要AT+CIPSEND一次才能发送一次数据。下一章将会讲一下透传模式。
三、UDP
与TCP一样的配置步骤:
模块连接好热点AT+CWJAP=”ssid”,”password”
模块设置为多连接模式AT+CIPMUX=1
手机在udp server项配置udp端口,和记录手机ip
模块进行UDP连接AT+CIPSTART=0,”UDP”,”192.168.***.***”,端口号1,端口号2
(端口号1是指手机udp server的端口号,端口号2是设置模块的端口号)会遇到的问题:
1.为什么连上udp之后,模块能收到手机数据而手机收不到模块数据,或者是手机收的到模块数据而模块收不到手机数据?
答:检查端口号1和端口号2是否写对,是否写反。 -
js调用数科阅读器_多种方式实现JS调用后台方法进行数据交互
2020-12-23 15:55:40项目开发过程中很多地方都需要前端和后台的数据交互,几种典型常用的方法如利用控件的AutopostBack属性、Button提交表单等等。但这些都是有条件的,AutoPostBack具有实时性但会刷新页面,Button提交表单不能实现数据... -
Linux应用层与内核驱动层3种交互方式
2021-01-05 10:00:14本文主要是总结出应用层与内核驱动层的主要交互方式,并提供示例代码分析交互过程。但不涉及更细节的内核代码的分析。 应用层与内核驱动层交互的方式多种多样,这里只写出了我目前理解到的3种方式,至于其它等以后再... -
Android客户端与服务器交互方式(1)
2017-06-03 09:13:45Android客户端与服务器交互方式(1)Android客户端与服务器端的数据交互有多种,最常见的就是webservice和json。为了与服务器端交互主要通过通信协议,常用的就是Http和TCP。Http基于TCP,TCP协议对应传输层,Http协议... -
费诺编码的gui页面设计_多模交互设计时该注意哪些事项?
2020-12-08 05:29:48操作对象应支持一种或多种交互方式。每种交互方式都具备“目标选中”和“目标执行”两个属性。系统或应用级别的操作型控件应考虑一种或多种交互方式。如果当前GUI界面中,不同控件的交互方式尽量保持统一,若存在... -
PowerBuilder与外界的交互方式
2011-01-01 10:44:00概述 一般来说,如果系统是一个纯粹的C/S模式的MIS应用系统,则与外部程序的交互比较少,PB本身提供的功能就足够实现所有的功能;但有的时候,当对系统的界面,性能要求比较严,或是在系统中还有很多其它的... -
轻松学习区块链4 - 区块链浏览器与人机交互
2019-05-19 23:00:26在真实的区块链项目中,一般会提供多种交互方式,比如提供客户端命令行方式、websocket方式等等,最终由区块链server提供统一的rpc服务。我们目前先实现浏览器方式,以后会逐步扩充。 Http S... -
深入理解Linux网络技术内幕——用户空间与内核空间交互
2019-09-24 22:46:44概述: ... 用户空间与内核有多种交互方式,最常用的有以下四种:通过/proc虚拟文件系统,通过/sys虚拟文件系统,通过ioctl系统调用,通过Netlink socket。 其中编写程序时最常使用ioctl,这四种方式... -
核心态和用户 态数据的交互的方式
2009-07-30 12:24:00核心态和用户 态数据的交互,有多种方式:1:可以通用socket创建特殊套接字,利用套接字实现数据交互;2:通过proc文件系统创建文件来进行数据交互;3:还可以使用设备 文件的方式,访问设备文件会调用设备驱动相应... -
Android Intent多种传值方式详解
2018-04-02 19:55:14Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互,传值的方式通过key-value传值。 Intent传参数:... -
海尔以“社群交互+用户体验”开启五一品质节
2017-04-27 16:36:24在今年五一节,海尔以“全球品质 见证经典”为主题率先在业内开启了品质家电的消费热潮,从智能家电产品升级和全流程品质体验入手,以百名网红直播和用户自主体验等多种交互方式开启了“社群交互+用户体验”的五一... -
pyqt5中的多窗口交互(数据的传输方式)
2019-11-26 11:01:24pyqt5中的多窗口数据交互有多种方式: 方式1:直接访问控件数据—一般不推荐使用(代码的耦合度高) 方式2:通过信号来传输数据,推荐使用,代码的耦合度低,可操作性强 主窗口的代码: #coding=utf8 import sys ... -
Traverser:视频游戏角色以多种不同方式与世界上的物体互动。 他们爬上,跳下并抓住物体。 他们在冰上滑行...
2021-02-08 23:34:47电子游戏角色以多种不同方式与世界上的物体互动。 他们爬上,跳下并抓住物体。 他们在冰上滑行,然后潜入水中。 这项工作背后的想法是提供一个模块化且易于使用的框架,以简化创建所有这些不同交互的过程。 注意:... -
前端多种跨域方式实现原理详解
2020-04-08 16:51:52跨域是我们在项目中经常遇到的,前后端数据交互经常碰到请求跨域,首先我们来想一下为什么会有跨域这个词的出现?本文带你来探讨一下以下几个问题: 跨域是什么? 为什么要跨域? 跨域的几种方式? … 什么是跨域... -
Shell脚本的多种执行方式解析
2017-04-12 13:13:12当shell脚本以非交互的方式运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(通常是.bashrc),然后从该环境变量文件开始执行,当读取了ENV文件之后,SHELL才开始执行shell脚本中的内容。(所以全局变量可以... -
Spring boot Security 多种登录方式混合?
2018-10-19 14:58:31微信小程序使用spring boot 做 服务器后台,通过rest_api交互,用户小程序登录后可以利用jwt 来保护rest api 和一此网站资源。 另外也使用相同的spring boot 程序开发一个让管理员使用的后台,如管理微信用户在小... -
关于实现移动终端间互通信及相应交互方式的简单设想——畅想一个信息自由流动的时代
2012-10-28 21:39:56许多新的设备如雨后春笋般层出不穷,但总体来看,他们都有一些共同的特性,那就是具备高清晰的显示能力,屏幕比较大、有良好的视觉效果,支持友好的触摸交互方式,带有很多新式的传感器模块,如GPS,温度感应器、... -
退出python交互式环境的方式是_Python学习教程(Python学习路线):教你如何在交互式环境中执行Python程序....
2020-12-12 14:19:59Python学习教程(Python学习路线):教你如何在交互式环境中执行Python程序相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行、命令行窗口运行、开发工具上运行等,... -
Mysql多种备份数据方式
2020-04-09 15:56:30命令行中使用非交互式数据库密码备份数据 备份一个库,命令格式如下: [root@frp mnt]# mysqldump -u 数据库中的用户名 -p 备份数据库的库名 > /本地主机物理路径/数据库备份文件名称.sql Enter password: 输入... -
python借助web3py与以太坊区块链节点交互的几种方式
2018-10-11 08:54:18通信服务提供接口是web3如何与区块链交互的关键。接口接受JSON-RPC请求并返回响应。... 如果你已经愉快地连接到你...大多数节点都有多种连接方式。如果你尚未确定要使用哪种节点,请转到如何选择要使用的节点? 连接节...
-
MySQL 数据类型和运算符
-
【mimics,ansys】医学三维重建及血流动力学
-
2019年线上咖啡行业趋势洞察.pdf
-
喉关节的建模及数值模拟研究
-
linux系统全盘备份与还原.docx
-
数据可视化包括哪些内容
-
2021卸妆趋势白皮书.pdf
-
Collections工具类
-
ios 初学之 UITextField 点击不弹出键盘
-
2021-03-03
-
网络安全规划与设计.pptx
-
华为1+X——网络系统建设与运维(中级)
-
用Go语言来写区块链(一)
-
及时的在线正则化极限学习机。
-
SLA约束下基于增强学习的云计算混合作业调度器方案
-
app软件测试全栈系列精品课程
-
公式编辑器需要的字体.rar
-
谷歌代理服务器如何换ip?
-
债市开放专题研究系列一:日韩债市开放历程回顾研究.pdf
-
2021年 系统架构设计师 系列课