0%

Shiro简介

Shiro是一个开源的安全框架,可以进行身份认证、访问控制授权、会话管理以及加密等

  • Authentication 身份验证
  • Authorization 授权
  • Session Management 用户session管理器
  • Crytography 加密
阅读全文 »

即时编译器

当虚拟机发现某个方法或代码块的运行特别频繁时,会把这些代码认定为热点代码,为了提高热点代码的执行效率,在运行时虚拟机会将这些代码编译成与本地平台无关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,简称JIT编译器)

在HotSpot中采用了解释器和编译器并存的架构,称为混合模式

先来介绍一下解释器和编译器

解释器和编译器

这个就要说一下什么是编译型语言?什么是解释型语言?

C++这种语言被称为编译型语言,因为它们的程序都以编译后的二进制形式交付先写程序,然后编译器静态生成二进制文件。

PHP这种语言是解释型语言,只要机器上有合适的解释器,相同的程序可以在任何CPU上运行,执行程序时,解释器会将相应的代码转换为二进制代码。其优点是程序可移植,相同的代码放到有适当解释器的机器上,就可以运行。其缺点就是运行起来会很慢,因为每次执行都会重新翻译一遍每一行代码

java想要将两种方式中合起来,所以提供了一个虚拟机,将java应用编译之后(此时编译出来的不是CPU所能识别的二进制代码,而是虚拟机可识别的汇编语言,也就是java字节码),然后java字节码可以使用java运行(这里就相当于php解释php脚本了),使得java成为一门平台独立的解释型语言,由于java程序运行时的是java字节码,这个是有规范的,所以可以在代码执行时将其编译成平台特定的二进制代码,这个编译的过程是在程序执行时进行的,所以被称为即时编译(JIT)

阅读全文 »

ip存储

ipv4

ipv4使用long类型进行存储即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static long ipToLong(String ipString) throws NumberFormatException {
long result = 0;
String[] terms = ipString.split("\\.");
if (terms.length != 4) {
return -1;
}
result += Long.parseLong(terms[0]) << 24;
result += Long.parseLong(terms[1]) << 16;
result += Long.parseLong(terms[2]) << 8;
result += Long.parseLong(terms[3]);
return result;
}

public static String longToIp(long ipLong) {
return (ipLong >>> 24) + "." +
((ipLong >>> 16) & 0xFF) + "." +
((ipLong >>> 8) & 0xFF) + "." +
(ipLong & 0xFF);
}

public static void main(String[] args) {
long result = ipToLong("255.255.255.255");
System.out.println(result);
System.out.println(longToIp(result));
}

ipv6

阅读全文 »

集群发现机制

elasticsearch默认的discovery机制是zen discovery,zen discovery机制是elasticsearch的内建模块,提供了多播和单播两种发现方式,集群发现节点间通信是依赖于transport module

集群发现分为几个子模块

ping

这是一个节点使用发现机制去寻找其他节点的进程,同时支持多播和单播方式的发现

unicast单播

1
discovery.zen.ping.unicast.hosts: ["0.0.0.0"]

集群master选举

为了避免网络慢或者拥塞,该参数可以适当调高,默认3s

1
discovery.zen.ping_timeout: 30

在节点完成选举后,如果有新节点加入,会发送join请求到master节点,默认重试20次

1
2
# 该配置为超时时长
discovery.zen.join_timeout: 60000ms

如果master宕机,集群节点会再次进行ping过程,并选举出一个新的master(只有配置了node.master为true的才有资格进行master选举)

1
2
# 用于控制选举行为发生的最小集群节点数量, 防止脑裂(一个es集群因网络原因或master节点负载过大,响应速度过慢,导致ping主节点超过超时时间,而引起的部分候选主节点进行重新选举,导致产生大于1个master节点,每一个master节点相当于一个独立的es集群),只有大于该值,才会进行master节点的选举,该参数必须大于等于集群中master候选节点的quorum数量,`quorum=master候选主节点数/2 + 1`
discovery.zen.minimum_master_nodes
阅读全文 »