0%

Java8 JVM内存结构

基本结构与之前类似,只是Java8取消了之前的“永久代”,取而代之的是“元空间”——Metaspace,两者本质是一样的。“永久代”使用的是JVM的堆内存,而“元空间”是直接使用的本机物理内存。

阅读全文 »

JMM

JMM是指Java内存模型,不是Java内存布局,不是所谓的栈、堆、方法区。

每个Java线程都有自己的工作内存。操作数据,首先从主内存中读,得到一份拷贝,操作完毕后再写回到主内存。

threadPoolProcedureJMM可能带来可见性原子性有序性问题。所谓可见性,就是某个线程对主内存内容的更改,应该立刻通知到其它线程。原子性是指一个操作是不可分割的,不能执行到一半,就不执行了。所谓有序性,就是指令是有序的,不会被重排。

阅读全文 »

Spring源码学习笔记

Spring IoC介绍

IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。

所谓 IoC ,就是由 Spring IoC 容器来负责对象的生命周期和对象之间的关系

  1. 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IoC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象
  2. 控制什么:控制对象。
  3. 为何是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
  4. 哪些方面反转了:所依赖对象的获取被反转了。
阅读全文 »

Docker安装morunchang/fastdfs

FastDFS简介

FastDFS是一款开源的分布式文件系统,功能主要包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服务,如图片、视频、文档等等。

FastDFS作为一款轻量级分布式文件系统,版本V6.01代码量6.3万行。FastDFS用C语言实现,支持Linux、FreeBSD、MacOS等类UNIX系统。FastDFS类似google FS,属于应用级文件系统,不是通用的文件系统,只能通过专有API访问,目前提供了C和Java SDK,以及PHP扩展SDK。

FastDFS为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性。FastDFS可以看做是基于文件的key value存储系统,key为文件ID,value为文件内容,因此称作分布式文件存储服务更为合适。

阅读全文 »

简介

Apache ZooKeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。

ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。

阅读全文 »

在/etc/pf.anchors/目录下新建一个名为com.pow文件,内容如下

1
2
rdr pass on en0 inet proto tcp from any to any port 8080 -> 127.0.0.1 port 8080
rdr pass on en5 inet proto tcp from any to any port 8080 -> 127.0.0.1 port 8080

上面的配置标表示的意思是将从en0和en5,目的端口为8080的包转发到8080端口上

使用pfctl命令检测配置文件

1
sudo pfctl -vnf /etc/pf.anchors/com.pow

修改/etc/pf.conf配置文件

pf启动时会自动装载/etc/pf.conf文件,因此将anchor文件链接到/etc/pf.conf,转发规则就会自动建立了。

1
2
3
4
5
6
7
#在rdr-anchor "com.apple/*"下面增加:

rdr-anchor "pow"

#在load anchor "com.apple" from "/etc/pf.anchors/com.apple"后面添加:

load anchor "pow" from "/etc/pf.anchors/com.pow"

修改后的配置如下:

1
2
3
4
5
6
7
8
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "pow"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/com.pow"

导入并运行pf命令

一定要导入并允许运行pf的命令

1
sudo pfctl -evf /etc/pf.anchors/com.pow

设置pf开机自动打开

1
sudo pfctl -e

如果想要关闭pf,命令是

1
sudo pfctl -d1

ELK简介

ELK是有Elastic公司的三个组件配合进行日志收集,分别是:

  • ElasticSearch:用于存储日志信息。
  • Logstash:用于收集、处理和转发日志信息。
  • Kibana:提供可搜索的Web可视化界面。

ELK也可以配合Beats进行使用,后续会写一篇文章来介绍。

环境搭建

之前文章分别介绍了ELK环境的搭建以及Spring Boot与之的整合。

阅读全文 »

环境与版本

Elasticsearch版本

服务端:elasticsearch 7.5.1 单节点

客户端:elasticsearch 6.8.5

Logstash获取MySQL数据的配置

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
26
27
28
29
30
31
32
33
34
35
input {
jdbc {
add_field => {"myid"=>"jdbc"}
jdbc_connection_string =>
"<mysql 地址>"
jdbc_user => "xxxxxxxxxxxxx"
jdbc_password => "xxxxxxxxxxxx"
##数据库驱动的JAR位置
jdbc_driver_library => "/usr/share/logstash/config/mysql-connector-java-5.1.47.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement => "select id,username,realname,age,birth from tb_user"
## 每分钟执行一次
schedule => "* * * * *"
}
}
output {

if [myid] == "jdbc" {
elasticsearch {
##elasticsearch 地址
hosts => "<elasticsearch 地址>:9200"
##索引名称
index => "index-user"
document_id => "%{id}"
##索引类型
document_type => "user"
}
stdout {
codec => json_lines
}
}

}
阅读全文 »

Install Elasticsearch with Docker

Pulling the image

1
docker pull docker.elastic.co/elasticsearch/elasticsearch

Starting a single node cluster with Docker

采用Docker启动一个单节点的Elasticsearch集群:

1
2
# -d:后台启动 -p:开放端口 --name:设置名称
docker -d run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch-monochrome docker.elastic.co/elasticsearch/elasticsearch:7.5.1
阅读全文 »

分支介绍及命名规则

master 分支

  • master 为主分支,也是用于部署生产环境的分支,一定要确保master分支稳定性
  • master 分支一般从develop或bugfix分支合并,任何时间都不能直接修改master分支的代码

develop 分支

  • develop 为开发分支,始终保持最新完成以及bug修复后的代码,
  • 一般开发的新功能时,feature分支都是基于develop分支下创建的

feature 分支

  • feature 为开发新功能时创建的分支,并且一般是由develop为基础来创建feature分支
  • 分支命名: feature/ 开头的为特性分支, 命名示例: feature/user_module、 feature/vacation_plan_module
阅读全文 »