`
hegan_2009
  • 浏览: 11632 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

大型网站架构演变

阅读更多

本文转自 http://www.cnblogs.com/vsover/archive/2009/01/08/1371543.html

 

声明,这篇文章的作者是BlueDavy,并非我。本人认为写的很好,从中抽取出有用的章节,留做备忘并与大家分享。

          第一步:物理分离应用数据库

          网站运营的最开始阶段,在每天高峰期的时候总是会出现宕机现象并且经常会有数据库和网站应用挣抢硬件资源的状况出现,这种情况下,最简单的方案就是把应用和数据库分开部署到不同机器上,以提高各自能够占有的资源。(此方案是网站建设最初阶段)

          第二步:页面缓存和静态化

          随着网站访问量的迅猛攀升,系统的响应会开始变慢,主要原因是因为访问数据库的连接增多,数据库服务器的硬件配置又决定了只能提供一定数量的连接。由于网站里的很多内容是很少更新的。于是可以把这些页面缓存起来或者静态化,减少对数据库的访问。这一步对技术上有所要求:页面缓存技术,模板技术。页面缓存提议Squid等几种方案,静态化可通过生成静态HTML方式实现。

           第三步:页面片段缓存

           页面片段缓存可采用ESIOSCacheD等框架来进行实现。

           第四步:数据缓存

           数据缓存可采用ehcacheOSCache或独立实现的缓存框架来实现。这步演变对技术上的要求:Map数据结构、程序语言中的Map数据结构(例如JAVA中的HashMapTreeMap等)、所采用的缓存框架的实现方式(缓存内容的存储方式、查找算法和失效算法)

           第五步:水平扩展应用服务器

           如果单纯是访问量高造成了服务器压力过大,那就只能采用增加应用服务器,进入水平扩展阶段。那么如何让访问平均分配到每台应用服务器上。这里先用软件负载均衡技术。软件负载均衡技术可选:DNS轮询、ApahceNginxLVS等。又如何保持信息同步呢,如session同步。可采用信息写入数据库、写入共享文件、cookie或在各台机器上同步状态信息等。如何保证数据缓存的同步?可采用缓存同步或分布式缓存。如何让文件相关的功能继续可用 ,例如文件上传功能等。可采用共乡文件系统或存储设备,采用前者的居多一些。这一步需要积累的知识有1.负载均衡技术,包括但不限于硬件负载金衡技术(四层,七层等)、软件负载均衡技术、负载均衡算法、转发协议、(如VS/NATVS/TUNVS/DR)所选用的技术的实现细节(如LVS的实现)等。2.容灾技术,包括但不限于ARPLinux Heart-beanting等。3.状态信息或缓存同步技术,包括但不限于cookieUDP协议、组播、数据同步框架的实现(例如jgroups等)。4.共乡文件原理,NFS

            第六步:分库

            以上工作完成后,你的团队可以做各种各样的小调优工作,例如操作系统调优、Apache调优、JVM调优等等。分库的实现对技术没有太高的要求,仅在于整理业务,进行拆分,并相应的对程序进行适当的修改。

            第七步:分表、DAL、分布式缓存

            由于数据库数据量太大,分库往往不能够解决系统缓慢,这时,需要采取适当的分表和数据库调优,由于服务器没有那么多内存可以提供缓存,所以开始采用分布式缓存。问题: 在进行分表时,发现很明显的问题:分表后导致访问数据库的程序复杂度提高。因为在查表时必然要先考虑分表规则。要将这一层统一 ,最好的办法就也就是著名的DAL。增加数据访问层。分布式缓存可采用的方案有memcacheJbossCache等。分表时应做的知识储备:动态HashConsistent Hash 、分布式缓存实现原理、数据库连接管理、数据库操作的控制等。

            第八步:改变应用服务器水平扩展环境

            ApachenginxLVS等软件负载均衡方式已经无法承受巨大的访问量的调度压力时,可考虑购买硬件负载均衡设备。入F5NetsclarAthlon等,也可从业务角度进行划分,构建不同的业务软件负载集群组。文件共享方案出现瓶颈时,这个时候可以考虑购买昂贵的存储设备 。如NAS等,也可考虑自行设计或是采用成熟的分布式文件系统。

            第九步:数据读写分离与廉价的存储

            如服务器增加太多了,数据库连接相当激烈,读写比相当高,这时可构件大型数据库集群或数据读写分离。数据读写分离可选择的方案或程序级的同步方案,在实现读写分离的时候要同步改造DAL,以适应新的演变。廉价的存储方面有GoogleBigtable、新浪的 Memcachedb等。应具备的知识储备:数据库自行复制、同步方案及实现原理(如OracleStandbyMySQLReplication等);数据延迟以及不一直的解决方案。读写分离规则判断。

            第十步:大型分布式应用时代

拆分成分布式后一个很明显的需求就是高效、稳定的通信和调用框架。

管理好大型分布式的应用,涉及到陆游、以来、版本、错误追踪、检测和报警等多方面的问题。

合理拆分,涉及业务的整理和大型系统架构的把握。

这一步涉及很多知识体系:通信、分布调用、分布式事务、消息机制、并行计算、报表、检测技术、规则策略等。

分享到:
评论

相关推荐

    node-v0.10.13-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    课设毕设基于SSM的高校二手交易平台-LW+PPT+源码可运行.zip

    课设毕设基于SSM的高校二手交易平台--LW+PPT+源码可运行

    软件设计师讲义.md

    软件设计师讲义.md

    时间序列预测,股票方向应用,使用transformer-lstm融合的模型算法

    适用人群 针对有一定机器学习和深度学习背景的专业人士,特别是那些对时间序列预测和Transformer以及LSTM模型有兴趣的人。需要一定的Python知识基础 适用场景 用于处理时间序列数据,尤其是在金融领域,示例是股票价格预测。Transformer模型和LSTM的混合使用表明,代码的目的是利用这两种模型的优势来提高预测准确性。 目标 代码的主要目标是利用Transformer模型和LSTM模型来预测时间序列数据,如股票价格。通过实现这两种模型,代码旨在提供一个强大的工具来进行更准确的时间序列分析和预测。

    Autojs-PJYSDK-泡椒云网络验证-v1.15.zip

    Autojs-PJYSDK-泡椒云网络验证-v1.15.zip

    nodejs-ia32-0.10.20.tgz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Java项目之jspm足球俱乐部网上商城系统(源码 + 说明文档)

    Java项目之jspm足球俱乐部网上商城系统(源码 + 说明文档) 第二章 技术介绍 5 2.1 结构简介 5 2.2MySQL 介绍 5 2.3MySQL环境配置 5 2.4Java语言简介 6 2.5JSP技术 7 2.6 SSM框架 7 第三章 系统分析与设计 9 3.1系统说明 9 3.2系统可行性分析 9 3.2.1技术可行性 9 3.2.2经济可行性 9 3.2.3操作可行性 10 3.2.4运行可行性 10 3.3系统的设计思想 10 3.4系统功能结构 11 3.5系统流程分析 12 3.5.1操作流程 12 3.5.2添加信息流程 13 3.5.3删除信息流程 14 第四章 数据库设计 15 4.1数据库概念设计 15 4.2数据表设计 16 第五章 系统的详细设计 23 5.1系统首页的设计 23 5.2后台功能模块 25 5.2.1管理员功能模块 25 5.2.2用户功能模块 27 第六章 系统测试 29 6.1系统测试方法 29 6.2系统功能测试 29

    2024年第九届数维杯数学建模挑战赛题目.rar

    2024年第九届数维杯数学建模挑战赛题目.rar

    springboot(火车站订票管理系统)

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    springboot(英语知识应用网站)

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    node-v0.8.27-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.11.7-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    【课程设计】实现的金融风控贷款违约预测python源码.zip

    【课程设计】实现的金融风控贷款违约预测python源码.zip

    Java面向对象综合实验,实现拼图游戏.zip

    游戏的最终成品展示,然后再一步一步的从0开始,完成游戏里面每一个细节。 游戏运行之后,就是这样的界面。 刚开始打开,是登录页面,因为是第一次运行,需要注册。点击注册就会跳转到注册页面 在注册页面我们可以注册账号,用户名如果已存在则会注册失败。 在游戏主界面中,我们可以利用上下左右移动小图片去玩游戏,还有快捷键A可以查看最终效果,W一键通关。 我们在写游戏的时候,也是一部分一部分完成的。 先写游戏主界面,实现步骤如下: 1,完成最外层窗体的搭建。 2,再把菜单添加到窗体当中。 3,把小图片添加到窗体当中。 4,打乱数字图片的顺序。 5,让数字图片可以移动起来。 6,通关之后的胜利判断。 7,添加其他额外的功能。

    学位英语复习资料 学位英语复习资料

    学位英语复习资料

    1plusx_1_proj_test_231125_答案.zip

    1plusx_1_proj_test_231125_答案.zip

    人工智能+深度学习+深度学习数学基础+整理完整版

    【项目资源】:汇聚了云计算、区块链、网络安全、前端设计、后端架构、UI/UX设计、游戏开发、移动应用开发、虚拟现实(VR)、增强现实(AR)、3D建模与渲染、云计算服务、网络安全工具等各类技术项目的素材和模板。包括AWS、Azure、Docker、Kubernetes、React、Vue、Angular、Node.js、Django、Flask、Unity、Unreal Engine、Blender、Sketch、Figma、Wireshark、Nmap等项目的素材和模板。【项目质量】:所有素材和模板都经过精心筛选和整理,确保满足专业标准。在发布前,我们已经对功能进行了全面测试,确保其稳定性和可用性。【适用人群】:适合对技术充满热情的初学者、希望提升专业技能的中级开发者、以及寻求创新解决方案的高级工程师。无论是个人项目、团队合作、课程设计还是商业应用,都能在这里找到合适的资源。【附加价值】:这些项目资源不仅具有很高的学习价值,而且能够直接应用于实际项目中,提高开发效率。对于有志于深入研究或拓展新领域的人来说,它们提供了丰富的灵感和基础框架,帮助你快速构建出令人惊艳的作品。

    课设毕设基于SSM的人才公寓管理系统-LW+PPT+源码可运行.zip

    课设毕设基于SSM的人才公寓管理系统--LW+PPT+源码可运行

    unity大纲资料.txt

    unity游戏

    【课程设计】使用TensorRT部署SAM分割一切大模型C++源码+部署步骤.zip

    【课程设计】使用TensorRT部署SAM分割一切大模型C++源码+部署步骤.zip

Global site tag (gtag.js) - Google Analytics