新浪微博架构

微博技术架构 第一版架构 是LAMP架构,优点是可以很快地实现系统,第一版采用推消息模式,假如明星用户有10万粉丝,当用户发表一条微博的时候,把微博消息存成10万份,使用的是MyISAM搜索引擎,优点就是速度很快。 MPSS,多个端口可以布置在同一个服务器上。 假如做一个互联网应用,应用里面有三个单元,可以有两种部署方式。第一种部署方式是把三个单元分别部署在三台服务器上,第二种部署方式是在三台服务器的每台服务器上都部署上这三个单元。推荐第二种部署方式。 上面的第二种部署方式解决了两个问题:第一个问题是负载均衡,第二个问 阅读详情

1     概述

首先给大家介绍一下新浪微博架构发展的历程,新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了3个大的版本。

 

2         架构演变

2.1           第一版LAMP架构

第 一版就 LAMP架构,优点是可以非常快的实现我们的系统。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的 是推消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息存成10万份,这样就是很简单了,第一版的 架构实际上就是这两行字。

2.1.1       结构

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

l        微博的本质是解决发表/订阅问题

l        第1版采用推消息模式,将发表/订阅简化成insert/select问题

 

第一版的技术细节,典型的LAMP架构,是使用MyISAM搜索引擎,它的优点就是速度非常快。

另外一个是MPSS(Multi-Port Single Server), 就是多个端口可以布置在同一服务器上。为什么使用MPSS?假如说我们做一个互联网应用,这个应用里面有三个单元,我们可以由2种部署方式。我们可以把三 个单元分别部署在三台服务器上,另外一种部署模式就是这三个单元部署在每个服务器上都有。我推荐第2种方法。这个方法解决了两个问题,一个是负载均衡,因 为每一个单 元都有多个节点处理,另外一个是可以防止单点故障。如果我们按照模式1来做的话,任何一个节点有故障就会影响我们系统服务,如果模式二的话,任何一个结点 发生故障我们的整体都不会受到影响的。

 

 

 

 

2.1.2       问题和架构演变

 

l         用户快速增长

l         出现发表延迟现象,尤其是明星用户

 

 

2.2           第二版架构

我们微博第一版上线之后,用户非常喜欢这个产品,用户数增长非常迅速。我们技术上碰到几个问题。

第一个问题是发表会出现延迟现象,尤其是明星用户他的粉丝多系统需要处理很长时间。另外系统在处理明星用户发表时系统繁忙可能会影响到其他的用户,因为其他的用户同一时间发表的话,也会受到这个系统的影响。

解决思路:

l         分发推送是造成发表延迟的主要原因

n         模式改进

l         数据规模增大也带来一定延迟

n         规模增大:数据拆分

n         锁表问题:更改引擎

 

我 们就考虑这个系统怎么改进。首先是推模式,这肯定是延迟的首要原因,我们要把这个问题解决掉。其次我们的用户越来越多,这个数据库表从一百万到一亿,数据 规模不一样处理方式是有差别的。我们第一版单库单表的模式,当用户数量增多的时候,它不能满足就需要进行拆分。第二个是锁表的问题,我们考虑的是更改引 擎。另外一个是发表过慢,我们考虑的是异步模式。

第二版我们进行了模块化:

 

 

 

我们首先做了一个分层,最底层叫基础层,首先对数据做了拆分,图上最右边是发表做了异步模式。

2.2.1       投递模式优化

第 二个服务层,我们把微博基础的单元设计成服务层一个一个模块,最大改进是对推模式进行了改进。首先看一下投递模式的优化,首先我们要思考推模式,如果我们 做一下改进把用户分成有效和无效的用户。我们一个用户比如说有一百个粉丝,我发一条微博的时候不需要推给一百个粉丝,因为可能有50个粉丝不会马上来看, 这样同步推送给他们,相当于做无用功。我们把用户分成有效和无效之后,我们把他们做一下区分,比如说当天登陆过的人我们分成有效用户的话,只需要发送给当 天登陆过的粉丝,这样压力马上就减轻了,另外投递的延迟也减小了。

总结:

l        推模式改进,不需要推送到所有用户

l        存储和发表峰值压力减轻

l        投递延迟减小

2.2.2       数据拆分

