Java 查漏补缺之位运算符

今天在看 Kafka 源码 LongSerializer 时看到将 Long 型转 byte 数组的实现,感觉需要补习一下位运算符,所有有了这篇。

Java 提供的位运算符有:左移 ( << )、右移 ( >> ) 、无符号右移 ( >>> ) 、位与 ( & ) 、位或 ( | )、位非 ( ~ )、位异或 ( ^ ),除了位非 ( ~ ) 是一元操作符外,其它的都是二元操作符。

与或非,亦或 就不说了。

左移

左移 1 位 (<<1) ,值乘 2,以后依次乘 2.

右移

右移 1 位 (>>1),值除以 2。

无符号右移

对于负数,二进制高位为 1,所以一个 int 类型的 -5 二进制表示是

1111 1111 1111 1111 1111 1111 1111 1011

对于负数,使用右移 >> 时,则高位补 1,而对于无符号右移,则高位补 0 。

延伸

由位运算操作符衍生而来的有:

  • &= 按位与赋值
  • |= 按位或赋值
  • ^= 按位非赋值
  • >>= 右移赋值 a »= 1 就是 a = a » 1
  • <<= 赋值左移
  • >>>= 无符号右移赋值

+= 一样,理解为 a += 1 也就是 a = a + 1。


2018-06-26 java , bit , operator , notes

Python Linux 系统管理与自动化运维读书笔记

小工具

HTTP Server

python -m SimpleHTTPServer

python -m http.server

JSON 格式化

echo '<json string>' | python -m json.tool

验证第三方库安装

python -c "import paramiko"

pip 用法

源码安装

python setup.py install

pip 子命令

子命令 说明
search 搜索 pip search flask
install 安装 pip install flask==0.8 , pip install -r requirements.txt
uninstall 卸载
show 查看包详情
check pip 9.0.1 之后提供,检查包是否完整
list 列出已安装
freeze 导出已安装包列表 pip freeze > requirements.txt
completion 生成命令补全配置 pip completion -z >> ~/.zshrc && source ~/.zshrc

加速 pip 安装

下载时指定

pip install -i https://pypi.douban.com/simple/ flask

或者创建 ~/.pip/pip.conf ,写入

[global]
index-url = https://pypi.douban.com/simple/

2018-06-24 python , linux , notes , deploy

威联通折腾篇七:定时任务

威联通的机器本来就是基于 Linux 定义的,所以想要定时任务就会想到 crontab,在威联通中使用 crontab 必须使用 SSH 登录。

然后基本使用 crontab -l 查看当前 qnap 中已经存在的定时任务。

在大多数桌面版 Linux 中会使用 crontab -e 来编辑 crontab 配置,但是注意不要在威联通中使用这种方法,威联通在重启的时候会覆盖使用这种方式写入的配置。如果想要永久的保存配置,应该使用

vi /etc/config/crontab

然后写入配置,比如

0 4 * * * /share/custom/scripts/custom1.sh

这行配置表示在 凌晨 4 点执行后面的脚本。

或者直接使用 echo,将命令放到双引号中

echo "1 4 * * * /share/custom/scripts/custom1.sh" >> /etc/config/crontab

另外需要注意可执行文件一定需要可执行权限 chmod +x filename.sh

重启 crontab

crontab /etc/config/crontab && /etc/init.d/crond.sh restart

标准的 crontab 任务

