reveal.js 中文文档
reveal.js 是一个使用HTML轻松创建漂亮演示文稿的框架。查看实时演示。
reveal.js提供了广泛的功能,包括嵌套幻灯片、Markdown支持、PDF导出、演讲者注释和JavaScript API。还有一个功能完善的可视化编辑器和共享reveal.js演示文稿的平台slides.com。
菩提树下改bug的博客
reveal.js 是一个使用HTML轻松创建漂亮演示文稿的框架。查看实时演示。
reveal.js提供了广泛的功能,包括嵌套幻灯片、Markdown支持、PDF导出、演讲者注释和JavaScript API。还有一个功能完善的可视化编辑器和共享reveal.js演示文稿的平台slides.com。
Hazelcast 是由Hazelcast公司开发的一款
开源的分布式内存级别的缓存数据库
可以为基于JVM环境运行的各种应用
提供分布式集群和分布式缓存服务
##
in-memory data grid
在国外项目中使用较为广泛
交易系统应用较多 其中有很多银行客户
SonarQube集群方案也是基于Hazelcast实现
数据按照某种策略尽可能均匀的
分布在集群的所有节点上
数据会尽量“靠近”应用存放
Hazelcast 没有中心节点
集群中最老的节点负责发送分区表
每个节点都有可能随时退出或随时进入
能按照业务需求增加或者减少服务节点
集群中存储的数据都会有一个备份
数据模型是面向对象和非关系型的
提供了常用 Java 数据结构接口的分布式实现
Hazelcast 的所有功能只需引用一个jar包
该类型数据结构没有分区概念
但是能够多副本 整个数据集在一个或者多个节点
<key,List<T>>
类型的数据结构支持分片的数据结构数据集
分散的分布在集群的多个节点上的
Hazelcast 服务之间是端对端,没有主从之分
集群中所有的节点都存储等量的数据以及进行等量的计算
Hazelcast 默认情况下把数据存储在 271 个区上
通过分片来存储和管理所有进入集群的数据
分片保证数据可以快速被读写
通过冗余保证数据不会因节点退出而丢失
Hazelcast的每个数据分片(shards)
被称为一个分区(Partitions)
只有一个节点时
两个节点时
节点变动会触发重分区和数据平衡操作
每个成员的数据分片都至少有一个副本
更多节点时
基本架构模型
嵌入式拓扑模型
C/S 客户端/服务器 模型
支持近端缓存
OBJECT BINARY NATIVE
直接 java 对象
get 操作无需反序列化 得到的是对象的直接引用
与应用程序共享 jvm heap
java 对象的二进制格式
需要序列化与反序列化操作
与应用程序共享 jvm heap
使用 key / value 实现的序列化接口
将对象存储在堆外内存或者从堆外内存读取
不与应用程序共享内存
在数据量大的场景中
通常会使用 NATIVE 格式的存储数据
以减少应用程序 jvm gc 压力
使用 hazelcast 提供的接口通常能获得较好的性能
需要实现特定接口和服务器端配置
可以使用 thrift 等序列化框架
连接到 hazelcast 的序列化 I/O 流上
确保业务相关的数据在同一个集群节点上
避免操作多个数据的业务事务在通过网络请求数据
实现更低的事务延迟
通过接口将相关数据定位到相同节点
1 | public interface PartitionAware<T> { |
1 | final class OrderKey implements PartitionAware, Serializable { |
使用PartitioningStrategy自定义分区策略
1 | <hazelcast> |
分布式数据库通常通过分区和多副本的方式
以实现扩展性,可用性和数据分布透明性
均匀
: 是指各个节点的数据规模均衡性,以保证节点性能平衡;分散
: 是指 leader 与副本通常不会在一个相同的节点或者机架或者技术中心,以求最大的可用性;因为多个副本同时更新成功或者失败是一个及其复杂和困难的事情,除了需要一个高性能的分布式事务管理器,还需要应对各种复杂的网络和硬件故障,即便如此,在极端情况下的数据恢复也将是极大的挑战;
Hazelcast是一个 AP 系统
延迟复制 lazy replication
尽量一致
最终一致
layze replication
: 根据 primary replication 的变更日志,在独立的事务中应用这些帮更到副本数据集上;尽量一致
: 言外之意就是肯定会有不一致的情况。最终一致
:在某个时间点差异存在复制滞后,后台会一直工作填补滞后1 | <dependency> |
引入依赖
创建控制器
1 |
|
1 | mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dserver.port=8081" |
启动集群
1 | Members {size:4, ver:4} [ |
1 | curl --data "key=key1&value=test1" "localhost:8081/put" |
写入和获取数据
事务支持
ONE_PHASE
, TWO_PHASE
1 | #!/bin/bash |
1 | ALTER USER postgres WITH PASSWORD '123456'; |
movead/WalMiner - 码云 - 开源中国 (gitee.com)
选择需要查询的数据库,执行下列命令:
1 | -- create extension walminer; |
近期在对SonarQube源码进行改造时,遇到了一些问题,为更有效的解决这些问题,有必要对SonarQube的执行源码进入一定深入的分析,特测记录
CE 是ComputeEngine的简写,SonarQube 社区版的服务启动后实际上是有三个服务的:
CE节点主要职能是将本地客户端分析源码后通过web api 提交上的分析报告进行进一步加工(上个版本、分支、PR差异),其中涉及几个关键点:
CeWorker是干活的人,CeTask则是要干的活,同时怎么干也在CeTask上写好了,CeQueue是目前在排队的任务,下面就依次对这三部分代码展开具体的分析
近期将公司内网换成了linux mint , 有很多设置不符合使用习惯,在此记录下修改过程
CTRL+ALT+S
设置
进入控制中心,点击其他 > Fcitx设置 找到占用CTRL+ALT+S
的操作,将快捷键替换即可
CTRL+ALT+L
格式化代码快捷键锁屏
进入控制中心,点击硬件 > 键盘快捷键 将Desktop > 锁住屏幕 快捷键改为 WIN+L
可以顺便设置显示桌面(窗口管理 > 隐藏所有正常窗口并将桌面设置为焦点 win+D
)、打开文件夹(Desktop > 主文件夹 WIN+E
)快捷键与windows习惯一致
进入用户目录,创建文件 .bashrc_git_branch
1 | function git_branch { |
在用户 .bashrc
文件末尾添加以下代码
1 | source ~/.branch_git_branch |
打开默认终端 , 占据一半内容的用户名一定让你影响深刻,不过刚刚我们修改过PS1的设置,修改一下就可以了
1 | - export PS1='\u@\h \[\033[01;36m\]\W\[\033[01;32m\]$(git_branch)\[\033[00m\] \$ ' |
除了用户目录,其他目录对我们都是只读的(文件系统层面限制), 因此我们安装的一些软件如果需要加入的path环境变量中,可以将启动命令的软连接添加的~/.local/bin
目录中,或者在用户目录中创建bin目录,添加文件后可以在当前终端执行source ~/.profile
生效 (其他窗口终端需重启系统后才能生效)
dig 命令
1 | dig 域名 @DNS服务器地址 |
查看解析结果由哪个区域返回
1 | /hxdata/logs/named/log/query.log |