我们再看数据的拆分,数据拆分有很多方式,很多互联网产品最常用的方法,比如说如可以按照用户的UID来拆分。但是微博用户的一个特点就是说大家访问的都是最近的数据,所以我们考虑微博的数据我们按照时间拆分, 比如说一个月放一张表,这样就解决了我们不同时间的维度可以有不同的拆分方式。第二个考虑就是要把内容和索引分开存放。假如说一条微博发表的uid, 微 博id是索引数据,140个字的内容是内容数据。假如我们分开的话,内容就简单的变成了一种key-value的方式,key-value是最容易扩展的 一种数据。索引数据的拆分具有挑战,比如说一个用户发表了一千条微博,这一千条微博我们接口前端要分页访问,比如说用户需要访问第五页,那我们需要迅速定 位到这个记录。假如说我们把这个索引拆分成一个月一张表,我们记录上很难判断第五页在 哪张表里,我们需要加载所有的索引表。如果这个地方不能拆分,那我们系统上就会有一个非常大的瓶颈。最后我们想了一个方法,就是索引上做了一个二次索引, 把每个月记录的偏移记下来,就是一个月这个用户发表了多少条,ID是哪里,就是按照这些数据迅速把记录找出来。

总结:

l        优先按时间维度拆分

l        内容和索引分开存放

l        内容使用key-value方式存储(NoSQL)

l        索引由于有分页,拆分有挑战

2.2.3       异步处理

   异步处理,发表是一个非常繁重的操作,它要入库、统计索引、进入后台,如果我们要把所有的索引都做完用户需要前端等待很长的时间,如果有一个环 节失败的话,用户得到的提示是发表失败,但是入库已经成功,这样会带来数据不一致问题。所以我们做了一个异步操作,就是发表成功我们就提示成功,然后在后 台慢慢的消息队列慢慢的做完。另外新浪发表了一个很重要的产品叫做MemcacheQ,我们去年做了一个对大规模部署非常有利的指令,就是 stats queue,适合大规模运维。

第二版我们做了这些改进之后,微博的用户和访问量并没有停止,还有很多新的问题出现。比如说系统 问题,单点故障导致的雪崩,第二个是访问速度问题因为国内网络环境复杂,会有用户反映说在不同地区访问图片、js这些速度会有问题。另外一个是数据压力以 及峰值,MySql复制延迟、慢查询,另外就是热门事件,比如说世界杯,可能会导致用户每秒发表的内容达到几千条。我们考虑如何改进,首先系统方面允许任 意模块失败。另外静态内容,第一步我们用CDN 来加速,另外数据的压力以及峰值,我们需要将数据、功能、部署尽可能的拆分,然后提前进行容量规划。

总结:

l        发表异步化

l        发表速度和可靠性得到提高

l        使用MemcacheQ

n        增加stats queue,适合大规模运维

 

技术细节:

l        InnoDB引进,避免锁表烦恼

l        PHP中libmemcached代替memecache

n        在高并发下稳定性极大提高

2.2.4       高速发展

l        系统问题

n        单点故障

n        访问速度,国内复杂网络环境

l        数据压力和峰值

n        MySQL复制延迟、慢查询

n        热门事件微博发表量,明星评论及粉丝

2.2.5       如何改进

 

l         系统方面

n         允许任意模块失败

n         静态内容CDN加速

l         数据压力和峰值

n         将数据、功能、部署尽可能拆分

 

 

2.3           第三版平台化

2.3.1       平台化需求  

另一方面我们还有平台化的需求,去年11月我们就说要做开放平台,开放平台的需求是有差异的,Web系统它有用户行为才有请求,但是API系统特别是客户端的应用,只要用户一开机就会有请求,直到他关闭电脑这种请求一直会不间断的过来,另外用户行为很难预测。

系 统规模在持续的增大,另外也有平台化的需求,我们新架构应该怎么做才能满足这些需要?我们看一下同行,比如说Google怎么样考虑这个问题 的?Google首席科学家讲过一句话,就是一个大的复杂的系统,应该要分解成很多小的服务。比如说我们在Google.com执行一个搜索查询的话,实 际上这个操作会调动内部一百多个服务。因此,我们第三版的考虑就是先有服务才有接口最后才有应用,我们才能把这个系统做大。

平台化需求:

l        Web系统

n        有用户行为才有请求

l        API系统

n        轮询请求

n        峰值不明显

n        用户行为很难预测

2.3.2       架构如何设计