定时任务 解释
0 3 * * 0 /etc/init.d/idmap.sh dump  
10 15 * * * /usr/bin/power_clean -c 2>/dev/null  
0 4 * * * /sbin/hwclock -s http://linux.die.net/man/8/hwclock
0 3 * * * /sbin/vs_refresh  
0 3 * * * /sbin/clean_reset_pwd  
0-59/15 * * * * /etc/init.d/nss2_dusg.sh  
30 7 * * * /sbin/clean_upload_file  
0-59/10 * * * * /etc/init.d/storage_usage.sh  
30 3 * * * /sbin/notice_log_tool -v -R  
*/10 * * * * /sbin/config_cache_util 0  
0-59/20 3 * * * /sbin/adjust_time  
0 8 * * * /usr/local/medialibrary/bin/mymediadbcmd buildall 1>/dev/null 2>/dev/null  
55 9,21 * * * /sbin/notify_update -s -p 1>/dev/null 2>&1  
0 23 */1 * * /sbin/qpkg_cli -U 1>/dev/null 2>/dev/null  
0 0 * * * /share/CACHEDEV1_DATA/.qpkg/Qcenter/qnap-cms/bin/log_retention.sh > /dev/null  
0 0 * * * /share/CACHEDEV1_DATA/.qpkg/Qcenter/qnap-cms/bin/nasconfig_retention.sh > /dev/null  
0 2 * * * /sbin/qfstrim  
0 0 * * 0 /sbin/storage_util –data_scrubbing raid_id=-1 >/dev/null 2>&1  
51 * * * * /sbin/qddns_check 2>/dev/null  
* * * * * /var/cache/netmgr/lock_timer.sh  
* * * * * /var/cache/netmgr/detect_defaultgw_internet.sh  
0 4 * * * /etc/init.d/wsd.sh restart  
4 3 * * 3 /etc/init.d/backup_conf.sh  
0 0 * * * /etc/init.d/antivirus.sh archive_log  
56 0 */1 * * /etc/init.d/antivirus.sh update_db  
20 08 * * * /mnt/ext/opt/QcloudSSLCertificate/bin/ssl_agent_cli  
35 7 * * * /sbin/qsyncsrv_util -c > /dev/null 2>/dev/null  
0 0 * * * /sbin/qsyncsrv_tool –fix > /dev/null 2>/dev/null  

reference


2018-06-23 qnap , qnap-tutorial , linux , crontab

douban 小组接口研究

豆瓣

curl -X GET \
  'https://frodo.douban.com/api/v2/group/622198/topics?count=30&sortby=new&os_rom=android&apikey=0dad551ec0f84ed02907ff5c42e8ec70&channel=Google_Market&udid=5e4159565b89f86cccda&_sig=YWtLhd6UEq%2Bh7xDWs%3D&_ts=1529656502' \
  -H 'Cache-Control: no-cache' \
  -H 'Host: frodo.douban.com' \
  -H 'User-Agent: api-client/1 com.douban.frodo/5.26.0(134) Android/23 product/OnePlus3 vendor/One model/ONE rom/android  network/wifi'

python

import requests

url = "https://frodo.douban.com/api/v2/group/622198/topics"

querystring = {"count":"30","sortby":"new","os_rom":"android","apikey":"0dad2907ff5c42e8ec70","channel":"Google_Market","udid":"5e3fff058b89f86cccda","_sig":"YWtLhDWs%3D","_ts":"1529656502"}

headers = {
    'User-Agent': "api-client/1 com.douban.frodo/5.26.0(134) Android/23 product/OnePlus3 vendor/One model/ rom/android  network/wifi",
    'Host': "frodo.douban.com",
    'Cache-Control': "no-cache",
    'Postman-Token': "1c40a79a-90ba-6d85aeb074e8"
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)

2018-06-22 douban , api , app

修复 NextCloud 消失的托盘图标

NextCloud 算是很重度 的使用起来了,VPS 上安了,NAS 上也有。各个平台使用体验非常不错,不过唯一一点缺憾是有些时候 Ubuntu/Mint 上 NextCloud 随机启动之后托盘消失,导致看不到同步进度,老是让我感觉没有启动。

所以为了修复这个问题,需要完成以下两个步骤。第一个步骤就是在 startup applications 中将 NextCloud 设定延迟 10s 启动。

nextcloud-startup-applications

