分布式一致性协议Raft的简单理解
📅 2016-01-11
基本概念 #
Raft的三个模块 #
分布式一致性协议允许一组服务器节点像一个整体一样工作,允许其中一些节点出现故障也能继续工作下去。正式因为如此,一致性算法在构建大规模分布式软件系统扮演着十分重要角色。Paxos一直是分布式领域内一致性协议的代名词,但Paxos十分难以理解,绝大数实现基于Paxos进行修改才能应用到实际系统中,因此Paxos的具体实现具有不统一性。
...分布式一致性协议允许一组服务器节点像一个整体一样工作,允许其中一些节点出现故障也能继续工作下去。正式因为如此,一致性算法在构建大规模分布式软件系统扮演着十分重要角色。Paxos一直是分布式领域内一致性协议的代名词,但Paxos十分难以理解,绝大数实现基于Paxos进行修改才能应用到实际系统中,因此Paxos的具体实现具有不统一性。
...innodb_buffer_pool_size
是使用InnoDB存储引擎时最关键的配置项。InnoDB使用一块专门的内存区域做IO缓存,该缓存既缓存InnoDB的索引块,又会缓存InnoDB的数据块。这个缓存区就是InnoDB Buffer Pool,使用innodb_buffer_pool_size
设置其大小,在保证系统及其他程序有可用内存的情况下,设置的越大,缓存命中率越高,访问InnoDB的磁盘IO越少,性能越好。
MySQL的状态变量显示MySQL服务实例的状态信息,这些状态信息是动态的,包括MySQL服务器连接的会话状态、变量信息等。默认情况下状态变量都是以大写字母开头。
查看MySQL的状态变量:
1show status;
2show session status;
3show global status;
MySQL系统变量是指MySQL服务实例的各种系统变量(包括全局系统变量、会话系统变量、静态变量),这些变量包含MySQL编译时的参数默认值,或者my.cnf配置文件里配置的参数值。系统变量是一个静态的参数,默认情况下系统变量都是小写字母。
...Elasticsearch是面向文档的,文档被序列胡化JSON格式保存在Elasticsearch中。 文档是指存储在索引里的JOSN格式的文档。每个文档由字段组成。 例如:
1{
2 "_index": "book-store",
3 "_type": "book",
4 "_id": "1",
5 "_version": 1,
6 "_score": 1,
7 "_source": {
8 "id": 1,
9 "name": "ElasticSearch Book"
10 }
11}
字段是组成文档的基本元素。例如上面例子中的"name": "ElasticSearch Book"
这个键值对就是一个最基本的字段。
每个文档都有一些元数据字段,用于标注文档的相关信息,如:
计算机中使用的时间是UTC时间(世界标准时间或世界协调时)。CentOS下的时区设置文件被编译好后保存在/usr/share/zoneinfo目录下,包含了大部分的城市和编码。
1ls /usr/share/zoneinfo
系统安装完成设置好时间之后,这些信息保存在/etc/localtime这个文件中,实际上这个文件是指向/usr/share/zoneinfo下某个文件的链接。当/etc/localtime不存在的时候,则系统使用UTC时间。
...网络时间协议ntp是时间服务器的一种协议。在时间服务器工作时,其可利用不同的工作模式与其他服务器或用户端进行时间的调整,实现时间的同步。
使用ntp需要安装ntp服务组件:
1yum install -y ntpdate ntp
2
3
4systemctl start ntpdate
5systemctl start ntpd
6
7systemctl enable ntpd
8systemctl enable ntpdate
在ntpd服务进程启动的时候,可以使用ntpstat命令获取系统每次校正时间的间隔:
...当缓存中缓存容量已满或数据因失效而需要更新时,就需要从缓存中去掉一些旧数据。 究竟应该去掉哪些数据由缓存的失效策略决定,以下是常见的缓存失效策略:
最后被访问的时间戳
(随缓存命中更新为当前时间),最后被访问时间离当前时间最远的缓存数据优先被淘汰。hit
值(随缓存命中递增),hit值最小的缓存数据优先被淘汰。nginx-module-vts(https://github.com/vozlt/nginx-module-vts)是一个第三方的nginx module,使用它可以查看nginx各个vhost的通讯状态和统计数据,比较类似于haproxy自带的stats page。 这个nginx模块的下载地址为https://github.com/vozlt/nginx-module-vts/releases。
编译安装这个模块:
1./configure ...... --add-module=/<thepath>/nginx-module-vts
2make & make install
3make upgrade
配置:
1http {
2# nginx vts module
3 vhost_traffic_status_zone shared:vhost_traffic_status:10m;
4 server {
5 ......
6 location /vhost_status {
7 vhost_traffic_status_display;
8 vhost_traffic_status_display_format html;
9 }
10 ......
访问页面/vhost_status即可。 更多内容可以查看Nginx Vhost Traffic Status Module。
...sync.Pool可以被看做是存放可被重用的值的容器,这个容器具有以下特性:可自动伸缩、高效、并发安全。
因为它的使用场景并不适用于诸如数据库连接池
这类需要我们自己管理生命周期的资源对象的池化场景,所以一般把sync.Pool
称为临时对象池(其实叫做临时对象缓存更合适),主要用来存放已经分配的但是暂时不需要使用的对象,在需要使用的时候再从临时对象池中取出。
使用lua-nginx-module可以把lua嵌入到nginx中,使用lua在nginx下开发一定的业务逻辑。
首先编译安装LuaJIT。
LuaJIT使用JIT编译技术可以把Lua脚本直接编译成机器代码由CPU执行。
从这里下载LuaJIT的源码。解压缩后进入源码目录:
1make install PREFIX=/usr/local/luajit
接下来下载ngx_devel_kit
和lua-nginx-module
的源码。