“Break large complex systems down into many services… google.com search touches 100s of service(ads, web search, books, news, spelling correction…”

                                          --Jeff Dean, Google Fellow

2.3.3       第三版结构

服务化:

服务-〉接口-〉应用

 

 

现在我们看一下第三版:

l        首先我们把底层的东西分成基础服务,基础服务里面有分布式的存储,我们做了一些去中心化、自动化的操作。在基础服务之上有平台服务,我们把微博常用的应用做成各种小的服务。

l        然后我们还有应用服务,这个是专门考虑平台各种应用的需求。最上面我们有API,API就是新浪微博 各种第三方应用都在上面跑。

l        平台服务和应用服务是分开的,这样实现了模块隔离,即使应用服务访问量过大的话,平台服务不会首先影响。另外我们把微博的引擎进行了改进,实现了一个分层关系。用户的关注关系,我们改成一个多惟度的索引结构,性能极大的提高。

l        第四个层面就是计数器的改进,新版我们改成了基于偏移的思路,就是一个 用户他原来读的一个ID比如说是10000,系统最系的ID是10002的话,我们很清楚他有两条未读。原来的版本是采用绝对计数的,这个用户有几条未读 都是用一个存储结构的话,就容易产生一致性的问题,采用这种偏移的技术基本上不会出错。

l        另外基础服务DB冷热分离多维度拆分,在微博里面我们是按照时间拆分的,但是一个大型的系统里面有很多业务需要有不同的考虑。比如说私信这个就不能按照时 间来拆分,这个按照UID来拆分可能更简单。然后我们突出存储还做了一个去中心化,就是用户上传图片的速度会极大的提高,另外察看其他用户的图片速度也会 极大的提高。另外是动态内容支持多IDC同时更新,这个是在国内比较新颖的。

 

2.3.4       平台服务

l        平台服务和应用服务分开,模块隔离

l        新微博引擎,实现feed cache分层

l        关系多维度索引结构,性能极大提高

l        计数服务改成基于偏移,更高的一致性、低延迟

 

2.3.5       基础服务

l        DB冷热分离等多维度拆分

l        图片等存储去中心化

l        动态内容支持多IDC同时更新

 

3         如何打造高性能架构  

高性能架构:

l        50,000,000用户使用新浪微博

l        最高发表3000条微博/秒

l        姚晨发表一条微博,会被6,689,713粉丝读到(11/10/2010)

下 面给大家介绍一下新浪微博怎么样打造一个高性能架构。到目前为止有五千万用户使用新浪微博,最高发表3000条以上每秒,然后一个明星用户发表的话,会被 几百万用户同时读到。这些问题的本质是我们架构需要考虑高访问量、海量数据的情况下三个问题。易于扩展、低延迟、高可用和异地分布。

3.1           问题本质和思路

l        解决高访问量、海量数据规模下:

n        易于扩展、低延迟

n        高可用

n        异地分布能力

我 们每天有数十亿次外部网页以及API接口的需求,我们知道微博的特点是用户请求是无法cache的。因此面对这个需求我们怎么样扩展?几点思路。第一我们 的模块设计上要去状态,我们任意一个单元可以支持任意节点。另外是去中心化,避免单点及瓶颈。另外是可线性扩展。最后一个是减少模块。

 

3.1.1       思路:

l        去状态,可请求服务单元中任意节点

l        去中心化,避免单点及瓶颈

l        可线形扩展,如

n        100万用户,10台服务器

n        1000万用户,100台服务器

l        减少模块耦合

 

3.1.2       实时性

l        高性能系统具备低延迟、高实时性

l        实时性的核心是让数据离CPU最近,避免磁盘IO

 

“CPU访问L1就像从书桌拿一本书,L2是从书架拿一本书,L3是从客厅的桌子上拿一本书,访问主存就像骑车去社区图书馆拿一本书”

--淘宝系统专家余铮

3.2           IO和缓存

 

 

我 们要做一个高性能的系统,要具备一个低延迟、高实时性,微博要做到高实时性这是核心的价值,实时性的核心就是让数据离CPU最近,避免磁盘的 IO。我们看淘宝核心系统专家余锋说过的一句话“CPU访问L1就像从书桌拿一本书,L2是从书架拿一本书,L3是从客厅桌子上拿一本书,访问主存就像骑 车去社区图书馆拿一书”。我们微博如果要做到非常实时的话,我们就需要把数据尽量离CPU节点最近。所以我们看一下cache设计里面怎么达到这个目标。 首先INBOX,这个数据我们需要放再一个最快的地方,因为用户随时访问。OutBOX里面的最近发表就是L1cache,还有一个是中期的,这个因为访 问少一点,它可以被踢。最后一部分内容体有三部分。L0是本地的,我们需要把一些经常访问的,比如说明星发表微博的内容体本地化,因为它被访问的概率非常 大。然后L1里面存放着最近发表的,还有一个是中期的。我们通常用L2就可以了,L1我们可以理解成它就是一个RAM存储。

 

3.3           高可用

一 个好的架构还需要举行高可用性。我们看一下业界的指标,S3是99.9%,EC2是99.5%,我们另外一个同行Facebook在这方面它是没有承诺 的,就是接口可用写。微博平台目前承诺的是99.95%,就是说一天365天故障率应该小于9小时。这个怎么达到?第一我们要做容量规划,要做好监控以及 入口的管理,就是说有些服务如果访问量过了的话,我们要有一个开关可以拦住他。我们通过这个图表可以清楚的看到,比如说我们要做L1的 cache,我们剩余空间有多少,比如说80%,就说明这个数据有可能会丢失,有可能会对我们的系统造成影响。

l        好的架构具有高可用性

l        业界:

n        Amazon S3:99.9%

n        Amazon EC2:99.95%

n        Facebook:n/a

 

如何达到高可用性:

l        容量规划

n        图表

l        监控

n        接口及资源监控,7X24

n        业务回环测试,检测业务逻辑有效性

 

3.3.1       接口监控

   另外一个层面就是接口监控,我们目前有Google维度的接口监控,包括访问错误失败率。然后要做架构,给大家一个很重要的经验分享,就是说监控的指标 尽量量化。比如说他延迟30秒是小问题,如果是延迟10分钟我们就要立即采取措施了,就是所有可以量化的指标都要量化。

然后我们看监控怎么 样更好的做?我们看亚马逊的VP说过的一句话,就是说监控系统确实特别好,可以立即告诉我们哪里有故障,但是有20%的概率 我们人是会出错的。所以我们一个大型系统就应该要为自动化设计,就是说尽可能的将一些运作自动化。比如说发布安装、服务、启用、停止。我们再看另外一 句,Google的工程师是怎么做的。他是这么做的,比如说第一周是处理线上的业务,这一周他处理了很多事情,处理了很多系统的情况,剩下几周时间没有别 的工作,他只要把这一周碰到的情况用程序的方法来解决,下次再碰到这种情况很简单的一个按钮就可以处理了。我们目前也在向自动化这方面努力,就是我们的工 具在持续增加。

 

接口监控:

l        curl/各地请求情况及相应时间

l        流量异常/access log

l        non-200结果/失败率/exceptions

l        将监控指标量化

 

3.3.2       自动化

l        大规模互联网系统运作需要尽可能自动化

n        发布及安装

n        服务启用、停止

n        故障处理

l        前提,去状态化,允许故障及充启

3.3.3       分布式

   另外一个异地分布,在国内网络环境下,比如说IDC灾难,机房检修甚至是机房掉电,我们也碰到过中国最好的机房也会掉电,所以要每个服务单元都能支持多 机房部署。另外做多机房部署有一个好处,就是用户的访问速度会提高。多IDC分布静态内容就不说了,基本上大的互联网公司都会做,它非常成熟基本上没有什 么问题,比如说图片等等的静态内容。动态内容的CDN分布是业内的难点,国内很少有公司能够做到非常成熟的多机房动态内容发布的成熟方案,它的核心就是分 布式存储。一款理想的分布式存储产品它有哪些需求呢?首先它要支持海量规模、可扩展、高性能、低延迟、高可用。第二个是需要多机房分布,能够满足 国内负责的网络环境,还要具备异地容灾能力。第三个就是要调用简单,具备丰富数据库特性。因此分布式存储需要解决一个多对多的数据复制。

如 果要做复制无非是三种策略,第一个是Master/Slave,但是它也两个缺点,第一个是Master是中心化的,如果Master在北京 那广州访问就非常慢。第二个缺点是有单点风险的,比如说Master在北京,能立即迁到广州吗?这样有个时间窗口的数据就丢失了,而且需要人工的干预,而 且日常广州的用户访问北京的Master是有很大延迟问题的,所以一般来说要做的非常优秀是不会考虑第一种方案的。第二种就是Multi-Master方 案,它需要应用避免冲突,就是我们不能多处改变。这个对于微博来说不会特别难,我们的用户通常只会再一个地方发表微博,用户不会同时在广州又在北京发表或 者是修改自己的资料,这样的话我们应用上就已经避免了这种情况。第三个就是Paxos就是可以达到强一致写,就是一条数据如果成功肯定是多个机房都成功 了,这个也显而易见就是延迟性非常大。因此总结一下Multi-Master是最成熟的策略,但是它现在没有成熟的产品,因为确实没有。

Multi-Master:

l        Web应用多地区同步的最佳策略

l        没有现成成熟的产品

 

 

   通过消息广播方式将数据多地分布,类似Yahoo!Message Broker

 

我 们再来看微博的方案,所以我们自己实现了一个多机房同步的方案。就是我们前端应用将数据写到数据库,再通过一个消息代理,相当于通过我们自己 开发的一个技术,将数据广播到多个机房。这个不但可以做到两个机房,而且可以做到三个、四个。具体的方式就是通过消息广播方式将数据多点分布,就是说我们 的数据提交给一个代理,这个代理帮我们把这些数据同步到多个机房,那我们应用不需要关心这个数据是怎么样同步过去的。

  用这种消息代理方 式有什么好处呢?可以看一下Yahoo是怎么来做的?第一个是数据提供之后没有写到db之后是不会消失的,我只要把数据提交成 功就可以了,不需要关心数据怎么到达机房。第二个特点YMB是一款消息代理的产品,但是它唯一神奇的地方是为广域网设计的,它可以把多机房应用归到内部, 我们应用不需要关注这个问题。这个原理跟我们目前自己开发的技术相似。

  然后我们再看一下目前即将推出的微博平台的新架构。我们知道 API大部分的请求都为了获取最新的数据。API请求有一个特点,它大目前调用都是 空返回的,比如说一款手机的客户端每隔一分钟它都要调用服务器一下,就是有没有新数据,大目前的调用都是空返回,就是说不管服务器有没有数据都要调用一 次。这次询问到下一次询问中间,如果有新的数据来了,你是不会马上知道的。因此我们想API能不能改用推的方式,就是客户端不需要持续的调用,如果有新数 据就会推过去。技术特点,显而易见低延迟,就是从发表到接受1秒内完成,实际上可能用不了1秒。然后服务端的连接就是高并发长连接服务,就是多点都连接在 我们的服务器上,这个比传统的API要大很多。

  我们看一下推送架构怎么从架构底层做到实时性的。从左上角的一条微博在我们系统发布之 后,我们把它放在一个消息队列里面,然后会有一个消息队列 的处理程序把它拿过来,处理以后放到db里面。假如说我们不做持久化,因为我们推送数据也不能丢失,我们就要写一个很复杂的程序,将数据异步去存,这样就 会非常复杂,而且系统也会有不稳定的因素。从另外一个角度来说,我们做持久化也是做过测试的。我们推送整个流程可以做到100毫秒和200毫秒之间,就是 说我们在这个时间能把数据推送出去。

我们再看一下内部细节,就是我们收到数据之后首先要经过最上面RECEIVER。然后推到我们的引擎 里面,这个引擎会做两个事情,首先会把用户的关系拿过来,然后按照用户关系马上推送给他相应的粉丝。所以我们调用方已经在那儿等待了,我们需要有一个唤醒 操作,就是说在接口这儿把它唤醒,然后把它 发送过去。最后是一个高并发的长连服务器,就是一台服务器支持10万以上的并发连接。最右边中间有一个圆圈叫做StreamBuffer,我们需要 StreamBuffer是要保存用户最近的数据。因为用户可能会有断线的,比如说他发送数据的时候断线半分钟,我们需要把这半分钟补给他。这就是我们的 推送架构。

 

3.4           新推送架构

3.4.1       现状

l        API大部分请求都是为了获取最新的数据

l        重新思考Rest API

n        大部分调用都是空返回

n        大部分时间都在处理不必要的询问

3.4.2       如何解决

l        新一代推送接口(Stream API)

l        采用推送的方式

n        有新数据服务器立即推送给调用方

n        无数据则不消耗流量

n        客户端实现更简单

 

3.4.3       技术特点

l        低延迟,从发表到客户端接收1秒内完成

l        高并发长连接服务器

 

3.4.4       推送架构

 

 

l         为什么先持久化

n         KISS,Keep It Simple and Stupid

n         测试表明持久几乎不增加延迟开销

u       Batch insert

u       Cursor read

 

 

 l         Stream Buffer

n         保存用户最近数据

n         保存客户端断线重连之间下行数据

 

3.5           平台安全

l         由于接口开放,需要防范各类恶意行为:

n         垃圾内容

n         垃圾粉丝

n         恶意行为

 

下面介绍一下平台安全部分。由于我们的接口是完全开放的,所以我们要防范很多恶意行为,有很多人担心我们接口是开放的,是不是有人通过这个接口发垃圾广告,或者是刷粉丝,我们技术架构怎么来防范这一点呢?

这是我们的安全架构,做了三个层面的事情。

1.      最上面是我们有一个实时处理,比如说根据频度、内 容的相似性来进行判断,判断发的是不是广告或者是垃圾内容。

2.      中间这个是一个日志处理器,我们会根据一些行为进行判断,比如说如果我们只是实时拦截的话,有 些行为很难防止,我们做了个离线纠正的模块,比如说他潜伏的几个月开始发广告了,我们可以事后把这些人清除掉,以保证我们平台的健康。

3.      最后是通过监控的维 度来保证内容的安全。目前内容安全的架构大概是541的体系,就是说我们的实时拦截可以做到50%的防止,离线分析大概可以做到40%的防止。

   微博平台需要为用户提供安全及良好的体验应用,以及为开发者营造一个公平的环境,所以我们的接口需要清晰安全的规则。从一个APP调用我们的接 口,需要几个阶层,需要划分不同的业务模块。第二个是安全层。第三个是权限层。这是我们平台安全的两个维度,一个接口安全,一个是内容安全。

   我今天讲的是架构方面的问题,在座大部分是开发者,可能大家都在处理不同的架构问题,架构很多地方是相通的。我们需要做一个软件系统需要解决的 本质问题是什么?微博第一版解决发布规模问题,第二版是解决数据规模的问题,第三版是解决服务化的问题。将复杂的问题简单化之后,我们才可以设计出一个容 易扩展的大规模架构。我今天介绍就这么多,我们微博实际上是很需要各方面的技术人员,大家对我们的架构如果感兴趣的话、对我们的系统感兴趣的话,也希望各 方面的技术人员参与我们微博的团队,随时可以给我微博上发私信。

3.5.1       接口安全

 

l         Auth层

n         访问需要AppKey

n         需要OAuth授权

l         权限层

n         流量控制,权限控制

新浪微博架构和FEED架构分析--人人架构1 第一版就是是非常快的,我们可以非常快的实现我们的模块 第一版的技术细节,典型的LAMP架构,是使用Myisam搜索引擎,它的优点就是速度非常快 第一个问题是发表 立即下载

相关推荐

RV1126B RV1126B-P 瑞芯微 高性能视觉处理器SoC 芯片

它集成了大量算法加速器,如 HDR、3A、LSC、3DNR、2DNR、锐化、去雾、鱼眼校正、伽马校正、特征点检测等。此外,还配备了一款最多8兆像素的 AI-ISP,作为对传统ISP 的补充,以提供卓越的空间去噪性能和增强的图像增强效果。除了先前的高性能多媒体区块外,RV1126B还包含丰富的音频、内存和其他外围接口,如I2C、SPI、PWM等。借助这-特性,来自相机的视频可以以高分辨率进行编码,并存储在本地内存中,同时还能将另-段较低分辨率的视频传输到云存储。

szhorsway的博客 1856

新浪微博构架

注: 本文是根据网上资料整理而成   1     概述 首先给大家介绍一下新浪微博架构发展的历程,新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了3个大的版本。   2         架构演变 2.1           第一版LAMP架构 第 一版就 LAMP架构,优点是可以非常快的实现我们的系统。我们看一下技术特点,微博这个产品从

lessonnair的专栏 975

Zynq工程IP核封装:XCI引用与约束继承实战指南

IP核封装是FPGA系统设计中实现模块复用、团队协作与技术资产沉淀的关键环节。其本质是将功能逻辑、时序约束、接口协议和硬件配置统一抽象为可配置、可验证、可演进的标准化组件。核心原理在于通过XCI文件保留IP核的参数化定义能力,依托Vivado IP Packager实现约束继承、端口自动映射与时钟域解耦,从而保障跨项目集成的时序可信性与约束完备性。该技术广泛应用于Zynq SoC视频处理、高速接口(如HDMI/TMDS)、多时钟域控制系统等场景,尤其在需要长期维护与版本迭代的工业级嵌入式开发中具有不可替代的

weixin_42593701的博客 122

亿级用户下的新浪微博平台架构

【编者按】《博文共赏》是InfoQ中文站新推出的一个专栏,精选来自国内外技术社区和个人博客上的技术文章,让更多的读者朋友受益,本栏目转载的内容都经过原作者授权。文章推荐可以发送邮件到editors@cn.infoq.com。 序言 新浪微博在2014年3月公布的月活跃用户(MAU)已经达到1.43亿,2014年新年第一分钟发送的微博达808298条,如此巨大的用户规模和业务量,需要高可

mask01的专栏 1212

电路保护设计实战:保险丝选型、I²t计算与多级协同方案

电路保护是电子系统可靠性的基石,其核心原理是在发生过流或过压等异常情况时,及时切断故障回路,防止能量持续灌入导致元器件损坏甚至安全事故。从技术价值看,优秀的保护设计能显著提升产品寿命、安全性和市场口碑,尤其在快充、电动汽车等高功率密度应用中,保护器件已成为不可或缺的安全屏障。在众多保护器件中,保险丝作为最基础的过流保护元件,其正确选型与应用直接关系到保护效果。本文聚焦于保险丝选型的实战细节,深入解析了I²t(电流平方时间积)这一关键参数,它定义了熔断所需的能量阈值,是匹配被保护半导体器件耐受能力、实现有效保

weixin_42662171的博客 308

2、集中式MIMO雷达研究进展:正交波形设计与信号处理

集中式多输入多输出(Multiple Input Multiple Output,MIMO)雷达通常利用正交波形增加发射波形 自由度,采用数字阵列拓展空间收发自由度,使得雷达接收机的天线孔径获得明显扩展,最终带来空间分辨率、 测角精确度、杂波抑制能力等大幅度提升。但是,这些性能提升的前提是发射波形具有正交特性。事实上,在 实际应用中,在不牺牲时域/频域资源情况下,受限于时宽带宽积,无法获得完全正交的波形集合,从而限制了 MIMO雷达系统性能。本文对集中式MIMO雷达正交波形复用的技术原理进行了系统回顾,分别

qq_43416206的博客 2771

微博并发这么牛逼!看他架构如何设计的?

????????关注后回复“进群”,拉你进程序员交流群????????1架构以及我理解中架构的本质 在开始谈我对架构本质的理解之前,先谈谈自己的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上要重视它 ,战术上又要藐视它。先举个例子感受一下千万级到底是什么数量级?现在的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右,假如每天有10个小时的服务时间,平均QPS只有30左右...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 1251

Python内置函数zip()——《Python内置函数手册》Python老吕编著

zip()函数是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)中对应的元素打包成一个个元组,然后返回由这些元组组成的迭代器。zip()函数常用于将多个序列并行迭代,或者用于数据对齐。zip()它返回一个迭代器,这意味着你可以逐个获取打包后的元素,而不是一次性将所有元素加载到内存中。如果输入的可迭代对象长度不一致,zip()会以最短的可迭代对象为准,只打包到最短对象的末尾。它可以用来并行迭代多个序列,使得代码更加简洁和高效。在接下来的章节中,我们将详细介绍。