第二步就是需要卸载 appmenu-qt5 这个 bug 可以参考这个 issue

sudo apt remove appmenu-qt5

2018-06-21 nextcloud , dropbox , ubuntu , linux

Zookeeper

Apache ZooKeeper 是 Apache 软件基金会的一个软件项目,为大型分布式计算提供开源的分布式协调系统,提供的功能包括配置服务、同步服务和命名注册等。Zookeeper 项目的初衷就是为了降低分布式应用从头开发协同服务的负担。

ZooKeeper

ZooKeeper is a high-performance coordination service for distributed applications. It exposes common services - such as naming, configuration management, synchronization, and group services - in a simple interface so you don’t have to write them from scratch. You can use it off-the-shelf to implement consensus, group management, leader election, and presence protocols. And you can build on it for your own, specific needs.

基本功能也如上述所说可以概括成:

  • 配置管理,将配置内容放到 ZooKeeper 某节点中
  • 集群管理,管理节点,选主
  • 命名服务,创建全局唯一 path
  • 共享锁
  • 队列管理

通常实际使用场景比如管理 HBase 集群,配置管理,和 Kafka 配合等等,Zookeeper 设计更专注于任务协作,并没有提供任何锁的接口或通用存储数据接口。

zk service

Zookeeper 不适合用来作为海量存储,对于大量数据的存储应该考虑数据库或者分布式文件系统。

设计目的

  • 最终一致性:client 不论连接到哪个 Server,展示给它都是同一个视图,这是 zookeeper 最重要的性能。
  • 可靠性:具有简单、健壮、良好的性能,如果消息 m 被其中一台服务器接受,那么它将被所有的服务器接受。
  • 实时性:Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper 不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用 sync() 接口。
  • 等待无关(wait-free):慢的或者失效的 client 不得干预快速的 client 的请求,使得每个 client 都能有效的等待。
  • 原子性:更新只能成功或者失败,没有中间状态。
  • 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息 b 前被发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必将排在 b 前面。

数据结构和等级

Zookeeper 提供的命名空间通常是 / 开头,并且有着明确的等级管理。

Zookeeper 命名空间中的每一个节点(node)都包含一组数据,子节点亦然。可以想象成文件系统中的目录,但是这个目录同样也有数据。Zookeeper 被设计用来保存协同数据,包括状态信息,配置,位置信息,等等,所以数据通常很小,bytes 到 kilobyte 大小。通常把这些节点叫做 znode。

Znodes 维护一个结构,包含数据变化版本号,ACL 变化,时间戳,cache 验证等。每一个节点都拥有 Access Control List(ACL) 限制谁可以访问。Znode 的版本号随着数据变化而递增。

基本原理

ZooKeeper 数据节点类型:

  • 临时节点 (ephemeral) 会话结束,被服务端干掉
  • 永久节点 (persistent) 可持久化
  • 顺序节点 (sequence) 顺序节点

服务器节点类型

  • leader: 选举出的 leader 服务器节点
  • follower: 负责参与选举的服务器节点
  • observer: 不参加选举

服务端选举算法 paxos 类似 客户端通信方式 JAVA-NIO

服务端运行

ZooKeeper 服务器端运行于两种模式下:standalone 和 quorum。

  • standalone 一个单独服务器,ZooKeeper 状态无法复制。
  • quorum 一组服务器,同时服务器客户端请求。

选举算法,类似 paxos 算法

ZKReentrantLock lock = new ZKLock(zk,timeout,sessionManager);

lock.lock();
....... your thing
lock.unlock();

ZAB 协议

ZAB 协议(Zookeeper Atomic Broadcast)是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性

术语

quorum:集群中超过半数的节点集合

ZAB 中的节点有三种状态:

  • following:当前节点是跟随者,服从 leader 节点的命令
  • leading:当前节点是 leader,负责协调事务
  • election/looking:节点处于选举状态

