miniMAL

技术分享 | Jump Consistent Hash 原理解析(上篇)

≯℡__Kan透↙ 提交于 2020-02-27 01:02:21
作者:傅文辉 之前爱可生开源社区公众号发表了 dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析 , 阐述了跳跃法相对环割法的性能优势。很多读者表示对其中"跳跃法的原理"不是很理解,本文就来详细阐述一下。 一致性哈希 首先,我们的需求是,将数据(key-value pair)分布在多个节点上。这点可以简单的用取模实现, 节点 key 1 1 4 7 10 2 2 5 8 11 3 3 6 9 12 然而,当增加新节点时,数据将发生大规模转移: 节点 key 1 (1) 5 9 2 (2) 6 10 3 (3) 7 11 4 4 8 12 一致性哈希的主要目的是,在节点数量发生变更时,只需要在节点间移动少量数据,而不是"全部洗牌"。 除了经典的环割法一致性哈希外,Google 发表了另一种实现简洁且高效的跳跃法一致性哈希《A Fast, Minimal Memory, Consistent Hash Algorithm》(文末附链接) 在爱可生开源数据库中间件 dble 中,关于 jump consistent hash 的配置方法详见 dble 官方手册中"跳增字符串算法"的部分(文末附链接)。 基础实现 与原始论文不同, 本文节点(又称 bucket)从 1 开始编号,而非从 0 开始。 先考虑只有一个节点的情况

这是一个可以显示Linux命令的工具

风格不统一 提交于 2020-02-26 10:49:54
rogress进度查看器是一个简单的程序,可用于显示[neiqian]Coreutils[/neiqian] 命令 的进度。它使用来自文件描述符的信息来确定 命令 的进度。Progress的优点在于它可以与其他 Linux 命令一起使用,比如[neiqian]watch[/neiqian]。 实验环境 Centos 7.7 Minimal Progress工具的github地址:https://github.com/Xfennec/progress 安装 Progress工具依赖ncurses库,先安装ncurses-devel然后再编译安装progress [root@localhost ~]# yum -y install ncurses-devel [root@localhost ~]# git clone https://github.com/Xfennec/progress [root@localhost ~]# cd progress/ [root@localhost progress]# make && make install 运行progress 如果没有命令在运行,那么progress程序将退出并告诉你,没有命令正在运行。 [root@localhost ~]# progress No command currently running: cp, mv, dd,

CentOS7-Minimal模式下编译搭建 LAMP / LNMP环境

时光怂恿深爱的人放手 提交于 2020-01-08 13:52:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 编译安装的目的主要基于以下几点 特定版本的软件包安装 包的精简及参数调优 这里希望通过编译安装方式来实现对PHP运行环境的个性化定制,具体的会按名称缩写中的顺序来编译安装所需的各个组件 apache/nginx -> mysql -> php 编译过程中排错时, 可以从以下三个维度分析: 编译过程中的实时报错信息 相关程序的运行日志、访问日志、报错日志 查看 systemd 产生的系统日志,常用命令 journalctl -xn 基础依赖安装 这些都是在 lamp / lnmp 编译过程中报错提示 最低要求 必须依赖的包,在此预先准备好 sudo yum install gcc gcc-c++ cmake kernel-devel openssl-devel git ncurses-devel bison wget 关闭安全系统 - 避免各种服务被屏蔽 sudo service firewalld stop # 关闭防火墙(centos6.5下是iptables服务) sudo chkconfig firewalld off # 关闭防火墙的开机启动 sudo setenforce 0 # 关闭selinux服务 sudo sed -i 's|SELINUX=enforcing|SELINUX=disabled

日期格式化跨年bug,是否与你不期而遇?