Python老吕的博客 680

python面试题库知乎_知乎面试题刷题

2、js闭包是什么?function f1(){var n=999;function f2(){alert(n);}return f2;}var result=f1();result(); // 999闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。 所以,在本质上,闭包就是将函...

weixin_39640221的博客 688

嵌入式编程模型 | 原型模式

本文介绍了原型模式在嵌入式传感器网络中的应用。原型模式通过复制现有对象创建新实例,避免了重复初始化开销,适用于设备配置克隆、状态复制等场景。文章以传感器网络为例,展示了原型模式的结构(抽象原型类、具体原型类、客户端)和实现方式,通过C语言代码演示了温度/湿度传感器的克隆过程。该模式能有效提升嵌入式系统资源复用效率,实现快速部署相似配置的传感器节点,同时保持内存优化和配置灵活性。

嵌入式大杂烩 146

【第13话:感知算法】库位与可行驶区域检测:自主泊车场景中的检测及语义分割方法

本文提出了一种自动泊车系统中的泊车库位线检测方法,通过逆透视映射(IPM)将车辆摄像头图像转换为鸟瞰视图,消除透视变形。该方法结合目标检测和语义分割模型,先定位库位线候选区域,再生成像素级精确掩码。后处理步骤将掩码转换为结构化输出,包括停车位边界多边形和可行驶区域掩码。整个流程采用深度学习模型和计算机视觉技术,可实现高精度的泊车环境感知,为自动泊车系统提供可靠支持。