节点的持久状态

  • history:当前节点接收到事务提议的 log
  • acceptedEpoch:follower 已经接受的 leader 更改年号的 NEWEPOCH 提议
  • currentEpoch:当前所处的年代
  • lastZxid:history 中最近接收到的提议的 zxid (最大的)

Zab 可以满足以下特性

  • Reliable delivery 可靠提交:如果消息 m 被一个 server 递交 (commit) 了,那么 m 也将最终被所有 server 递交。
  • Total order 全序:如果 server 在递交 b 之前递交了 a,那么所有递交了 a、b 的 server 也会在递交 b 之前递交 a。
  • Casual order 因果顺序:对于两个递交了的消息 a、b,如果 a 因果关系优先于 (causally precedes)b,那么 a 将在 b 之前递交。

follower 要么 ack,要么抛弃 Leader,因为 zookeeper 保证了每次只有一个 Leader。另外也不需要等待所有 Server 的 ACK,只需要一个 quorum 应答就可以了。

Zab 工作模式

两种模式,分为 broadcast 模式(广播模式,同步)和 recovery 模式(恢复模式,选 leader)

为了保证事务的顺序一致性,ZooKeeper 采用了递增的事务 id 号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了 zxid。实现中 zxid 是一个 64 位的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新的 epoch,标识当前属于那个 leader 的统治时期。低 32 位用于递增计数。

每个 Server 在工作过程中有三种状态:

  • LOOKING:当前 Server 不知道 leader 是谁,正在搜寻
  • LEADING:当前 Server 即为选举出来的 leader
  • FOLLOWING:leader 已经选举出来,当前 Server 与之同步

Follower 收到 proposal 后,写到磁盘(尽可能批处理),返回 ACK。

Leader 收到大多数 ACK 后,广播 COMMIT 消息,自己也 deliver 该消息。

Follower 收到 COMMIT 之后,deliver 该消息。

选主流程

leader 奔溃或者 leader 失去大多数 follower 时,zk 进入恢复模式,恢复

reference


2018-06-19 zookeeper , apache , hadoop

Fabric 2.x 使用

Fabric 在升级 2.x 之后,几乎就是重写了。很多以前的用法都变了,然后在 1.x 时代,本地和远程都是用一套代码处理,但是 2.x 的时候将 local 处理部分和远程处理部分分别拆分为 fab 和 invoke 了,拆分的理由可以参考这里

以前 Fabric 是不支持 Python 3 的,升级之后的版本可以完美支持 Python 3,然后下面是 Fabric 2.x 的升级理由:

  • Python 3 compatibility support 2.7 and 3.4+
  • Thread-safe
  • API reorganized around fabric.connection.Connection
  • Command-line parser overhauled to allow for regular GNU/POSIX style flags and options on a per-task basis (no more fab mytask:weird=custom,arg=format);
  • Task organization is more explicit and flexible
  • Tasks can declare other tasks to always be run before or after themselves;

更多关系 1.x 和 2.x 的对比可以参考这个网址

忘记 1.x 的一切,然后从头开始


2018-06-19 fabric , python , deploy

《分布式服务架构:原理、设计与实战》读书笔记

总得来说这本书按照微服务的各个内容介绍了一遍,但是只适合入门,并不适合深入了解。看完可以对什么是微服务有一个大致的了解,对于自己实现一个微服务架构还是需要更多的阅读。

第 1 章 原理

微服务架构的目的是为了解决传统单体应用在业务急剧增长时遇到的水平扩展问题。通过拆分服务,将微服务系统中的服务划分明确的职责,做到低耦合,高内聚。

微服务交互模式

  1. 读者容错处理
  2. 消费者驱动契约模式,服务提供者向所有消费者承诺遵守的约束,一旦消费者把具体期望告诉提供者,提供者无论在什么时间和场景下,都不应该打破契约。

两个概念:

  • 水平扩展,扩展单节点
  • 垂直扩展,功能拆分,专业的人做专业的事,将复杂功能拆分为多个单一,简单功能的组合

