- 博客(22)
- 资源 (9)
- 收藏
- 关注
原创 im不丢消息设计
一、报文类型im的客户端与服务器通过发送报文(也就是网络包)来完成消息的传递,报文分为三种请求报文(request,后简称为为R)应答报文(acknowledge,后简称为A)通知报文(notify,后简称为N),这三种报文的解释如下:R:客户端主动发送给服务器的报文A:服务器被动应答客户端的报文,一个A对应一个RN:服务器主动发送给客户端的报文二、普通消息投递流程...
2017-11-26 17:28:48 2005 2
原创 缓存架构设计细节二三事
本文主要讨论这么几个问题:(1)“缓存与数据库”需求缘起(2)“淘汰缓存”还是“更新缓存”(3)缓存和数据库的操作时序(4)缓存和数据库架构简析一、需求缘起场景介绍缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。例如对于用户的余额信息表account(uid, money),业务上的需求是:(1)查询用户的余额,SE...
2017-11-13 22:50:41 499
原创 数据库软件架构设计些什么
一、基本概念二、数据库架构设计思路(1)可用性(2)读性能(3)一致性(4)扩展性一、基本概念概念一“单库”概念二“分片”分片解决的是“数据量太大”的问题,也就是通常说的“水平切分”。一旦引入分片,势必有“数据路由”的概念,哪个数据访问哪个库。路由规则通常有3种方法:(1)范围:range优点:简单,容易扩展缺点:各库...
2017-11-13 22:24:14 1123
原创 100亿数据1万属性数据架构设计
对于version + ext方案,还是有很多朋友质疑“线上不可能这么用”。本篇将讲述一下58同城最核心的数据“帖子”的架构实现技术细节,说明不仅不是“不可能这么用”,而是大数据,可变属性,高吞吐场景下的“常用手段”。一、背景描述及业务介绍问:什么是数据库扩展的version + ext方案?使用ext来承载不同业务需求的个性化属性,使用version来标识ext里各个字段的含义...
2017-11-12 08:50:31 513
原创 这才是真正的表扩展方案
零、缘起讨论问题域:(1)数据量大、并发量高场景,在线数据库属性扩展(2)数据库表结构扩展性设计一、哪些方案一定是不行的(1)alter table add column要坚持这个方案的,也不多解释了,大数据高并发情况下,一定不可行(2)通过增加表的方式扩展,通过外键join来查询大数据高并发情况下,join性能较差,一定不可行(3)通过增加表...
2017-11-12 08:29:46 669
原创 啥,又要为表增加一列属性?
需求缘起产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计:user(uid, name, passwd, nick)第二版,产品经理增加了年龄,性别两个属性,表结构可能要变成:user(uid, name, passwd, nick, age, sex)假设数据量和并发量比较大,怎么变?(1)alter table add column?不太可行,锁表时间长...
2017-11-12 08:18:08 414
原创 一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)
单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份集群部署(cluster):有多个饮水机同时提供服务,服务冗余部署,每个冗余的服务都对外提供服务,一个服务挂掉时依然可用热备部署(hot-swap):只有一个桶提供服务,另一个桶stand-by,在水用完时自动热替换,服务冗余部署,只有一个主服务对外提供服务,影子服务在主服务挂掉时顶上磁盘阵列RAID(Red...
2017-11-11 08:02:55 586
原创 mysql中decimal,numeric,double,float的区别
概述:简单来说decimal,numeric属于标准数据类型,指定精度和刻度;decimal的存储大小不确定,numeric的存储大小默认8个字节。double,float属于非标准数据类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理...
2017-11-10 18:35:46 11162
原创 一分钟了解两阶段提交2PC
一、概念二阶段提交2PC(Two phase Commit)是指,在分布式系统里,为了保证所有节点在进行事务提交时保持一致性的一种算法。二、背景在分布式系统里,每个节点都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。当一个事务跨多个节点时,为了保持事务的原子性与一致性,需要引入一个协调者(Coordinator)来统一掌控所有参与者(Participant)...
2017-11-10 08:06:01 660
原创 连接池原来这么简单
一、如何通过连接访问下游工程架构中有很多访问下游的需求,下游包括但不限于服务/数据库/缓存,其通讯步骤是为:(1)与下游建立一个连接(2)通过这个连接,收发请求(3)交互结束,关闭连接,释放资源这个连接是什么呢,通过连接怎么调用下游接口?服务/数据库/缓存,官方会提供不同语言的Driver、Document、DemoCode来教使用方建立连接与调用接口,以MongoDB的...
2017-11-10 07:53:59 869
原创 一分钟实现分布式锁
一、缘起分布式环境下,多台机器上多个进程对一个数据进行操作,如果不做互斥,就有可能出现“余额扣成负数”,或者“商品超卖”的情况,如何实现简易分布式锁,对分布式环境下的临界资源做互斥,是今天将要讨论的话题。二、互斥原理原理:多个访问方对同一个资源进行操作,需要进行互斥,通常是利用一个这些访问方同时能够访问到的lock来实施互斥的。例子1:同一个进程内,多个线程的互斥,典型...
2017-11-10 07:43:33 455
原创 应用层/安全层/传输层如何进行协议选型
系统设计,协议先行。大部分技术人没有接触协议的设计细节,更多的是使用已有协议进行应用层的编码,例如:(1)使用http作为载体,设计get/post/cookie参数(2)使用dubbo框架,而不用去深究内部的二进制包头包体,以及序列号反序列化的细节无论如何,了解协议设计的原则,对深入理解系统通信非常有帮助。今天就以即时通讯(后称im)为例,讲讲应用层的协议选型。一...
2017-11-09 19:03:11 995
原创 互联网架构为什么要做服务化?
一、互联网高可用架构,为什么要服务化?【服务化之前高可用架构】在服务化之前,互联网的高可用架构大致是这样一个架构:(1)用户端是浏览器browser,APP客户端(2)后端入口是高可用的nginx集群,用于做反向代理(3)中间核心是高可用的web-server集群,研发工程师主要编码工作就是在这一层(4)后端存储是高可用的db集群,数据存储在这一层更典型的,w...
2017-11-09 18:39:05 4715 5
原创 单点系统架构的可用性与性能优化
一、需求缘起明明架构要求高可用,为何系统中还会存在单点?回答:单点master的设计,会大大简化系统设计,何况有时候避免不了单点在哪些场景中会存在单点?先来看一下一个典型互联网高可用架构。典型互联网高可用架构:(1)客户端层,这一层是浏览器或者APP,第一步先访问DNS-server,由域名拿到nginx的外网IP(2)负载均衡层,nginx是整个服务端的入口,负责...
2017-11-08 08:13:10 663
原创 关于分布式程序设计常见问题分析
虽然系统越来越复杂,以及新分布式架构设计的思想普及,越来越多的系统采用了分布式的架构,特别是HTTP为交互方式的接口调用,移动端和PC端的并行对分布式架构带来了很大的推动。各式各样的服务接口,在处理业务流程之外有一些共性的问题,正视设计和解决这些问题,会大大提高程序的可用性,扩展性和可维护性。 以下总结是笔者工作中对于分布式设计问题的总结,具体内容如下:1、日期格式时间在生活中是一个容易忽...
2017-11-08 07:21:22 425
原创 互联网架构,如何进行容量设计?
一,需求缘起互联网公司,这样的场景是否似曾相识:场景一:pm要做一个很大的运营活动,技术老大杀过来,问了两个问题:(1)机器能抗住么?(2)如果扛不住,需要加多少台机器?场景二:系统设计阶段,技术老大杀过来,又问了两个问题:(1)数据库需要分库么?(2)如果需要分库,需要分几个库?技术上来说,这些都是系统容量预估的问题,容量设计是架构师必备的技能之...
2017-11-07 22:14:35 421
原创 计数系统架构实践一次搞定
一、需求缘起很多业务都有“计数”需求,以微博为例:微博首页的个人中心部分,有三个重要的计数: 关注了多少人的计数 粉丝的计数 发布博文的计数 微博首页的博文消息主体部分,也有有很多计数,分别是一条博文的: 转发计数 评论计数 点赞计数 甚至是浏览计数 在业务复杂,计数扩展频繁,数据量大,并发量大的情...
2017-11-07 21:33:19 446
原创 58同城推荐系统架构设计与实现
一、推荐系统架构介绍推荐系统是一个微庞大的工程、算法与业务综合的系统,其主要分为三大子系统:1)线下推荐子系统;2)线上推荐子系统;3)效果评估子系统;后文将重点讨论以上三大子系统的设计与实现。二、线下推荐子系统线下推荐子系统又主要分为线下挖掘模块、数据管理工具两大部分。线下挖掘模块线下挖掘模块,是各类线下挖掘算法实施的核心,它读取各种数据源,运用各种...
2017-11-06 08:06:16 1608
原创 互联网智能广告系统简易流程与架构
一、业务简述从业务上看整个智能广告系统,主要分为:1)业务端:广告主的广告后台2)展现端:用户实际访问的页面业务端,广告主主要有两类行为:1)广告设置行为:例如设置投放计划,设置地域,类别,关键字,竞价等2)效果查看行为:例如广告展示次数是多少,广告点击次数是多少等展现端,用户主要也有两类行为:1)站点浏览行为:用户浏览实际的信息,此时广告系...
2017-11-03 08:03:35 1839
原创 58到家通用实时消息平台架构细节
一、解决什么问题 + 难点解决什么业务问题(1)端到云的实时上报需求:58速运司机端GPS实时上报(2)云到端的实时推送需求:58速运司机订单实时推送(3)端到端的聊天消息需求:用户、商户、客服之间的聊天沟通难点:(1)APP无线环境下消息可达性(2)通用性,平台实现尽量与业务解耦二、传统解决方案与潜在不足【端到云:http轮询上报GPS消息】方案...
2017-11-03 07:41:24 1934
原创 秒杀系统架构优化思路
一、秒杀业务为什么难做1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如:12306抢票,票是有限的,库存一...
2017-11-01 08:09:14 595
原创 百度咋做长文本去重
缘起:(1)原创不易,互联网抄袭成风,很多原创内容在网上被抄来抄去,改来改去(2)百度的网页库非常大,爬虫如何判断一个新网页是否与网页库中已有的网页重复呢?这是本文要讨论的问题(尽量用大家都能立刻明白的语言和示例表述)。一、传统签名算法与文本完整性判断问题抛出:(1)运维上线一个bin文件,将文件分发到4台线上机器上,如何判断bin文件全部是一致的?(2)用户A将...
2017-11-01 07:25:33 2161
阿里巴巴9年双11
2018-01-23
阿里巴巴2016双11背后的技术
2018-01-19
Java数据结构概述图表
2017-02-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人