一碗白开水一 1160

新浪微博的架构发展历程

<br />新浪微博的架构发展历程http://www.sina.com.cn  2010年11月16日 17:57  新浪科技微博平台首席架构师杨卫华<br />  新浪科技讯 11月16日下午消息,由新浪微博(http://t.sina.com.cn)(http://t.sina.com.cn)主办的中国首届微博开发者大会在北京举行,这是国内微博行业的首场技术盛宴。作为国内微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展。图为微博平

lengyuhong的专栏 3613

Python爬虫实战:逆向解析腾讯视频API,高效获取结构化视频信息

首先,我们定义期望获取的数据结构,这有助于数据验证和代码清晰度。python"""腾讯视频信息数据模型"""title: str = Field(..., description="视频标题")vid: str = Field(..., description="视频唯一ID")play_count: Optional[int] = Field(None, description="播放量")

2201_76125261的博客 2378

新浪微博技术架构

中国首届微博开发者大会于2010年11月在北京举行,这是国内微博行业的首场技术盛宴。作为国内微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展。下文为微博平台首席架构师杨卫华演讲。 以下为演讲实录: 大家下午好,在座的大部分都是技术开发者,技术开发者往往对微博这个产品非常关心。最晚的一次,是12点多收到一

easyer2012的专栏 1052

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