SOA 面向服务的架构

常见的 SOA 服务化架构

  • Dubbo
  • Thrift

第 2 章 分布式系统一致性问题

分布式系统 CAP 原理

  • Consistency 一致性,同一时刻,所有副本数据一致
  • Availablity 可用性
  • Partition tolerance 分区容忍性,可容忍部分数据丢失,但系统仍然能够继续工作

三者不能同时兼得。

BASE 思想,满足 CAP 原理,牺牲强一致性获得可用性,通过最终达到一致性来满足业务

  • BA Basically Available 基本可用
  • Soft State 软状态,状态可以在一段时间内不同步
  • Eventually Consistent,最终一致性,在一定时间窗口内达到一致

解决方案:

  • 两阶段提交协议
  • 三阶段提交协议
  • TCC 协议

第 3 章 服务化系统容量评估末日性能保障

容量:按照峰值 5 倍冗余计算

MySQL

  • 单端口读 1000/s
  • 单端口写 700/s
  • 单表容量 5000 万

Redis

读写 40000/s

Kafka 单机 读 30000/s 写 5000/s

然后书上介绍了一些压测工具,ab,jmeter,mysqlslap,sysbench,dd,loadRunner,hprof 等等

第 4 章 日志

首先介绍了一些日志框架,然后是 ELK。

第 5 章 调用链

这部分没有细看,先开始介绍了 APM 的功能和作用,然后介绍了 Dapper 论文里面提到的调用链跟踪原理。

第 6 章 线上问题

海恩法则:

每一次严重事故的背后,必然有 29 次轻微事故和 300 起未遂先兆及 1000 起事故隐患。

墨菲定律,这个条太熟悉了,星际穿越中就提及了

如果有两种或两种以 上 方式去做某件事情,而选择其中一种方式将导致灾难,则必定有人会做出这种选择。

墨菲定律实际上是个心理学效应,如果你担心某种情况会发生,那么它更有可能发生,久而久之就一定会发生。

后面介绍了 java 自带的调试工具,还有一些 Linux 下的常用命令。

后面作者举了一个真实的线上问题解决思路。

第 7 章 服务容器化

主要就是介绍 Docker 了。

第 8 章

关于敏捷开发,持续集成,持续交付和持续部署。然后是一些常用的开发,运维工具。


2018-06-18 distributed-system , reading , book

威联通折腾篇五:安装 Transmission 下载 BT

这一篇讲在威联通上安装和使用下载工具 – Transmission。

Transmission 是一个 BT 客户端,提供了 Web 和命令行界面,非常适合在威联通机子上跑。威联通自身的 Download Station 根本无法用,而迅雷和百度也基本无法用。只能尝试一下这个方法了。

安装

如果看过之前的文章,应该知道威联通第三方的应用市场 QNAP CLUB,在其中直接能够找到 QTransmission。安装完成之后用户名密码是 qnap 和 qnap。

配置文件路径:

  • /opt/QTransmission/etc
  • /share/CACHEDEV1_DATA/.qpkg/QTransmission/etc

为什么有两个路径呢,是因为 opt 目录下的路径其实是一个软连接,指向真实在 /share/CACHEDEV1_DATA/.qpkg/QTransmission 的目录。

如果要修改 WEB 界面的端口,需要同时修改 /mnt/HDA_ROOT/.config/qpkg.conf 里面 QTransmission 配置的端口。

配置

安装完成后直接在威联通 WEB 界面上点击进入,然后使用 qnap - qnap 登录。设置限速、关闭 DHT,然后在路由器上做端口转发,保证 51413 端口开放。

其他常用的配置

"cache-size-mb": 16

然后在威联通中新建共享文件夹,配置下载保存的位置。

"download-dir": "/share/Transmission"

等等。

