Cache 101

前言 在现在互联网系统中cache无处不在,无时不用。 定义 wiki定义如下: a cache is a hardware or software component that stores data so that future requests for that data can be served faster; 工作原理 一句话:通过将源数据缓存Cache,实现直接通过Cache访问数据。 ...

January 8, 2019

软件工程的法则与名言

Programming “All problems in computer science can be solved by another level of indirection.” — David Wheeler “But that usually will create another problem.” — David Wheeler “Simplicity is prerequisite for reliability.” — Edsger Dijkstra ...

May 11, 2018

高性能服务器设计与优化

为了构建自己的知识体系,对高性能服务器设计与优化一点想法,其中不足与错误,欢迎指正。 高性能服务器设计与优化

May 9, 2017

对于系统设计的一些想法

前言 学习了google,facebook等国际一流大厂的开源方案,也研究了国内BAT的一些设计案例,在平时工作自然也少不了一些系统设计的工作,想写一些自己的想法,同时也帮助自己梳理一下思路,实现自己的系统设计的套路。 ...

April 8, 2017

IM后端系统设计总结(2)

这篇具体写一下用户在线状态系统的具体设计。 后端架构 这个后端系统设计如下图: 很大众,国内基本都这么干,不多说 用户状态系统设计 初期设计 单IDC部署,设计如下: 相关说明 AG:接入网关,负责用户的连接 ConnRouter:连接路由服务器,主要提供以下功能: 所有用户状态的维护 用户状态查询 用户状态推送 用户状态同步 异步消息路由与转发 状态通知流: 用户登录成功或者下线状态通知 状态同步流:ConnRouter服务器之间用户状态的同步,不需要推送给订阅者 用户消息流: 异步发送给用户的消息在服务器内部的传输 设计要点 参考Kafka的模型,将用户状态改变作为事件,将事件描述为消息,将消息队列化成消息队列 AG对应Kafka中的Producer角色,主要原因是用户状态是用户连接的影子,AG能真实快速感知用户状态 ConnRouter对应Kafka中的Broker UserStat(用户统计与分析)与StateNotify(用户状态通知)对应Kafka中的Consumer 减少耦合,以异步发送消息到用户为例,整个流程三步走: 第一步:生成发送消息,发送到ConnRouter 第二步:根据目的用户ID,查找到出口AG,将消息转发到出口AG 第三步:出口AG查找用户连接,通过连接发送到目的用户 ConnRouter设计 用户状态数据存储设计 用户状态数据存储设计,如下图所示: ...

August 5, 2016

IM后端系统设计总结(1)

定义IM 为用户提供即时消息服务,这里面有三个关键词:用户,消息,服务;下面根据三个关键词来展开总结,先从消息开始。 消息 消息分类 对消息分类,很简单但是重要,方便后面业务的拆分。 ...

July 29, 2016

10 Lessons from 10 Years of Amazon Web Services(译文)

前言 亚马逊在2006年3月14日发布AWS,到现在差不多10年了。回首过去的10年里,我们在构建 安全,高可用性,可扩展性,低成本的服务方面积累了几百条经验与教训。 由于AWS是建设并在全球运营这些服务的先驱,这些教训对我们的业务至关重要。正如我们以前多次说,“没有压缩经验的算法”,每月有超过百万的活跃客户,这些客户服务几个亿的用户,在这个过程我们不乏机会积累经验并持续优化从而为客户提供更好的服务。 ...

June 2, 2016

Facebook live一些技术细节

协议选择 最初选择HLS,后面切换为RTMP,切换为RTMP主要为了降低延迟,提供更好直播用户体验。 解决并发问题 分发架构 采用Live stream server, origin server, edge server 三层架构;如下图如示: ![分发架构图](/images/facebook live arch.png) 一句话就是:通过遍布各地的CDN节点(edge server)实现海量用户的播放请求。 ...

May 27, 2016