`
freeroy
  • 浏览: 74997 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】百万级访问网站前期的技术准备(中)

阅读更多

七、数据库

几乎所有操作最后都要落到数据库身上,它又最难扩展(存储也挺难)。对于mysql,什么样的表用myisam,什么样的表用innodb,在开发之前要确定。复制策略、分片策略,也要确定。表引擎方面,一般,更新不多、不需要事务的表可以用myisam,需要行锁定、事务支持的,用innodb。myisam的锁表不一定是性能低下的根源,innodb也不一定全是行锁,具体细节要多看相关的文档,熟悉了引擎特性才能用的更好。现代WEB应用越来越复杂了,我们设计表结构时常常设计很多冗余,虽然不符合传统范式,但为了速度考虑还是值得的,要求高的情况下甚至要杜绝联合查询。编程时得多注意数据一致性。

复制策略方面,多主多从结构也最好一开始就设计好,代码直接按照多主多从来编写,用一些小技巧来避免复制延时问题,并且还要解决多数据库数据是否一致,可以自己写或者找现成的运维工具。

分片策略。总会有那么几个表数据量超大,这时分片必不可免。分片有很多策略,从简单的分区到根据热度自动调整,依照具体业务选择一个适合自己的。避免自增ID作为主键,不利于分片。

用存储过程是比较难扩展的,这种情形多发生于传统C/S,特别是OA系统转换过来的开发人员。低成本网站不是一两台小型机跑一个数据库处理所有业务的模式,是机海作战。方便水平扩展比那点预分析时间和网络传输流量要重要的多的多。

NoSQL。这只是一个概念。实际应用中,网站有着越来越多的密集写操作、上亿的简单关系数据读取、热备等,这都不是传统关系数据库所擅长的,于是就产生了很多非关系型数据库,比如Redis/TC&TT/MongoDB/Memcachedb等,在测试中,这些几乎都达到了每秒至少一万次的写操作,内存型的甚至5万以上。例如MongoDB,几句配置就可以组建一个复制+自动分片+failover的环境,文档化的存储也简化了传统设计库结构再开发的模式。很多业务是可以用这类数据库来替代mysql的。

八、缓存。

数据库很脆弱,一定要有缓存在前面挡着,其实我们优化速度,几乎就是优化缓存,能用缓存的地方,就不要再跑到后端数据库那折腾。缓存有持久化缓存、内存缓存,生成静态页面是最容易理解的持久化缓存了,还有很多比如varnish的分块缓存、前面提到的memcachedb等,内存缓存,memcached首当其冲。缓存更新可用被动更新和主动更新。被动更新的好处是设计简单,缓存空了就自动去数据库取数据再把缓存填上,但容易引发雪崩效应,一旦缓存大面积失效,数据库的压力直线上升很可能挂掉。主动缓存可避免这点但是可能引发程序取不到数据的问题。这两者之间如何配合,程序设计要多动脑筋。

九、队列。

用户一个操作很可能引发一系列资源和功能的调动,这些调动如果同时发生,压力无法控制,用户体验也不好,可以把这样一些操作放入队列,由另几个模块去异步执行,例如发送邮件,发送手机短信。开源队列服务器很多,性能要求不高用数据库当做队列也可以,只要保证程序读写队列的接口不变,底层队列服务可随时更换就可以,类似Zend Framework里的Zend_Queue类,java.util.Queue接口等。

十、文件存储。

除了结构化数据,我们经常要存放其他的数据,像图片之类的。这类数据数量繁多、访问量大。典型的就是图片,从用户头像到用户上传的照片,还要生成不同的缩略图尺寸。存储的分布几乎跟数据库扩展一样艰难。不使用专业存储的情况下,基本都是靠自己的NAS。这就涉及到结构。拿图片存储举例,图片是非常容易产生热点的,有些图片上传后就不再有人看,有些可能每天被访问数十万次,而且大量小文件的异步备份也很耗费时间。

为了将来图片走cdn做准备,一开始最好就将图片的域名分开,且不用主域名。很多网站都将cookie设置到了.domain.ltd,如果图片也在这个域名下,很可能因为cookie而造成缓存失效,并且占多余流量,还可能因为浏览器并发线程限制造成访问缓慢。

如果用普通的文件系统存储图片,有一个简单的方法。计算文件的hash值,比如md5,以结果第一位作为第一级目录,这样第一级有16个目录。从0到F,可以把这个字母作为域名,0.yourimg.com到f.yourimg.com(客户端dns压力会增大),还可以扩展到最多16个NAS集群上。第二级可用年月例如,201011,第三级用日,第四级可选,根据上传量,比如am/pm,甚至小时。最终的目录结构可能会是 e/201008/25/am/e43ae391c839d82801920cf.jpg。rsync备份时可以用脚本只同步某年某日某时的文件,避免计算大量文件带来的开销。当然最好是能用专门的分布式文件系统或更专业点的存储解决方案。

下面,我们要谈谈代码了。

分享到:
评论

相关推荐

    百万级访问网站前期的技术准备

    百万级访问网站前期的技术准备,管理与技术

    试谈百万级访问网站前期的技术准备.doc

    【标题】:试谈百万级访问网站前期的技术准备 【描述】:在互联网时代,创建一个网站变得越来越容易,但随着访问量的增加,技术挑战也随之而来。本文将探讨在构建一个可应对百万级访问的网站时需要考虑的关键技术...

    中文对话数据集百万集

    这个数据集的规模达到了百万级,覆盖了日常生活的各种话题,具有广泛的适用性和实用性。 【描述】中提到的"https://gitee.com/chenyang918/chinese_chatbot_corpus"是一个公开的代码仓库,用户可以通过这个链接获取...

    通信技术的4个优点和4个缺点

    统一通信技术是指将不同的通信方式(如语音、视频、即时消息、电子邮件等)集成到一个单一的、便捷的...通过充分的前期准备、技术支持和用户培训,可以最大限度地发挥统一通信技术的优势,同时减少其带来的潜在风险。

    网站转让合同(域名收购合同)模版.doc

    - **前期准备**:确认网站的所有权归属,明确转让的具体内容。 - **签订协议**:双方达成一致意见后签订正式的网站转让协议。 - **资料移交**:甲方需向乙方提供与网站相关的所有证明材料和注册证书等。 - **款项...

    2022年计算机考试三级网络技术笔试试题及答案.doc

    【计算机考试三级网络技术知识点详解】 1. 计算机历史:1959年10月,我国成功研制出的首台通用大型电子管计算机是104计算机。 2. 计算机应用:模拟操作是研究方法之一,大气预报使用巨型计算机处理数据,经济运行...

    等保测评级-技术测评要求.pdf

    4. 技术测评的步骤:技术测评一般包括前期准备、现场测评、结果分析、测评报告撰写等步骤。 5. 技术测评的目的:通过技术测评,可以发现信息系统中存在的安全漏洞和弱点,帮助信息系统的运营者和管理者改进和提升...

    数字化转型:场景化落地应用推进制造企业数字化转型.pptx

    评估流程还包括前期准备、现场调研、数据分析与报告撰写、反馈与改进等多个环节,确保评估结果的客观性和准确性。 #### 三、信息化管理平台建设与优化 为了更好地推进数字化转型,制造企业需要建立和完善信息化...

    等级保护2.0-测评指导书(二级,三级).zip

    根据《信息安全技术 网络安全等级保护基本要求》,等级保护分为五级:第一级为用户自主保护,第二级为系统审计保护,第三级为安全标记保护,第四级为结构化保护,第五级为访问验证保护。其中,第二级和第三级是多数...

    大学毕业论文-—个人成长历程网站的设计与实现.doc

    网站前期的准备是指在网站设计和开发之前的准备工作,包括后台环境的搭配、网站设计主题与思路的准备、网站图片、视频和文字素材的准备等。后台环境的搭配是指选择适合的服务器环境和数据库管理系统,例如XAMPP是一...

    项目的访问控制与管理培训课程.ppt

    【访问控制与管理】在IT项目管理中...总的来说,这个培训课程全面涵盖了街头访问的各个环节,从前期准备、人员培训、现场控制到后期总结,为IT行业中的市场研究提供了详实的操作指南,以提升数据采集的科学性和可靠性。

    信息化教学大赛前期准备.doc

    ### 信息化教学大赛前期准备关键知识点 #### 一、有特色选题 1. **选题的重要性**:选题作为比赛的起点,直接关系到作品的整体吸引力与竞争力。 - **核心课程选题的局限性**:尽管某些课程在专业人才培养体系中...

    “云服务”在高中信息技术教学中的应用研究.pdf

    1. 方便快捷:用户可以随时随地通过互联网访问云服务,无需安装复杂的软件或进行大量前期准备。 2. 易扩展性:云服务可以根据用户需求迅速调整资源分配,满足不同规模的使用需求。 3. 高度自由:用户能够灵活地使用...

    利用MOOC进行翻转课堂教学探讨——以JAVA程序设计课程为例.pdf

    这样教师能将更多的时间和精力投入到课堂教学设计和学生指导中,而不是前期的视频准备工作中。 2. MOOC的课程往往是由知名院校的教授团队设计和讲授,质量相对较高。学生通过观看这些课程视频,能够接触到更权威、...

    ASIC可测试性设计技术

    扫描技术是DFT中最常用的一种技术,它通过在ASIC设计中插入扫描链(由一系列触发器组成)来实现对电路内部状态的控制和观测。这种方法可以显著提高测试覆盖率,同时减少所需的测试向量数量。扫描测试的基本原理是将...

    Uibot (RPA设计软件)培训前期准备指南-课前材料

    在进入Uibot(RPA设计软件)的培训之前,了解一些基础知识和前期准备是至关重要的。本指南将为你提供一个全面的视角,帮助你更好地理解RPA(Robotic Process Automation)及其在UiBot中的应用。 RPA是一种技术,它...

    3G通信技术在移动图书馆中的应用.pdf

    图书馆需要做好前期准备工作,包括技术选型、系统集成、内容资源整合等,以确保3G通信技术在移动图书馆中的顺利应用。随着5G等新一代通信技术的普及,移动图书馆的服务将进一步优化,提供更高效、便捷的无边界信息...

Global site tag (gtag.js) - Google Analytics