不过经过我这番尝试,我的 51413 端口依然无法连上,所以放弃了。代替方案先用小米路由器好了。


2018-06-17 qnap , qnap-tutorial , download , bt

威联通折腾篇六:文件同步

文件同步应该算是 NAS 最最基本的一个服务了,但是为什么直到篇六才提到他呢,是因为威联通自带的 QSync ,嗯,虽然能用,但是,没有 Linux 客户端,虽然其他平台客户端 OK,但是作为我主力工作的平台没有同步客户端,只能 smb 挂载。而之前搞 zerotier 同局域网速度不佳,其他 frp 内网穿透 也最多拉一些小文件,完全做不到 Dropbox 那样无缝,无痛。

而到现在,腾讯云上的 NextCloud 已经稳定运行近半年,所以如果在威联通上装上 NextCloud 只要网络访问畅通的情况下,做到所有平台访问 NAS 应该问题不大。而说到文件同步,之前的时候还用过 Resilio Sync 和 Syncthing ,为什么不用这两个呢? 一来前者确实很好用,只要手握 key ,就能够做到随时随地同步,但是这个神器 tracker 被屏蔽了,导致根本无法连接到节点,虽然有人 VPN 搞,但终究是躲猫猫的游戏,故放弃。而 Syncthing 同为开源的点对点同步工具,其实一点都不差,虽然需要用到的客户端 Linux Android 都有,但是终究不全,虽然现在好像已经有了 gtk 版本,但也不是那么好用。关于二者的具体对比可以参考后文。

安装 NextCloud

在 Container Station 中安装 NextCloud 相对比较容易,如果熟悉 Docker 可以直接使用 Docker Compose 文件,如果不熟悉,那直接使用 GUI 也比较方便。

安装步骤简单描述如下:

  1. 打开 Container Station ,选择创建,然后搜索 nextcloud,选择 Docker Hub
  2. 安装官方提供的 NextCloud 镜像。 注:以上两步可以简化为 ssh 登陆后 docker pull nextcloud, 如果熟悉命令行推荐使用命令行下载避免界面可能出现的各种奇怪问题
  3. 等待镜像下载完成,选择从镜像创建容器
  4. 修改名字为 “nextcloud”,CPU 内存等配置自己选择
  5. 高级设置中,网络选择 NAT 模式,并且在下方选择一个合适的端口,比如 20080,这样以后访问 NAS 该端口就转发到 Docker 80 端口
  6. 设置共享文件夹,如果使用 docker 默认的 volume ,那么会存储在一个很深的目录中,这里我选择挂载本机共享文件夹,这边到 File Station 中创建一个共享文件夹 NextCloud(注意给予其他用户访问权限),然后回到设置,新增挂载,然后本地路径选择刚刚创建的共享文件夹,然后挂载路径填写 /var/www/html
  7. 完成创建。稍等片刻就会发现 NextCloud 共享文件夹中多出了很多容器的文件,其中 NextCloud 之后会同步的文件也在其中。

完成容器的创建之后,需要首次登录配置,在容器成功运行之后,在界面中会出现一个链接,http://:20080 这样的形式,点击进入,如果一切都没问题,这边应该会出现 NextCloud 首次安装的配置,需要创建管理员和连接数据库。

这边我选择使用 NAS 宿主机的 MySQL 服务,而不像之前使用 Docker Compose 那样 使用 MySQL 容器,主要是 NAS 上可以方便的使用 phpMyAdmin 来管理。NAS 上 MySQL 服务端口 3306。然后还需要注意的一个配置是,在 Container Station 属性,网络属性中有一个桥接地址,该配置为 Docker 容器提供网络访问,记住这边的网关比如我的是 10.0.3.1

在 NextCloud 容器运行成功之后也可以通过在命令行中使用 docker inspect nextcloud 然后查看 Gateway 地址 docker inspect nextcloud | grep "Gateway" 来查看 Docker 容器的网络配置。

