揭秘大型网站架构进化之路

简介: 揭秘大型网站架构进化之路

丁浪,非著名架构师。关注高并发、高可用的架构设计,对系统服务化、分库分表、性能调优等方面有深入研究和丰富实践经验。热衷于技术研究和分享。

声明:版权归丁浪作者本人所有,转载请联系作者本人。

互联网上有很多关于网站架构的各种分享,有些主要是从运维和基础架构的角度去分析的(堆机器,做集群),太关注技术细节实现,普通的开发人员基本看不太懂。

本文第一章节将主要介绍大型网站基础架构的扩展,第二章节则重点从应用程序的角度去介绍网站架构的扩展和演变。


一,大型网站基础架构的扩展


草根时期,快速开发网站并上线。当然,通常只是先试水,用户规模也没有形成,经济能力和投入也非常有限。image.png

有一定的业务量和用户规模了,想提升网站速度,于是,缓存出场了。

image.png市场反响还不错,用户量每天在增长,数据库疯狂读写,逐渐发现一台服务器快撑不住了。于是,决定把DB和APP做分离。

image.png单台数据库也感觉快撑不住了,一般都会尝试做“读写分离”。由于大部分互联网“读多写少”的特性所决定的。Salve的台数,取决于按业务评估的读写比例。

image.png数据库层面是缓解了,但是应用程序层面也出现了瓶颈,由于访问量增大,加上早期程序员水平有限写的代码也很烂,人员流动性也大,很难去维护和优化。所以,很常用的办法还是“堆机器”。

image.png加机器谁都会加,关键是加完之后得有效果,加完之后可能会引发一些问题。例如非常常见的:页面输出缓存和本地缓存的问题,Session保存的问题......

image.png到这里,已经基本做到了DB层面和应用层面的横向扩展了,可以开始关注一些其它方面,例如:站内搜索的精准度,对DB的依赖,开始引入全文索引。

Java领域用的较多的是Lucene、Solr等,而php领域用的比较多的是sphinx/coreseek。image.png到目前为止,一个能够承载日均百万级访问量的中型网站架构基本介绍完了。

二,从应用程序的角度去看架构扩展


在做扩展满足了基本的性能需求后,我们会逐渐关注“可用性”(也就是我们通常听别人吹牛时说的SLA、几个9)。如何保证真正“高可用”,也是个难题。image.png几乎主流的大中型互联网公司,都会有用到类似的架构,只是节点数不同而已。


还有一招用的比较多的,那就是动静分离。可以需要开发人员配合(把静态资源放独立站点下),也可以不需要开发人员配合(利用7层反向代理来处理,根据后缀名等信息来判断资源类型)。有了单独的静态文件服务器之后,存储也是个问题,也需要扩展。多台服务器的文件怎么保持一致,买不起共享存储怎么办?分布式文件系统也派上用场了。image.png还有一项目前国内外用的非常普遍的技术CDN加速。目前该领域竞争激烈,也已经比较便宜了。国内南北互联网问题比较严重,使用CDN可以有效解决这个问题。

CDN的基本原理并不复杂,可以理解为智能DNS+Squid反向代理缓存 ,然后需要有很多机房节点提供访问。

image.png截止目前为止,都没有怎么去改动应用程序的架构,或者说通俗点,都不怎么需要大面积的修改代码。

如果上面那些手段都用光了,还是支撑不住怎么办?不停的加机器也不是办法啊?

随着业务越来越复杂,网站的功能越来越多,虽然部署层面是采用的集群,但是应用程序架构层面还是“集中式”的,这样会导致很多耦合,不便于开发、维护,而且容易“一荣俱损”。所以,通常会把网站拆分出不同的子站点来单独宿主。image.png应用都拆了,由于单个数据库的连接,QPS,TPS,I/O处理能力都非常有限,DB层面也可以去做垂直分库操作

image.png拆分应用和DB之后,其实还是会有很多问题。不同的站点,里面可能会有相同逻辑和功能的代码。当然,对于一些基础的功能我们可以封装DLL或者Jar包去到处提供引用,但是这种强依赖也很容易造成一些问题(版本问题、依赖关系等处理起来非常麻烦)。这样,传说中的SOA的价值就得到体现了。

image.pngimage.png最后,还介绍一个大型互联网公司都用的绝技--分库分表。个人经验,不是业务发站和各方面非常迫切,不要轻易走这一步。

