`
freeroy
  • 浏览: 72009 次
  • 性别: 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

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

    基于javaweb+vue的共享音乐网站源码+设计报告+sql数据库(Web前端框架实训).zip

    根据本学期所学知识,使用Vue.js前端技术框架,结合动态Web开发技术,设计一个前后端分离的单页应用(SPA)项目: 共享音乐网站,项目包含注册和登录页面,以及音乐分类展示页面、音乐选择列表和播放页面(可选做功能:...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    2.8.4 前期绑定与后期绑定 94 2.9 数据类型转换 95 2.10 创建类 100 2.10.1 类 100 2.10.2 事件的处理 110 2.10.3 处理多个事件 111 2.10.4 withevents关键字 111 2.10.5 触发事件 111 2.10.6 声明...

    1船舶管理系统.doc

    在系统建设 的前期准备阶段,充分考察了国内外船舶管理公司和船管系统的先进管理模式与业务流 程,以公司、船舶安全质量管理体系为依据,实现船舶管理过程控制与公司安全质量管 理体系的正常运作。 系统涉及的功能...

    PHP入门到精通

    1.3前期准备工作 1.4网站建设的基本流程 1.5PHP的学习资源 1.6如何学好PHP 2.PHP环境搭建和开发工具(教学录像:36分3秒) 2.1PHP开发环境和准备工作 2.2Windows下Apache+MySQL+PHP的安装 2.3在Windows下配置Apache+...

    PHP入门到精通02

    1.3前期准备工作 1.4网站建设的基本流程 1.5PHP的学习资源 1.6如何学好PHP 2.PHP环境搭建和开发工具(教学录像:36分3秒) 2.1PHP开发环境和准备工作 2.2Windows下Apache+MySQL+PHP的安装 2.3在Windows下配置Apache+...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则...

    JAVA WEB典型模块与项目实战大全

    18.4 实现hibernate分页系统前期准备  18.5 关于hibernate分页系统的具体实现  18.6 关于hibernate分页系统的表示层  18.7 多学两招——分页标签  18.8 小结  第19章 生成报表(struts 2.x+hibernate+jxl...

    大数据技术原理及应用课实验7 :Spark初级编程实践

    实验7 Spark初级编程实践 一、实验目的 1. 掌握使用Spark访问本地文件和HDFS文件的方法 2. 掌握Spark应用程序的编写、编译和运行方法 二、实验平台 1. 操作系统:Ubuntu18.04(或Ubuntu16.04);...实验前期准备:

    C#编程宝典(十年典藏版).pdf

    主要包括做好C#程序开发前期准备、掌握c#语言基础之数据类型与变量、领略运算符和表达式带给我们的神奇、巧用流程控制语句、算法、字符串、数组、步入面向对象程序设计的殿堂、使用Windows窗体搭建交互式图形界面、...

    计算机网络安全简答题参考答案.doc

    (2)网络扫描:利用程序去扫描目标计算机开放的端口等,目的是发现漏洞,为入侵该 计算机做准备。 (3)网络入侵:当探测发现对方存在漏洞后,入侵到目标计算机获取信息。 (4)网络后门:成功入侵目标计算机后,...

    数字化项目等保测评解决方案.docx

    前期准备:明确测评目标、范围和方法,组建测评团队,准备必要的测评工具。 资产识别:对数字化项目的所有硬件、软件、数据等资产进行识别和分类。 风险评估:基于资产识别结果,对可能的安全风险进行分析和评估。 ...

    模块化数据中心一体化建设方案.ppt

    1. 前期规划与设计 需求分析:明确数据中心的需求,包括处理能力、存储容量、网络带宽等。 设计规划:根据需求分析结果,设计数据中心的模块布局、设备配置、网络架构等。 预算与成本分析:评估建设成本,包括设备...

    模块化数据中心一体化建设方案.docx

    1. 前期规划与设计 需求分析:明确数据中心的需求,包括处理能力、存储容量、网络带宽等。 设计规划:根据需求分析结果,设计数据中心的模块布局、设备配置、网络架构等。 预算与成本分析:评估建设成本,包括设备...

Global site tag (gtag.js) - Google Analytics