在 Docker 中连接宿主机 MySQL 时需要特别注意,这个时候不能使用 localhost 或者 127.0.0.1,因为这个时候 localhost 或者 127.0.0.1 会指向 Docker 容器本地的地址,需要换成宿主机,比如这里 NAS 的地址,也就是容器的网关地址,比如我这边上面查看得到的 10.0.3.1

填写 NextCloud 配置之前,在 phpMyAdmin 中先创建 nextcloud 用户和 nextcloud 数据库,记住用户名密码,然后在网页中的配置中填写,然后数据库地址一定需要填写 10.0.3.1:3306 ,这边一定要记住使用容器 Gateway 地址。

选择 NextCloud 的一大原因就是因为 NextCloud 的跨平台支持太棒了,所有的平台都有非常好用的客户端。

下面是我的 Mint 上客户端和网页中同步的内容,局域网中速度还是很快的。

nextcloud qnap docker

或者如果熟悉 compose 也可以使用

version: "3"
services:
  nextcloud:
    image: nextcloud:apache
    container_name: nextcloud
    restart: always
    ports:
      - 20080:80
    volumes:
      - /share/NextCloud:/var/www/html

确保 /share/NextCloud 也就是 NextCloud 共享文件夹以及创建

Resilio Sync VS Syncthing

他们都可以免费使用,都是为了解决文件在多台设备之间同步的问题,都采用了 P2P 点对点传输技术(数据不经过第三方,从一点直接加密传输到另一点)。

Resilio Sync

特别的,Resilio Sync 拥有近乎完美的跨平台产品线,Android、iOS、Windows Phone、MacOS、Windows、Linux、BSD、以及几乎所有的商业 NAS 操作系统都有对应的客户端。

从软件界面来说,Resilio Sync 对桌面系统和手机系统都提供了原生的客户端界面,对 Linux、BSD、NAS 等系统则提供基于网页的管理界面。

从原理上来讲 Resilio Sync 是通过官方的 Tracker 追踪服务器建立多台设备之间的连接,最终实现数据从一台设备以最快速度传输到另外一台设备。由于软件本身是闭源的,因此软件在与 Tracker 服务器连接的过程中是否会泄露用户隐私就不得而知了。

Syncthing

有人说,Syncthing 就是为替代 Resilio Sync 而生的,它不但能实现相应的数据同步功能,它还完全开放源代码。

Syncthing 由社区驱动,即程序是由社区里的技术爱好者们共同开发的,任何人都可以参与到软件的开发中去,人人都可以看到软件的源代码。因此,社区负责人敢拍着胸脯说,我们尊重隐私、我们真正安全、我们简单好用。

然而,Syncthing 在跨平台的方面的确略逊一筹,社区仅以开发核心软件为主,如果需要某个特殊系统平台的客户端,要么你自己动手开发,要么就是等其他技术高手开发。比如苹果手机系统 iOS、Windows Phone 就没有对应版本的 Syncthing 客户端。

在软件界面方面,Syncthing 原生仅提供基于终端的命令行控制和基于网页的管理界面。移动端仅提供 Android 系统客户端。近期社区又发布了跨平台的 Syncthing-GTK 客户端支持 Linux 各发行版和 Windows 系统。

如果你想选择这两者,这里有些参考:

  • 如果你需要在多种不同系统的设备之间同步数据,那么就选择 Resilio Sync;
  • 如果你要同步的是机密级别数据,那么就选择 Syncthing;
  • 喜欢折腾就选 Syncthing,闲麻烦就选 Resilio Sync;
  • 如果你想要可靠稳定,未来有意向付费使用更多功能,Resilio Sync 是不二之选;
  • 设备的硬件配置不高的情况下 Syncthing 会更轻便;

2018-06-17 qnap , qnap-tutorial , file-sync , syncthing , dropbox , resilio-sync , resilio , nextcloud

电子书

最近文章