半腔热情 提交于 2020-01-06 20:56:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 2020年来临之前,日期格式化操作也为程序员准备了一个跨年级别的bug,不知你的系统是否遇到? 临近2020年元旦的几天,不少网站出现了类似2020/12/29,2020/12/30,2020/12/31这样的日期显示。神奇不?就连微信的提供的订阅号助手工具都出现了这样的错误。 下面两张图是本公众号“程序新视界”在12月31日订阅号助手助手中的截图。 新增粉丝时间显示的部分内容。 评论区的时间显示的部分内容。 上图中,新增粉丝显示的时间和评论的时间均为“2020/12/31”。那么,下面我们就来分析一下出现此bug的原因。实例胜千言,先用示例还原一下此bug。 示例一,还原示例: public class DateFormatBug { public static void main(String[] args) throws ParseException { // 示例一 printBugDate(); } private static void printBugDate() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); Date date = sdf.parse(

比原链BBFT如何让共识更快——兼论BBFT与FBFT/HotStuff的比较

五迷三道 提交于 2019-12-06 15:35:01
前言 近日比原链(BYTOM)技术团队发布了Bystack区块链BaaS平台,其中包括侧链的共识算法BBFT(Bystack Byzantine Fault Tolerance)。笔者将在这篇文章中阐述比原链BBFT尝试解决的问题以及分析BBFT与其他各家共识协议的主要差异。BBFT是一个PBFT的变形,它的原理与PBFT一脉相承。若想深刻理解BBFT的巧思,则必须进入PBFT的脉络推敲。早在区块链藉由比特币的大红大紫之前,PBFT就作为共识协议存在于世界上了。由Castro和Liskov于1999年发明,它是一个具有20年历史的经典设计,它的发明是为了解决分布式系统中的一个经典问题:拜占庭将军问题。直到今日,PBFT仍蕴含许多值得反复推敲的巧思,不断启发后世发明出更好的协定。 PBFT基本的运作流程 PBFT是一个具有二轮投票的三阶段协议,每个视域(View)都会有一个特定的节点作为领导节点(Primary/Leader),负责通知所有节点进入投票流程。各节点则会经历Pre-prepare/Prepare/Commit这三个阶段,并依据接收的讯息决定是否投票/进入下一阶段,每个节点投完票后将讯息发给所有其他的节点。若个节点在两阶段投票之后取得多数共识,则各节点可以更新本机的状态,结束这一回合。 视域变换(View-change)仅当多数节点发起时执行

CentOS minimal 安装

笑着哭i 提交于 2019-12-05 08:29:21
现在CentOS最新版是6.4,提供了最小化安装的iso镜像,以前5.x版中是没有单独提供的,因为只是用来学习,所以尝试用这个版本。对于我们这些搞开发来的,是个福音,不管是下载,还是安装,都省去不少时间,存储空间都节省了不少。 下了个32位的,用WMware安装,一路下来,除了中间提示缺少gcc、kernel-devel、make等包外(最小化安装版嘛,少些包,很正常,选择"Continue"跳过),安装相当顺利,全自动的。 安装完了,自动重启,结果悲剧了,启动不了,提示下面的信息: Installing VMware Tools, please wait...<br> mount: special device /dev/hda does not exist<br> mount: block device /dev/sr0 is write-protected, mounting read-only<br> 半天没有动静。 仔细想了想,安装过程中未出现什么错误,验证了一下iso文件的hash,对的,安装包是完整的。 google了一下,没找到相关的资料,于是只好自己动手... 重新检查了各项设置,发现硬件设置中多了一个CD/DVD(IDE),装载了autoinst.iso,另一个CD/DVD 2(IDE)装载了安装镜像CentOS-6.2-x86_64-minimal.iso

CentOS7设置ssh服务以及端口修改

泪湿孤枕 提交于 2019-12-05 08:29:07
CentOS7设置ssh服务以及端口修改 2017年10月22日 11:19:26 Flying9001 阅读数:24233 标签: ssh 服务器 运维 centos7 更多 个人分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mrqiang9001/article/details/78308830 很多时候我们都是通过 SSH 服务 来对 Linux 进行操作,而不是直接来操作 Linux 机器,包括对 Linux 服务器的操作,因此,设置SSH服务对于学习Linux来说属于必备技能(尤其是运维人员),关于CentOS 7 对于防火墙这一块的设置有一定的修改,新增了 firewalld 模块,具体修改可以参考官方文档,这里只介绍CentOS 7设置 SSH 服务以及端口的修改 1.安装 ssh服务 root 用户登录机器,使用 yum 安装 ssh 服务: yum install openssh-server 查看安装的 ssh 服务包 安装完成之后已经可以进行ssh 登录了,默认的ssh服务端口为 22 如果只是使用 ssh服务来练习操作虚拟机,到这里就已经可以了 下面我将介绍CentOS 7 ssh 服务的端口修改 2.修改SSH服务端口 使用 root 用户进入 /etc/ssh/ 目录: cd

CentOS minimal 安装后网络配置

夙愿已清 提交于 2019-12-05 08:28:48
一直觉得各个Linux发行版本总会安装许多自己不需要的东西,并且默认的图形界面也总是让我懒得去敲命令行,所以总想找一个简单的linux试试。正好CentOS提供最小化安装版本,今天没事在vm虚拟机中安装了下。确实够简单的,连gcc都没有,所以装好了就想yum install gcc,这才发现网络没有配置好,默认的网卡是不启动的。这倒也可以理解,谁让是minimal版本呢~ 配置过程很简单,编辑配置文件 vi /etc/sysconfig/network-script/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="dhcp" #默认自动配置IP HWADDR="00:0C:29:0D:07:43" NM_CONTROLLED="no" #修改为no不依赖NetworkManager控制 ONBOOT="yes" #修改为yes设置开机启动 TYPE="Ethernet" UUID="***-***-***" 这是我的配置,NetworkManager是完全版本默认提供的网络管理工具, 因为minimal的情况下并没有安装,所以设置 NM_CONTROLLED="no" 当然了,触类旁通,既然这个时候改成了‘no’,就得记得在以后如果装了图形界面,并且安装了NetworkManager的时候,再次修改回yes启用。否则也会导致网络不可用。 ONBOOT=

Mysql事务和Mysql 日志

别来无恙 提交于 2019-12-04 18:04:34
事务特性 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。 事务并发问题 1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据 2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。 3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。 小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表 事务隔离 mysql默认是“可重复读”,串行化后 事务隔离级别 脏读

CentOS 6.5使用过程中遇到的问题(更新中)

核能气质少年 提交于 2019-12-03 10:23:44
###下载 我们可以选择去 CentOS 官网下载,也可在 网易开源镜像站 下载。由于DVD版本都很大(4G多),我选择了minimal版本,一来节省下载时间,二来能够有机会去处理一些之前没碰到过的问题。当然了,安装CentOS系统之前,安装一个VirtualBox( 请勿下载最新版本4.3.14,会报错 )或者VMware是必要的。 ###安装 安装过程没有想象中困难,基本上和以前安装图形版差不多。网上很多教程都说最小化安装会是纯命令行界面,但我的安装过程却并不是这样,到现在我也没弄明白是怎么一回事。在我的安装过程中, 除了前面两三个步骤是命令行的,后面全是图形化界面 ,而且居然没有分区这个步骤,采用了系统默认的分区方案。这个过程很让人摸不着头脑。 ###使用 首先就是网络。由于最小化安装默认没有启用网卡,所以这时候需要小作修改。 执行 vi /etc/sysconfig/network-script/ifcfg-eth0 将 ONBOOT=no 改成 ONBOOT=yes 最后重启网卡即可: service network restart 来源: oschina 链接: https://my.oschina.net/u/940492/blog/299332