找回密码
 立即注册
搜索
查看: 28|回复: 0

网站架构-架构网站服务器有哪些-如何架构网站

[复制链接]

2万

主题

0

回帖

6万

积分

管理员

积分
63625
发表于 2025-4-26 16:01:43 | 显示全部楼层 |阅读模式
知名互联网公司网站架构图

引言

近段时间,接触了有关海量数据处理和搜索引擎的很多技术。常常能看到不少精妙的架构图。不仅感叹每幅图绘制表面的精细,更对架构图背后隐藏的设计思想感到叹服。个人这两天持续在搜集各大型网站的架构设计图。一方面是为了饱览眼福,去领略各类大型网站架构设计的精彩之处;另一方面,也可以在闲暇时反复琢磨体会,这是件很有乐趣的事情呀。所以,特地总结整理了像国外的 Yahoo!等以及国内的优酷网等大型网站的技术架构(本文主要分析优酷网的技术架构),来让读者欣赏。

本文重点突出每一幅图的精彩之处以及其背后的含义,而图的说明性文字较为简洁。好了,尽情享受这一架构的盛宴吧。当然,如果有任何建议或问题,欢迎随时指出。谢谢。

1、 技术架构

技术架构图Copy @Mark

数据显示:峰值时每秒钟有 3 万个 HTTP 请求,每秒钟的流量为 3Gbit,近乎 375MB。

350 台 PC 服务器。

BIND 的 40 行补丁用于添加内容到 BIND 的视图中,该补丁能将用户引导至最近的服务器。在该架构中担当重任是由其内容性质所决定的,其内容面向各个国家和地域。

负载均衡:LVS,请看下图:

2、 架构

搜索功能的架构示意图

细心的读者一定能够发现,之前在这篇文章中出现了上副架构图,从几幅架构图中获取了一些关于海里数据处理的经验。本文与前文最大的区别在于,前文仅有几幅架构图,而此文的系列将会有上百幅架构图,任由您尽情观赏。

3、Yahoo! Mail 架构

Yahoo! Mail 架构

Yahoo! Mail 的架构部署了 RAC。RAC 被用来存储 Mail 服务相关的 Meta 数据。

4、技术架构

的整体架构设计图

平台由手机和第三方应用构成,如下图所示。流量主要以手机为来源,也以第三方为主要来源。

缓存对于大型 web 项目而言有着极为重要的作用。因为数据离 CPU 越近,存取速度就会越快。以下是缓存架构图:

关于缓存系统,还可以看看下幅图:

5、 App 技术架构

GAE的架构图

简单来说,上述 GAE 的架构被分成了三个部分,就像图中所展示的那样,分别是前端以及服务群。

前端包含 4 个模块。其中一个模块是 Front End。还有一个模块是 Files。另外有一个模块是 App。再有一个模块也是 App。

它是基于技术的分布式数据库,也可以被理解为一个服务。因为它是整个 App 唯一存储持久化数据的地方,所以它在 App 中是一个非常核心的模块。其具体细节将在下篇和大家讨论。

整个服务群包含诸多服务供 App 进行调用。其中有图形方面的服务,有关于用户的服务,还有 URL 抓取方面的服务以及任务队列方面的服务等。

6、技术架构

的 Key-Value存储架构图

有读者或许并不了解,如今它已然成为全球商品种类最为繁多的网上零售商,同时也是全球第二大互联网公司。而在之前,它仅仅只是一个规模很小的网上书店。好了,接下来,让我们来见识一下它的架构吧。

亚马逊的存储平台采用 key-value 模式,它的可用性和扩展性都较为良好,性能也不错。在读写访问中,99.9%的响应时间都能控制在 300ms 内。该平台按分布式系统常用的哈希算法来切分数据,并将数据分放在不同的 node 上。在进行 Read 操作时,会依据 key 的哈希值去寻找对应的 node。使用了某种算法,node 所对应的不再是一个确切的 hash 值,而是一个 hash 值的范围。如果 key 的 hash 值处于这个范围内,那么就沿着 ring 顺时针寻找,遇到的第一个 node 就是所需要的。