因为分库分表谁都会干,关键是拆完之后怎么办。分库分表主要考虑以下几个维度:横向拆分,纵向拆分,分布式数据访问层,数据库中间件(代理)

目录
相关文章
|
前端开发
layui select 绑定onchange事件失效
layui select 绑定onchange事件失效问题处理
|
7月前
|
人工智能 API 语音技术
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
403 31
|
7月前
|
域名解析 网络协议 Linux
网络基础知识与配置
本文介绍了网络基础知识,涵盖网络概念、协议、拓扑结构及IP地址等内容。网络是由计算机设备通过通信线路连接而成的系统,用于资源共享与信息传递。文中详细解析了TCP/IP协议族(如IP、TCP、UDP)、常见应用层协议(如HTTP、FTP、SMTP、DNS)的功能与应用场景。同时,阐述了多种网络拓扑结构(总线型、星型、环型、树型、网状)的特点与优缺点。此外,还讲解了IP地址分类、子网掩码的作用,以及如何在Windows和Linux系统中配置网络接口、测试连通性(Ping、Traceroute)和查看默认网关与路由表的方法。这些内容为理解和管理计算机网络提供了全面的基础知识。
574 6
|
8月前
|
供应链 数据库连接 PHP
反向海淘商业模式案例:Pandabuy VS Hoobuy VS CSSBUY 无货源淘宝微店代购系统搭建攻略
反向海淘是全球化下新兴的电商模式,满足海外消费者对中国高性价比商品的需求。Pandabuy、Hoobuy 和 CSSBUY 等平台整合供应链和物流资源,实现中国商品高效流通。本文分析这些平台商业模式,提供无货源代购系统搭建攻略及PHP代码示例,涵盖数据库连接、订单处理和商品查询等功能。随着市场需求增长、供应链优势、技术支持和政策利好,反向海淘前景广阔。
|
11月前
|
敏捷开发 监控 数据可视化
2024年十大工程管理软件评测:哪些任务可视化工具能显著提高团队效率?
在数字时代,团队协作和项目管理的效率至关重要。任务可视化工具通过直观展示任务进展、资源分配和优先级,帮助团队高效协作,减少误解和沟通成本。这类工具如Trello、Asana、ClickUp等,不仅提升了任务透明度和团队协作效率,还支持实时监控与反馈,特别适合远程工作和跨部门协作。
2024年十大工程管理软件评测:哪些任务可视化工具能显著提高团队效率?
|
安全 Java
Java一分钟之-并发编程:原子类(AtomicInteger, AtomicReference)
【5月更文挑战第18天】Java并发编程中的原子类如`AtomicInteger`和`AtomicReference`提供无锁原子操作,适用于高性能并发场景。`AtomicInteger`支持原子整数操作,而`AtomicReference`允许原子更新对象引用。常见问题包括误解原子性、过度依赖原子类以及忽略对象内部状态的并发控制。要避免这些问题,需明确原子操作边界,合理选择同步策略,并精确控制原子更新。示例代码展示了如何使用这两个类。正确理解和使用原子类是构建高效并发程序的关键。
232 1
|
人工智能 算法 安全
AI伦理:探索智能时代的道德边界
【9月更文挑战第10天】随着AI技术的发展,我们步入了智能时代,AI的应用为社会带来便利的同时,也引发了伦理道德的讨论。本文探讨了数据隐私、算法偏见及系统透明度等伦理问题,并提出制定法规、行业自律、伦理审查及跨学科合作等策略,旨在确保AI技术的健康发展,构建智能、公平、安全的未来。通过共同努力,我们能在技术进步与道德边界间找到平衡点,推动社会持续进步。
|
运维 算法 物联网
五大智能运维场景
【5月更文挑战第3天】智能运维场景分5类:异常检测、根因诊断、故障自愈、事件预警、效能优化。
|
前端开发 JavaScript 小程序
基于Vue开发的门户网站展示和后台数据管理系统
基于Vue开发的门户网站展示和后台数据管理系统
|
人工智能 自然语言处理 搜索推荐
《AIGC+软件开发新范式》--02.谈谈我对 AIGC 趋势下软件工程重塑的理解(3)
在AI 热度持续上升的当下,阿里云推出AI智能编码助手—通义灵码。通义灵码是一款基于阿里云通义代码大模型打造的智能编码助手,基于海量优秀开源代数据集和编程教科书训练,为开发者带来高效、流畅的编码体验。
423 0