新浪微博是怎么架构的?(1)

本文系转载,但是作者未知 新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是非常快的,我们可以非常快的实现我们的模块。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10万份,这样就是很简单了,第一版

Sunface撩技术 2755

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

新浪微博技术架构分析

新浪微博技术架构分析-转载        新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是非常快的,我们可以非常快的实现我们的模块。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10万

xtwolf008--关注分布式存储,关注大数据,云计算PAAS 1141

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

架构模式在新浪微博的应用

  短短几年时间新浪微博的用户数就从零增长到数亿,明星用户的粉丝数达数千万,围绕着新浪微博正在发展一个集社交、媒体、游戏、电商等多位一体的生态系统。   同大多数网站一样,新浪微博也是从一个小网站发展起来的。简单的LAMP( Linux+ Apache+ MySQL+PHP)架构,支撑起最初的新浪微博,应用程序用PHP开发,所有的数据,包括微博、用户、关系都存储在 MySQL数据库中。   这样简单的架构无法支撑新浪微博快速发展的业务需求,随着访问用户的逐渐增加,系统不堪重负。新浪微博的架构在较短时间内

雷霆未来 549

新浪微博平台架构(转)

前几天因为鹿晗关晓彤事件,导致新浪微博崩溃几分钟。这种情况发生不止一次了,但是新浪显然并没有去处理,不由得想起来双11亿级流量,淘宝也会有预测的加资源来解决高并发问题,但是在正常时期不会有那么多那么流量,所以不可能一直留有那么资源,显然要耗资很多啊。这次新浪的做法也是暂时从阿里云服务器租借1000台,顶住了并发压力,几个小时后就归还了。和淘宝双11做法很像,只不过新浪微博这种并发是不可预测的,谁都没

stone_yw的博客 1万+

新浪微博技术架构分析 2010

新浪微博技术架构分析 微博首席架构师杨卫华 新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是非常快的,我们可以非常快的实现我们的模块。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10...

qz baozi 569

新浪微博架构的演进

http://tech.sina.com.cn/i/2010-11-16/17574872122.shtmlhttp://news.youkuaiyun.com/a/20100726/277273.htmlhttp://www.infoq.com/cn/articles/ywh-sina-mini-blog-arch大家下午好,在座的大部分都是技术开发者,技术开发者往往对微博这个产品非常关心。最晚的一次,是1...

大树叶 技术专栏 2830
上一篇: UML: 依赖,泛化,关联,聚合,组合,实现
下一篇: Spring-data-redis: pub/sub消息订阅
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值