HelloWorld搬运工

HelloWorld搬运工

消息“时序”与“一致性”为何这么难

分布式系统中,很多业务场景都需要考虑消息投递的时序,例如:(1)单聊消息投递,保证发送方发送顺序与接收方展现顺序一致(2)群聊消息投递,保证所有接收方展现顺序一致(3)充值支付消息,保证同一个用户发起的请求在服务端执行序列一致消息时序是分布式系统架构设计中非常难的问题,ta为什么难,有什么常见优化...

2017-11-30 08:07:13

阅读数:174

评论数:0

IM状态同步究竟是推还是拉

需求缘起 “在线状态一致性”(好友在线状态,群友在线状态)是即时通讯领域较难解决的一个技术问题,如何精准实时的获得好友、群友的在线状态,是今天将要探讨的话题。 好友状态一致性 问题一:用户uid-A登录时,如何获取自己全部好友的在线状态? 回答: (1)服务器要存储所有用户的在线...

2017-11-28 08:20:30

阅读数:214

评论数:0

群消息这么复杂,怎么能做到不丢不重

群聊是多人社交的基本诉求,不管是QQ群,还是微信群,一个群友在群内发了一条消息: (1)在线的群友能第一时间收到消息 (2)离线的群友能在登陆后收到消息 由于“消息风暴扩散系数”的存在,群消息的复杂度要远高于单对单消息。群消息的实时性,可达性,离线消息是今天将要讨论的核心话题。   【常...

2017-11-27 22:48:17

阅读数:59

评论数:0

IM多点登录与消息漫游架构随想

提问:什么是多点登录? 回答:以微信为例,可以PC端,phone端同时登录,同时收发消息。 需要注意的是,一个端只能登录一个实例,例如同一个QQ号,在pc1上登录,再到pc2上登录,后者会把前者踢出,pc1会收到通知“你已在别处登录xxoo”。   提问:什么是消息漫游? 回答:在任何一...

2017-11-27 22:41:12

阅读数:298

评论数:0

im不丢“离线消息”设计

问题:接收方不在线时,消息发送的流程是怎么样的? 回答:如上图所述, (1)用户A发送消息给用户B (2)服务器查看用户B的状态为offline (3)服务器将消息存储到DB中 (4)服务器返回用户A发送成功(对于发送方而言,消息落地DB就认为发送成功)   问题:离线消息表的设计...

2017-11-26 17:48:01

阅读数:696

评论数:0

im不丢消息设计

一、报文类型 im的客户端与服务器通过发送报文(也就是网络包)来完成消息的传递,报文分为三种 请求报文(request,后简称为为R) 应答报文(acknowledge,后简称为A) 通知报文(notify,后简称为N),这三种报文的解释如下: R:客户端主动发送给服务器的报文 A:服务器...

2017-11-26 17:28:48

阅读数:312

评论数:0

微服务架构多“微”才合适

一、互联网架构为什么要进行服务化-总结 上一篇和大伙交流了一下,随着数据量、并发量、业务复杂度的增长,互联网架构会出现以下问题: (1)代码到处拷贝 (2)底层复杂性扩散 (3)基础库(so/jar/dll)耦合 (4)SQL质量得不到保障,业务相互影响 (5)数据库耦合 “服务化”...

2017-11-26 08:21:19

阅读数:453

评论数:0

数据库秒级平滑扩容架构方案

一、缘起 (1)并发量大,流量大的互联网架构,一般来说,数据库上层都有一个服务层,服务层记录了“业务库名”与“数据库实例”的映射关系,通过数据库连接池向数据库路由sql语句以执行: 如上图:服务层配置用户库user对应的数据库实例物理位置为ip(其实是一个内网域名)。   (2)随着...

2017-11-23 21:55:05

阅读数:92

评论数:0

一分钟掌握数据库垂直拆分

