磁盘性能评估
写入空数据
1 | dd if=/dev/zero of=test.data bs=2G count=10 |
1 | dd if=/dev/zero of=test.data bs=2G count=10 |
1 | dev tools |
1 | { |
Boost Preprocessing Library 是 boost 定义的宏(macros)库,官方文档在这里。
Boost 的 Preprocess 库有四种数据类型,array、lists、sequences、tuples。
arrays 是包含两个元素的 tuple,第一个元素是 array 中元素的数量,第二个元素是包含 array 元素的 tuple。
1 |
lists 是一个有头和尾的简单列表。头是一个元素,尾是另外一个 list 或者 BOOST_PP_NIL。
1 |
sequences 是一组相邻的带括号的元素。
1 |
元组是一个括号内用逗号分隔的元素列表。
1 |
1 | // 遍历 SEQ 中的每个元素,应用新的宏。 |
_
作为占位符)示例
1 |
|
1 | 用户目录转换绝对路径 |
开源的 RPC 框架有很多,如果专注于 java,可以尝试 finagle,打造基于 java 的微服务系统可以考虑 dubbo
、spring cloud
、spring cloud alibaba
;如果是 c++ 可以尝试 thrift/pb + brpc;如果服务有跨语言调用的需求,可以考虑 thrift、gRPC。
相信,谷歌的背书 + 多语言 + pb & gRPC,会吸引很多人的注意,但是 gRPC 的一些坑还是要慢慢趟才行。
比如 ManagedChannel 默认的负载均衡是 pick_first。公司用了几年,虽然有了服务发现,但是创建 stub 时还是随机选择一个机器创建连接。如果服务端是 python,还要注意多个服务进程的负载均衡问题(python 服务一般会起多个进程,共用一个端口),因为 gRPC 的负载均衡是连接粒度的,如果客户端复用连接,那么就会出现请求全部集中在一个进程上面,这样至多使用机器的一个核心;这个问题简单一点可以通过创建多个连接,请求时随机选取来解决,比较好的解决方案是自定义 load balance,定义 subchannel 创建规则。
还有就是,gRPC 的文档并没有想象中那么多,就 java 来说,封装了大量的逻辑,有些甚至连代码注释说的都很模糊。
ManagedChannel 有很多内置的实现,常用的是 ManagedChannelImpl2
,涉及到几个比较重用的概念。
1 | 运行不可执行 jar 包内的类 |
1 | ... |
1 | nohup ./prometheus --config.file prometheus.yml & |
对磁盘创建 lvm。
1 | 创建 |
如果出现 pvcreate
时出现 execlude by a filter
,检查 /etc/lvm/lvm.conf
下的 filters
。
1 | filter = [ "a/sda/", "a/nvme/", "r/.*/" ] |
如果想要接受一个块设备,使用类似下面的配置。
1 | "a|.*|" |
如果想要拒绝一个块设备,使用类似下面的配置。
1 | "r|/dev/cdrom|" |