算法的改进体现在:将其放置在环上作为一个 node 的是一组机器,而非把一台机器当作 node。并且这一组机器是借助同步机制来确保数据一致的。

下图是分布式存储系统的示意图,读者可观摩之:

的云架构图如下:

的云架构图

7、优酷网的技术架构

优酷网从一开始就自行构建了一套 CMS 以解决前端的页面显示问题。各个模块之间的分离较为恰当,这使得前端具有很好的可扩展性。UI 的分离让开发与维护变得十分简单且灵活。下图展示了优酷前端的模块调用关系。

这样,会依据以及来确定调用相对独立的模块,这显得极为简洁。优酷的前端局部架构图如下:

优酷的数据库架构经历了诸多变化。起初是单台 MySQL 服务器,之后发展到简单的 MySQL 主从复制,接着进行了 SSD 优化,随后又实施了垂直分库,最后实现了水平分库。

1.简单的MySQL主从复制。

MySQL 的主从复制实现了数据库的读写分离,并且很好地提升了读的性能,其原理图如下:

其主从复制的过程如下图所示:

但是,主从复制也带来其他一系列性能瓶颈问题:

写入无法扩展

写入无法缓存

复制延时

锁表率上升

表变大,缓存率下降

那问题产生总得解决的,这就产生下面的优化方案。

2. MySQL垂直分区

如果业务被切割得足够独立,那么将不同业务的数据放置在不同的数据库服务器是一个较好的方案。这样一来,即便其中一个业务崩溃,也不会对其他业务的正常运行造成影响。同时,还能起到负载分流的作用,极大地提升了数据库的吞吐能力。以下是经过垂直分区后的数据库架构图:

然而,业务之间已经足够独立了。不过,有些业务之间还是会有一些联系,比如用户,通常都会和每个业务相关联。并且,这种分区方式不能解决单张表数据量暴涨的问题。所以,为何不试试水平呢?

3. MySQL水平分片()

这是一个很好的思路,把用户按照一定规则(依据 id 哈希)进行分组,然后把该组用户的数据存储到一个数据库分片中,也就是一个。如此一来,当用户数量不断增加时,只需简单地配置一台服务器就可以了,其原理图如下:

要确定某个用户所在的 shard ,可以构建一张用户与 shard 相对应的数据表。每次进行请求时,首先从这张表中查找用户的 shard id ,然后从对应的 shard 中查询相关数据,如下图所示:

优酷如何解决跨 shard 的查询呢?这是个难点。据介绍,优酷尽量不进行跨 shard 查询。如果实在不行,就通过多维分片索引和分布式搜索引擎来解决。而最下策是采用分布式数据库查询,因为这种方式非常麻烦且耗费性能。

缓存策略

大的系统似乎都对“缓存”很喜爱,有 http 缓存,也有内存数据缓存。然而,优酷宣称没有使用内存缓存,其理由如下:

避免内存拷贝,避免内存锁

接到老大哥通知要撤下某个视频时,如果该视频在缓存里,处理起来是比较麻烦的。

Squid 的 write() 用户进程空间存在消耗,1.5 的 AIO(异步 I/O)用于读取文件到用户内存,这导致效率比较低下。

为何我们访问优酷时会很流畅呢?优酷的视频加载速度比土豆要快一些。优酷建立了比较完善的内容分发网络(CDN),这是一个重要原因。它通过多种方式来实现让分布在全国各地的用户进行就近访问。当用户点击视频请求后,优酷网会依据用户所处的地区位置,把离用户最近且服务状况最好的视频服务器地址传递给用户,这样就能保证用户可以获得快速的视频体验。这就是 CDN 所带来的优势,即就近访问。

©著作权归作者所有,转载或内容合作请联系作者
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【远见汇智】 ( 京ICP备20013102号-17 )

GMT+8, 2025-5-5 13:07 , Processed in 0.299754 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表