一、缘起 当数据库的数据量非常大时,水平切分和垂直拆分是两种常见的降低数据库大小,提升性能的方法。假设有用户表: user( uid bigint, name varchar(16), pass varchar(16), age int, sex tinyint, flag tin...

2017-11-23 21:31:42

阅读数:297

评论数:0

即使删了全库,保证半小时恢复

【高可用数据库架构】 一般来说数据库集群会是主从架构: 或者主主架构:   如果此时主库宕机,可以: (1)一个从库顶上,重建集群 (2)流量迁移到另一个主库 来保证数据的安全性与服务的可用性。   但是,如果人为不小心执行了“删全库”操作,命令会同步给其他从(主)库,导致所...

2017-11-23 21:18:29

阅读数:96

评论数:0

互联网公司为啥不使用mysql分区表

缘起:有个朋友问我分区表在58的应用,我回答不出来,在我印象中,百度、58都没有听说有分区表相关的应用,业内进行一些技术交流的时候也更多的是自己分库分表,而不是使用分区表。于是去网上查了一下,并询问了58到家的DBA专家,将自己收到的信息沉淀下来,share给大伙。   解决什么问题? 回答...

2017-11-22 08:05:41

阅读数:209

评论数:0

主从DB与cache一致性

本文主要讨论这么几个问题: (1)数据库主从延时为何会导致缓存数据不一致 (2)优化思路与方案   一、需求缘起 上一篇《缓存架构设计细节二三事》中有一个小优化点,在只有主库时,通过“串行化”的思路可以解决缓存与数据库中数据不一致。引发大家热烈讨论的点是“在主从同步,读写分离的数据库架构...

2017-11-20 07:59:30

阅读数:172

评论数:0

缓存与数据库一致性保证

本文主要讨论这么几个问题: (1)啥时候数据库和缓存中的数据会不一致 (2)不一致优化思路 (3)如何保证数据库与缓存的一致性   一、需求缘起 上一篇《缓存架构设计细节二三事》(点击查看)引起了广泛的讨论,其中有一个结论:当数据发生变化时,“先淘汰缓存,再修改数据库”这个点是大家讨论...

2017-11-15 07:19:58

阅读数:105

评论数:0

细聊冗余表数据一致性

本文主要讨论四个问题: (1)为什么会有冗余表的需求 (2)如何实现冗余表 (3)正反冗余表谁先执行 (4)冗余表如何保证数据的一致性   一、需求缘起 互联网很多业务场景的数据量很大,此时数据库架构要进行水平切分,水平切分会有一个patition key,通过patition k...

2017-11-14 07:26:47

阅读数:187

评论数:0

缓存架构设计细节二三事

本文主要讨论这么几个问题: (1)“缓存与数据库”需求缘起 (2)“淘汰缓存”还是“更新缓存” (3)缓存和数据库的操作时序 (4)缓存和数据库架构简析   一、需求缘起 场景介绍 缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。 例如对...

2017-11-13 22:50:41

阅读数:115

评论数:0

数据库软件架构设计些什么

一、基本概念 二、数据库架构设计思路 (1)可用性 (2)读性能 (3)一致性 (4)扩展性 一、基本概念 概念一“单库” 概念二“分片” 分片解决的是“数据量太大”的问题,也就是通常说的“水平切分”。 一旦引入分片,势必有“数据路由”的概念,哪个数据访...

2017-11-13 22:24:14

阅读数:150

评论数:0

100亿数据1万属性数据架构设计

对于version + ext方案,还是有很多朋友质疑“线上不可能这么用”。本篇将讲述一下58同城最核心的数据“帖子”的架构实现技术细节,说明不仅不是“不可能这么用”,而是大数据,可变属性,高吞吐场景下的“常用手段”。   一、背景描述及业务介绍 问:什么是数据库扩展的version + ...

2017-11-12 08:50:31

阅读数:315

评论数:0

这才是真正的表扩展方案

零、缘起 讨论问题域: (1)数据量大、并发量高场景,在线数据库属性扩展 (2)数据库表结构扩展性设计   一、哪些方案一定是不行的 (1)alter table add column 要坚持这个方案的,也不多解释了,大数据高并发情况下,一定不可行   (2)通过增加表的方式扩...

2017-11-12 08:29:46

阅读数:230

评论数:0

啥,又要为表增加一列属性?

需求缘起 产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计: user(uid, name, passwd, nick) 第二版,产品经理增加了年龄,性别两个属性,表结构可能要变成: user(uid, name, passwd, nick, age, sex) 假设数据...

2017-11-12 08:18:08

阅读数:238

评论数:0

一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)

单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份 集群部署(cluster):有多个饮水机同时提供服务,服务冗余部署,每个冗余的服务都对外提供服务,一个服务挂掉时依然可用 热备部署(hot-swap):只有一个桶提供服务,另一个桶stand-by,在水用完时自动热...

2017-11-11 08:02:55

阅读数:259

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