旧·时光 | Time

Something that stays in your mind will someday spring up in your life.

Java 中的静态代理与动态代理

RPC 相关第五篇

什么是代理模式 人话来讲就是由代理对象来执行目标对象的方法,且还可以在代理对象中增强目标对象方法的一种设计模式。类比生活,像是房产中介。代理模式存在的意义和一个架构设计原则息息相关 —— 开闭原则(对扩展开放,对修改关闭),即一种好的设计模式,都是在不修改原有形态的基础上扩展出新的功能。 为什么需要代理 代理模式的概念很容易理解,但是早期的我即使读懂了代理模式的概念,对为什么要使用代理模式...

[译] Async IO on Linux: select, poll, and epoll

RPC 半相关第四篇

原文地址:Async IO on Linux: select, poll, and epoll 作者:Julia Evans 虽然一直是个 Java 程序员,但是 select、poll、epoll 这些词汇还是经常听见的,上次写完 UNIX I/O 之后又去再看了一下这部分内容,遇到了这篇文章,感觉不错特此翻译下来,下面是正文。 今天讲一讲我从这本书《The Linux Program...

UNIX 下的 I/O 模型

RPC 相关第三篇

开篇 RPC 中很重要的部分就是网络通信,因此这篇叙述一下 Unix 下为解决不同 I/O 问题所设计的 I/O 模型。首先要说明的是,I/O 是个很宽泛的概念,常见的有网络 I/O、磁盘 I/O、内存 I/O 等。 在 Unix 系统下,不论是标准输入还是借助套接字接受网络输入,其实都会有两个步骤,很多文章都提到: 等待数据准备好(Waiting for the data to ...

如何实现一个简单的 RPC 调用流程

RPC 相关第二篇

Intro 今天花了半天,学习了一下如何创建 Maven 多模块项目,主要参考了以下博客: IntelliJ IDEA 构建maven多模块工程项目(详细多图) IntelliJ IDEA中创建Web聚合项目(Maven多模块项目) 在搭建好项目框架之后,实现了一个简单版本的 RPC 调用 —— 项目地址,其中实践了一下 GuavaCache 中学到的 Builder 设计模...

浅谈 RPC、RMI、REST 这些很绕的概念

最近准备详细看一下 RPC 相关的知识,这是第一篇

什么是 RPC RPC(Remote Procedure Call) 翻译过来叫远程过程调用,加上 Protocol 之后也有称之为远程过程调用协议,可以由不同的语言实现,根据维基百科的解释 —— RPC 指在分布式环境下,一个计算机程序能调用另一个不同地址空间里的方法(不同地址空间通常指局域网下的另一台计算机),但是编码的形式就像调用一个本地方法一样,程序员不用去关心背后的细节。 为什么...

Redis 主从复制 psync1 和 psync2 的区别

Redis 2.8 版本带来了 psync1,解决了断线重连之后的全量同步问题,4.0 版本带来了其改进版 psync2,解决了主从切换和 slave 重启导致的全量同步问题。

写在前面 在分布式环境中,数据副本 (Replica) 和复制 (Replication) 作为提升系统可用性和读写性能的有效手段被大量应用系统设计中,Redis 也不例外。Redis 作为单机数据库使用时,适用常见有限且存在单点宕机问题,无法维持高可用。因此 Redis 允许通过 SLAVEOF 命令或者 slaveof 配置项来让一个 Redis server 复制另一个 Redis s...

Cassandra - A Decentralized Structured Storage System

论文阅读系列

Intro & Related Work Cassandra 来自于 Facebook 的分布式存储系统,目的是取得可拓展性和高可用性,一开始主要为了 Inbox Search 这个功能设计,该功能要求系统能处理高频的写入吞吐量,为了减少延迟也要求跨地域部署。相关工作这部分简述了几个代表性的分布式存储系统实现,包括 GFS,Dynamo,Bayou,Ficus 等,讲了他们在架构设计...

详解布隆过滤器的原理、使用场景和注意事项

今天碰到个业务,他的 Redis 集群有个大 Value 用途是作为布隆过滤器,但沟通的时候被小怼了一下,意思大概是 “布隆过滤器原理都不懂,还要我优化?”。技术菜被人怼认了、怪不得别人,自己之前确实只是听说过这个,但是没深入了解过,趁这个机会补充一下知识。 在进入正文之前,之前看到的有句话我觉得说得很好: Data structures are nothing different...

从大学到工作一个月,自己发生了哪些变化

从生理上和心理上两个方面来回答

最开始,这是 凯老师 在知乎上邀请我回答的一个问题。 从生理上和心理上两个方面来回答: 生理上 变胖了,动的少了,专业关系经常缩在椅子里,深感颓废,最近重拾运动之后瘦了十斤,还要继续 越来越喜欢晴天,讨厌下雨天,晴天会很愿意出去走走 比起大一大二的什么地方都会骑车去,变成了之后的什么地方都优先走路去 实习之后比较喜欢花钱买时间 能静下心来看书的时候越来越少...

Zookeeper 在构建系统中的作用

这篇主要聊一聊,Zookeeper 在业界构建系统时,一般承担什么样的功能,注册中心?分布式锁?亦或是 Name Serivce 等 什么是 Zookeeper Zookeeper 是 Yahoo! 基于 Google Chubby 论文的思想,结合自己的实践经验开发而来,2011 年成为 Apache 顶级项目,本质上是一个高可用的分布式协调服务(highly reliable dist...

Megastore: Providing Scalable, Highly Available Storage for Interactive Services

论文阅读系列

摘要 Megastore 是 Google 为了满足联系愈加紧密的 online service 而研发的存储服务,它结合了 NoSQL 的可拓展性和传统 RDBMS 的易用性,且在此基础上提供了强一致性和高可用性保障。他们提供了完全序列化的 ACID 语义和良好的数据分区,这种分区借助网络进行跨地域地副本同步,保证延迟在可接受的范围内且提供无缝的故障转移。论文介绍了 Megastore 的...

怎样做可靠的分布式锁,Redlock 真的可行么?

本文是对 Martin Kleppmann 的文章 How to do distributed locking 部分内容的翻译和总结

本文是对 Martin Kleppmann 的文章 How to do distributed locking 部分内容的翻译和总结,上次写 Redlock 的原因就是看到了 Martin 的这篇文章,写得很好,特此翻译和总结。感兴趣的同学可以翻看原文,相信会收获良多。 开篇作者认为现在 Redis 逐渐被使用到数据管理领域,这个领域需要更强的数据一致性和耐久性,这使得他感到担心,因为这不...

Dynamo: Amazon’s Highly Available Key-value Store

论文阅读系列

这篇论文叙述的是 Amazon 研发的高可用 Key-Value 存储系统,Dynamo。很多 Amazon 的核心服务依赖于它,它通过牺牲在某些特定失效情况下的数据一致性来保证高度可用。它采用一致性哈希来获得可伸缩性和提高可用性,并且通过对象版本(Object Versioning)来保证一致性。在更新数据过程中,副本之间的一致性通过一种 quorum-like 技术和去中心化的同步复制协...

基于 Redis 的分布式锁 Redlock

这篇文章主要是对 Redis 官方网站刊登的 Distributed locks with Redis 部分内容的总结和翻译。 什么是 RedLock Redis 官方站这篇文章提出了一种权威的基于 Redis 实现分布式锁的方式名叫 Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性: 安全特性:互斥访问,即永远只有一个 client 能拿到锁 避免死锁...

Spanner: Google’s Globally-Distributed Database

论文阅读系列

Spanner 是谷歌的可伸缩、多版本、全球分布、支持同步复制的数据库,它是第一个在全球范围内传递数据且保证外部一致的分布式事务的系统。论文叙述了它的架构、特征、许多设计的依据和一个新的可以暴露时钟不确定性的API。 简介 开篇叙述了 Spanner 的一些特性,在全球分布的 Paxos 状态机上进行 data sharding,利用复制保证整体可用性和地域局部性,客户端会自动在副本间进...