Skip to content

Commit

Permalink
new update for learning note
Browse files Browse the repository at this point in the history
  • Loading branch information
rbmonster committed Feb 20, 2021
1 parent a647403 commit 5dac491
Show file tree
Hide file tree
Showing 9 changed files with 578 additions and 448 deletions.
56 changes: 20 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

## Java并发相关
- [Java线程](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/THREAD.md)
- [Java并发虚拟机](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/CONCURRENT.md)
- [Java并发AQS](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/CONCURRENTTOOL.md)
- [Java并发(虚拟机)](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/CONCURRENT.md)
- [Java并发(AQS)](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/CONCURRENTTOOL.md)
- [Java并发应用](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/CONCURRENT_APPLICATION.md)

## Spring
Expand Down Expand Up @@ -37,6 +37,7 @@
- [Elasticsearch 基本知识](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/design/ES.md)
- [Linux相关](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/LINUX.md)
- [Netty](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/NETTY.md)
- [FastDFS](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/FASTDFS.md)

## 系统设计
- [接口设计](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/INTERFACE_DESIGN.md)
Expand All @@ -55,13 +56,12 @@

## 分布式与微服务
- [Spring Cloud相关知识](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/SPRING-CLOUD.md)
- [spring cloud 微服务 sample](https://github.com/rbmonster/sanwu-microservice)
- [dubbo sample](https://github.com/rbmonster/sanwu-dubbo-demo)
- [Spring Cloud 微服务 sample](https://github.com/rbmonster/sanwu-microservice)
- [Dubbo sample](https://github.com/rbmonster/sanwu-dubbo-demo)

## 大数据
- [Spark](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/SPARK.md)


## 其他
### 记录平常学习java 的一些知识点
- [设计模式(head first)](https://github.com/rbmonster/learning-note/blob/master/src/main/java/com/toc/CODEDESIGN_BOOK.md)
Expand All @@ -71,34 +71,18 @@
- [java集合类(Java编程思想)](https://github.com/rbmonster/learning-note/tree/master/src/main/java/com/toc/COLLECTION_BOOK.md)
- [java并发(Java编程思想)](https://github.com/rbmonster/learning-note/tree/master/src/main/java/com/toc/CONCURRENT_BOOK.md)


### 分布式文件存储系统
- FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。
- tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。
- storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。
- Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
- 以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据。

- 如何保证数据不丢失:
- 在于Trunk-Server上,Trunk-Server实现空间的分配,每一次的空间分配都记录到Trunk-Binlog文件之中,并且定期(每秒)将该文件的更新同步给组内的其他Storage服务器

- 内部机制如下:
- 1、选择tracker server
当集群中不止一个tracker server时,由于tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer。 选择存储的group 当tracker接收到upload file的请求时,会为该文件分配一个可以存储该文件的group,支持如下选择group的规则:
1、Round robin,所有的group间轮询
2、Specified group,指定某一个确定的group
3、Load balance,剩余存储空间多多group优先
- 2、选择storage server
当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则:
1、Round robin,在group内的所有storage间轮询
2、First server ordered by ip,按ip排序
3、First server ordered by priority,按优先级排序(优先级在storage上配置)
- 3、选择storage path
当分配好storage server后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录,支持如下规则:
1、Round robin,多个存储目录间轮询
2、剩余存储空间最多的优先
- 4、生成Fileid
选定存储目录之后,storage会为文件生一个Fileid,由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串。 选择两级目录 当选定存储目录之后,storage会为文件分配一个fileid,每个存储目录下有两级256*256的子目录,storage会按文件fileid进行两次hash(猜测),路由到其中一个子目录,然后将文件以fileid为文件名存储到该子目录下。
- 5、生成文件名
当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名

## 参考资料
| 地址 | 简介 |
| --- | --- |
| [CS-Notes](https://github.com/CyC2018/CS-Notes) | 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计 |
| [JavaGuide](https://github.com/Snailclimb/JavaGuide)| 「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。 |
| [AobingJava](https://github.com/AobingJava/JavaFamily) | 蘑菇街敖丙的Java面试总结 |
| [advanced-java](https://github.com/doocs/advanced-java) | 互联网Java工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识 |
| [spring-analysis](https://github.com/seaswalker/spring-analysis) | Spring源码解读(很久未更新了,但是spring基本的精髓都讲到了,适合参考阅读源码) |
| [fucking-algorithm](https://github.com/labuladong/fucking-algorithm) | labuladong刷算法套路,提供算法题的工具方法思想 |
| [leetcode-master](https://github.com/youngyangyang04/leetcode-master) | LeetCode 刷题攻略:配思维导图 |
| [BigData-Notes](https://github.com/heibaiying/BigData-Notes) | 大数据入门指南(基本的入门指引) |
| [system-design-primer](https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md) | 来自微软的系统设计笔记,国人翻译 |
| [system-design](https://github.com/soulmachine/system-design/blob/master/cn/SUMMARY.md) | 一位博主的系统设计总结(很久未更新,可做参考) |
| [日拱一兵](https://dayarch.top/) | 挺用心的一个Java博主,解读Java相关技术 |
| [美团技术团队](https://tech.meituan.com/) | 美团技术团队永远的神,深度解读技术 |
4 changes: 4 additions & 0 deletions src/main/java/com/learning/basic/CONCURRENTTOOL.md
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,10 @@ public Semaphore(int permits, boolean fair) {
1. AQS 的内部类 Node 定义了两个常量 SHARED 和 EXCLUSIVE,他们分别标识 AQS 队列中等待线程的锁获取模式。
2. java 的并发包中提供了 ReadWriteLock,读-写锁。它允许一个资源可以被多个读操作访问,或者被一个 写操作访问,但两者不能同时进行。
### 线程池中的Worker(独占锁实现)
TODO
## Atomic 原子类
- 原子类主要基于CAS操作实现,同时使用 volatile 保证可见性。
Expand Down
Loading

0 comments on commit 5dac491

Please sign in to comment.