常见分布式应用系统设计图解(八):文件同步分享系统

文件同步分享系统包括 Dropbox、Google Drive,也包括国内的各种网盘,比如百度网盘。总的来说,这里讨论的这个系统包含这样几个基本功能:

  • 文件变更检测;
  • 文件增量上传和下载;
  • 文件分享和同步。
  • 总体来说,上半部分是文件变化的检测和上传。上传分为两条路线,一条是控制流,一条是数据流。
  • 客户端方面,包含这样几个关键组件和步骤:
    • 有一个 Watcher 用来监控操作系统的文件变化,无论是 Linux 还是 Windows 都可以在文件系统上挂载回调,当文件系统发生变化的时候通知它。
    • 有一个 Chunker 帮助给需要传输的数据分块,也负责将收到的 chunks 写入成为文件。对它来说它只负责听从 I
[……]阅读全文

使用树莓派和 Plex 架设照片和备份服务

我用手机拍了很多照片,平时都保存在一台 Windows 台式机上,这台机器硬盘空间大,主要干两个事情,一个是我打游戏,一个就是存放多媒体数据(主要是照片,也有很多文档)。有时候我需要它提供照片服务,以方便家人使用各种媒体终端(手机、电视盒子等)阅览,有时候则需要往上面拷贝数据以作备份只用,于是我使用 Plex 折腾了一下,但是由于台式机噪音等等的关系,不适合长期开机,因此当时那个方案还是残缺的。

现在打算彻底解决这个问题。大致总结一下,以下是我的主要的几个需求:

  • 照片服务要能够长期保持在线,私用可以方便地查看照片。开机不能有明显的噪音和功耗问题。
  • 我的照片经常是在 Windows 下进行处理的,
[……]阅读全文

java.util.concurrent 并发包诸类概览

Concurrency

java.util.concurrent 包的类都来自于 JSR-166:Concurrent Utilities,官方的描述叫做“The JSR proposes a set of medium-level utilities that provide functionality commonly needed in concurrent programs. ”。作者是大名鼎鼎的 Doug Lea,这个包的前身可以在这里找到,它最好的文档就是系统的 API 手册

当然,这里参考的 concurrent 包来自 JDK7,比最初 JDK1.5 的版本有了不少改进。我曾经在 《Java

[……]阅读全文

笔记:线程的同步和互斥

线程的同步和互斥

线程的同步:指多线程通过特定的手段(如互斥量)来控制线程之间的执行顺序。

线程的互斥:实指对共享资源的约束访问。多线程环境中,某些资源只允许一个线程使用,这类资源成为临界资源,线程之间的关系就表现为互斥的。

线程之间的同步和互斥是通过操作系统的信号量和 PV 操作原语来实现的。

互斥体(Mutex)

表现互斥现象的数据结构,也被当作二元信号灯。一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源。

信号量(Semaphore)

是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调

[……]阅读全文

同步、异步转化和任务执行

async 正如动静是相对的概念,有了它们,世界才充满盎然生气;变和不变也是哲学上的对立统一,在代码的世界里也一样;同步异步呢?

首先,来粗略地看看同步和异步各自有些什么好处

同步的好处:

  • 1、同步流程对结果处理通常更为简单,可以就近处理。
  • 2、同步流程对结果的处理始终和前文保持在一个上下文内。
  • 3、同步流程可以很容易捕获、处理异常。
  • 4、同步流程是最天然的控制过程顺序执行的方式。

异步的好处:

  • 1、异步流程可以立即给调用方返回初步的结果。
  • 2、异步流程可以延迟给调用方最终的结果数据,在此期间可以做更多额外的工作,例如结果记录等等。
  • 3、异步流程在执行的过

[……]阅读全文

back to top