大型高并发高负载网站的系统架构解决之道
- 格式:pdf
- 大小:656.51 KB
- 文档页数:30
12306解决方案1. 简介12306是中国铁路总公司推出的官方火车票在线购票平台,由于其高并发和用户量的特点,经常出现访问速度慢、购票失败、验证码识别困难等问题。
本文将介绍一种解决方案,旨在提升12306网站的稳定性和用户体验。
2. 技术架构为了应对12306高并发和用户量的挑战,我们建议采用以下技术架构:2.1 负载均衡通过引入负载均衡设备,将用户请求分发到多个应用服务器上,提高系统吞吐量和可用性。
常见的负载均衡器有Nginx、F5等。
2.2 分布式架构将核心业务逻辑拆分成多个模块,通过分布式架构部署在多台服务器上,提升系统并发处理能力。
可以使用Spring Cloud等技术实现服务注册、发现和调用。
2.3 异步处理将一些用户不需要即时响应的操作,如发送验证码、发送邮件等,通过消息队列的方式异步处理,减轻系统压力。
可选择RabbitMQ、Kafka等消息中间件。
2.4 缓存优化使用缓存技术存储频繁读取的数据,如站点信息、车次信息等,减少对数据库的访问压力,提高响应速度。
常用的缓存系统有Redis、Memcached等。
2.5 数据库优化对数据库进行调优,如加索引、分表分库等方式,提高查询效率,避免数据库成为性能瓶颈。
可以使用MySQL、Oracle等数据库管理系统。
3. 用户体验优化除了技术架构的优化,用户体验也是提升12306网站的重要方面。
以下是一些用户体验优化的建议:3.1 响应速度通过异步处理和分布式架构提升系统的响应速度,减少用户等待的时间。
合理设置系统的最大并发数,避免出现过载导致系统崩溃的情况。
3.2 易用性优化用户界面,确保用户能够方便快捷地进行车票查询和购买操作。
提供搜索引擎预测搜索词、自动填充表单等功能,提高用户的操作效率和体验。
3.3 验证码识别通过引入高效的验证码识别算法,如机器学习算法,提高验证码的识别准确率,降低用户购票时的输入难度,减少验证码带来的用户心理负担。
WEB应⽤中的⾼并发问题WEB应⽤中的⾼并发问题⼤型⽹站,⽐如门户⽹站。
在⾯对⼤量⽤户访问、⾼并发请求⽅⾯,基本的解决⽅案集中在这样⼏个环节:使⽤⾼性能的服务器、⾼性能的数据库、⾼效率的编程语⾔、还有⾼性能的Web容器。
但是除了这⼏个⽅⾯,还没法根本解决⼤型⽹站⾯临的⾼负载和⾼并发问题。
这些解决思路在⼀定程度上也意味着更⼤的投⼊,并且这样的解决思路具备瓶颈,没有很好的扩展性,以下从平时的项⽬经验以及引⽤⼀些博客的思路来尝试解决⾼并发的情况。
0、⾸先需要关注数据库没错,⾸先是数据库,这是⼤多数应⽤所⾯临的⾸个SPOF(单点故障)。
尤其是Web2.0的应⽤,数据库的响应是⾸先要解决的。
可能最初是⼀台主机,当数据增加到100万以上,那么,数据库的效能急剧下降。
常⽤的优化措施是M-S(主-从)⽅式进⾏同步复制,将查询和操作和分别在不同的服务器上进⾏操作。
我推荐的是M-M-Slaves⽅式,2个主Master,多个Slaves,需要注意的是,虽然有2个Master,但是同时只有1个是Active,我们可以在⼀定时候切换。
之所以⽤2个M,是保证M不会⼜成为系统的SPOF。
Slaves可以进⼀步负载均衡,可以结合LVS,从⽽将select操作适当的平衡到不同的slaves 上。
以上架构可以抗衡到⼀定量的负载,但是随着⽤户进⼀步增加,你的⽤户表数据超过1千万,这时那个M变成了SPOF。
你不能任意扩充Slaves,否则复制同步的开销将直线上升,怎么办?我的⽅法是表分区,从业务层⾯上进⾏分区。
最简单的,以⽤户数据为例。
根据⼀定的切分⽅式,⽐如id,切分到不同的数据库集群去。
全局数据库⽤于meta数据的查询。
缺点是每次查询,会增加⼀次,⽐如你要查⼀个⽤户nightsailer,你⾸先要到全局数据库群找到nightsailer对应的cluster id,然后再到指定的cluster找到nightsailer的实际数据。
首席技术官CTO的岗位职责首席技术官CTO的岗位职责1职责:1、全面负责公司“职道”APP的所有开发及管理工作,负责规划公司产品的技术构架,产品交付的技术实现与运维管理;2、主持制定技术发展战略规划,把握公司整体技术方向,并组织实施、监督;3、根据公司战略与具体目标,制定研发方向和目标,并能在工作中始终保证开发的产品、交付和目标相符合;4、进行公司技术团队的梯队建设及管理,包括专业培训、技术指导、职业化培养、业绩评估和激励,全面提升团队的技术水平。
任职要求:1、本科及以上学历,计算机、软件开发等相关专业;2、具有以上技术开发经验,其中5年以上的项目管理、产品研发、运维管理及中大型技术团队的CTO管理经验,知名互联网公司,百度,阿里,腾讯优先考虑;3、积极的创业心态,强烈的工作责任心,对工作富有热情,能承受工作压力,善于激发团队工作热情,具有很强的领导力和执行力。
4、加入即享有创业股份首席技术官CTO的岗位职责2职责:1,规划和设计公司所有产品的整体系统架构(含技术架构和业务架构),能独立输出技术文档及核心代码;2,在技术上能够独立完成产品系统的设计、开发和维护任务;在技术上指导和监督整个团队,对开发人员进行架构培训和技术支持,解决技术难题。
并对业务逻辑概念、系统性能、可扩展性进行检查、分析、优化;3,负责新技术的研究探索和技术积累,进行关键技术的技术验证;4,要对公司所在行业具有深入理解,要对行业技术发展趋势和管理现状具有准确的判断。
5,管理公司技术规范制定工作。
制定技术标准和相关流程。
6,统筹管理技术部所有项目及团队成员,把控所有项目完成进度、服务和出品质量;制定工作计划、协调资源、分派工作、监督项目进程、反馈信息等;组织、指导、监控所负责项目的进度和质量,并及时处理过程中发生的问题;能够带领和激励自己的团队完成公司赋予的任务,实现公司的技术管理和业绩目标。
7、对公司的业务结果负责,作为公司管理层支持和指导业务部门工作。
MBA教学管理信息系统案例12306 问题与思考?案例编写者:陈建中指导教师:***案例性质:用于MBA管理信息系统课程教学版权说明:自有版权整理编制时间: 2014.12该案例根据网上公开发布资料整理,除因特定原因隐去某些单位具体名称外,所有内容均为真实。
12306 问题与思考?引言这是一个神奇的网站,这是一个电子商务的奇迹,没有做过广告,优化很差,更不需要做营销,但是它的流量可以达到几亿;网站功能一般,页面设计风格老旧,同时以频繁的崩溃引发全国性的关注, 人们仍乐此不疲。
没错,这就是12306---铁路车票销售网站。
封闭式开发运作,非商业化运营导致了种种问题,下一步如何升级完善,值得从技术和管理上作深入思考与探讨。
从2011年12月28日开始预售春运火车票开始,短短数日内,12306成为了中国最炙手可热的网站。
“让人能够在互联网上就能买到火车票,对于铁路运营部门而言,这是值得肯定的进步。
”—信息化专家陈教授评价道。
12306客户服务网站瞬间可能达到了“世界第一”,比较一下,淘宝网2003年创立后,历经3年宣传营销才达到900万人同时登陆,被视作增长奇迹的京东商城, 8年后注册用户达2800万,而12306的单日访问量超过14亿,最高一天的点击量达到19亿,7天内访问的用户占全球互联网用户的0.902%。
飙升至全球90位,逼近了第80位的京东商城,迅速进入了世界最大电商企业的行列。
很多人相信即使把价格提高百分之二十,网站涛声依旧,大家还是要抢着买,如果说12306网还能给我们一点启示,也就是最好做的生意是卖稀缺度高的商品。
作为电子商务网站, 是一个神话和奇迹,同时它也存在明显的问题:1)无SEO,无网络推广,流量居然可以暴涨到几亿:网站运营,离不开SEO和其他网站推广方式,不管是在电视上打广告,还是做优化、软文推广等等,网站根本没做优化,也没有用过其他类型的广告或者推广,为什么会成为电子商务网站第一呢? 很简单,中国的春运是人类历史上最大的迁徙活动。
系统架构师常见面试题在当今科技飞速发展的时代,系统架构师在企业的技术领域中扮演着至关重要的角色。
他们负责设计、构建和维护复杂的系统架构,以确保系统的高效、稳定和可扩展性。
因此,在招聘系统架构师时,面试环节通常会涉及一系列具有挑战性的问题,以评估候选人的技术能力、经验和解决问题的思维方式。
以下是一些常见的系统架构师面试题:一、技术基础和原理1、请简要介绍一下常见的分布式系统架构模式,例如主从模式、对等模式和分布式哈希表(DHT),并说明它们的优缺点。
这道题旨在考察候选人对分布式系统基本架构模式的理解和掌握程度。
主从模式具有易于管理和控制的优点,但存在单点故障的风险;对等模式具有高容错性和可扩展性,但协调和管理相对复杂;DHT 则在大规模分布式系统中表现出色,但其实现和维护较为复杂。
2、谈谈你对数据库索引的理解,包括 B 树索引、哈希索引和位图索引的工作原理及适用场景。
数据库索引是提高数据库查询性能的关键。
B 树索引适用于范围查询和排序操作;哈希索引适用于等值查询,但不支持范围查询;位图索引则在处理低基数列和大量重复值时效率较高。
3、解释一下什么是 CAP 定理,并阐述在实际系统设计中如何权衡一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。
CAP 定理指出在分布式系统中,最多只能同时满足这三个特性中的两个。
在实际设计中,需要根据系统的需求和业务场景来决定侧重哪两个特性。
例如,对于金融交易系统,可能更注重一致性和可用性;而对于大规模的社交网络,可能会更倾向于可用性和分区容错性。
二、系统设计与架构1、假设要设计一个高并发的电商网站,你会如何考虑系统的架构?包括前端、后端、数据库和缓存等方面。
对于前端,要考虑使用 CDN 加速静态资源的加载,采用响应式设计以适应不同设备;后端可以采用微服务架构,将不同的功能模块拆分成独立的服务;数据库要进行读写分离和分库分表以应对高并发读写;缓存可以使用 Redis 来存储热门商品和用户频繁访问的数据。
招聘大数据开发工程师面试题与参考回答(某大型集团公司)(答案在后面)面试问答题(总共10个问题)第一题题目:请简述大数据技术在现代企业中的应用及其对企业竞争力的影响。
第二题问题:您在过往的工作中,是否遇到过数据量极大,导致数据处理和分析效率低下的问题?如果是,您是如何解决这个问题的?第三题题目:请描述一下您在以往项目中使用大数据技术解决过的一个具体问题。
详细说明问题背景、您采用的大数据技术、实施过程以及最终取得的成果。
第四题题目:请解释什么是MapReduce,并描述一个场景,在这个场景中使用MapReduce可以极大地提高数据处理效率。
请同时指出在这个场景中Map和Reduce两个阶段是如何工作的,并说明这样做的优势。
第五题题目:请描述一下您在以往项目中遇到的大数据开发过程中最复杂的技术挑战,以及您是如何解决这个问题的。
第六题题目:请解释什么是MapReduce,并描述一个实际场景,在该场景中使用MapReduce可以有效地处理大数据集。
请同时指出MapReduce模型中的主要步骤,并简要说明每个步骤的作用。
第七题题目:请描述一次您在项目中遇到的大数据处理挑战,包括挑战的具体内容、您是如何分析问题的、以及您最终采取的解决方案和效果。
第八题题目:请解释什么是MapReduce,并且举例说明在一个大数据处理场景中如何使用MapReduce来解决实际问题。
在您的解释中,请务必涵盖MapReduce的主要组成部分及其工作流程。
1.Map(映射)阶段:在这个阶段,原始的大数据集被分成若干个小块分发到不同的节点上。
每个节点上的程序对分配给自己的数据进行处理,产生中间键值对。
这些键值对随后会被排序并且传递到下个阶段。
2.Reduce(规约)阶段:在这个阶段,来自Map阶段的数据被重新组织,使得相同键的所有值都被组合在一起。
接下来,reduce函数会处理这些键对应的多个值,并将它们转化为最终的结果输出。
1.Map阶段:首先,系统将整个购买记录数据集分割成多个片段,并将这些片段发送到不同的Map任务中。
2025年招聘系统工程师面试题及回答建议(某大型集团公司)(答案在后面)面试问答题(总共10个问题)第一题题目:请描述一下什么是TCP三次握手,并解释其每个阶段的目的。
在实际应用中,如果一个TCP连接没有完成三次握手会有什么后果?第二题问题描述:设计一种高效的方法或算法,来解决在一个大规模的应用系统中,如何快速从成千上万条日志数据中找到与特定关键词相关的日志记录。
回答建议及解析:第三题题目:请简述一下您对于大型集团公司的网络架构的理解,并说明您认为网络架构中最重要的元素是什么?在您过往的工作经验中,有哪些经验和技能可以帮助您在这个角色中成功应对网络架构的设计与实施?第四题题目:请解释什么是负载均衡,并描述在实际工作中如何实现负载均衡?答案及解析:面试官问:假设您负责维护的一套分布式系统(例如,一个电子商务网站的后端服务)突然出现大面积的性能问题和一些服务不可用的情况。
在这种情况下,您会如何进行故障排查?请描述一次具体的案例。
第六题题目:作为系统工程师,请您描述一次您在项目中遇到的技术难题,以及您是如何克服这个难题的。
请详细说明您遇到的问题、您的解决方案、您在解决问题过程中遇到的挑战以及您从中学到的教训。
第七题题目:请描述一下你对系统高可用性(High Availability, HA)的理解,并举例说明如何在实际工作中实现系统的高可用性?第八题题型:面试问答题题目:描述一下在编写多线程程序时遇到的常见问题和解决方法。
这包括但不限于死锁、竞态条件和线程安全问题。
第九题题目:请描述一次您解决复杂系统问题的经历。
在这个过程中,您遇到了哪些挑战?您是如何克服这些挑战的?题目请详细描述在处理大规模数据时,如何设计和实施一个高效、可靠的分布式数据处理系统。
请提供一个具体的案例来说明你的设计方案,并解释其中的关键技术和实现细节。
答案和解析2025年招聘系统工程师面试题及回答建议(某大型集团公司)面试问答题(总共10个问题)第一题题目:请描述一下什么是TCP三次握手,并解释其每个阶段的目的。
浅谈高并发网站的设计技巧摘要:伴随web2.0兴起后出现的新一轮的网站开发创业大潮中,网站用户不仅是内容的浏览者,而且成为了网站内容的制造者。
这决定了网站结构上以数据库为中心,以用户为导向的新网站建设概念,使得新网站具有高并发、高流量、大数据量、逻辑复杂等特点。
笔者围绕网站的高并发特性,讨论数据库优化、分布式网站的编程要点、以及程序核心优化三方面的技巧。
关键词:服务器数据库分布式开发1 数据库优化技巧现在网站的特点,就是以数据库为中心。
如何最大化地利用数据库的能力,包括提高缓存命中、降低io开销、优化查询等,是目前需要进一步研究的课题。
1.1 确定主键主键是能唯一标识表中数据行的属性或者组合属性。
主键中该表中的值必须唯一。
如果数据更新不频繁,必须需要对主键进行排序,一定要是聚集索引;如果数据更新频繁,主键上一定要使用非聚集索引。
1.2 优化索引数据库表索引是避免全表扫描,降低数据库磁盘io的最重要的手段。
关系型数据库中,每个数据表不是孤立存在的,而是通过主、外键联系起来,共同形成完整的数据库结构。
所以,除了主键必须有索引外,外键通常也需要有非聚集索引,以方便对数据进行分类查询和汇总。
几乎每个表中,都需要有和时间相关的字段。
常用的网站用例中,多对数据的时间段进行查询、汇总,所以对这些时间字段,一定要建立聚集索引,方便进行排序查询,避免全表扫描。
1.3 合理选用共享锁和排它锁死锁对数据库的性能、可用性、吞吐量都有重要的影响。
但在现在企业的信息化管理系统中,经常是可以由多个人同时对同个表进行操作,造成死锁的概率大大增加。
一般情况下,如果对数据的一致性要求很高,使用排它锁,其它都应该使用共享锁来提高性能。
1.4 分表在实践工作中,数据表中的每列的数据都有其特定的使用场景。
例如新闻表,在对新闻进行列表时,常使用新闻标识、新闻分类、新闻添加人、新闻时间信息,但不会使用新闻内容字段。
并且新闻内容的字段一般为“text”类型。
java开发岗位职责java开发岗位职责11、负责公司核心业务系统的需求分析、设计和开发工作;2、负责框架开发,编写与维护公共模块代码,优化系统性能等,解决系统中的关键问题和技术难题;3、负责指导其他工程师核心功能的架构与代码模板编写,开发与维护系统公用核心模块;5、分析系统瓶颈,解决各种疑难杂症,对系统进行性能调优。
java开发岗位职责2职责:1、完成与java相关的开发任务,确保项目的按时保质完成;2、对软件进行后续维护和管理;3、能够有效的与需求人员进行沟通,实现产品的设计意图;4、维护和升级现有产品,快速修复Bug和缺陷。
任职要求:1、专科及以上学历, 计算机及相关专业毕业,2年以上java开发经验,有公安行业系统经验着重考虑;2、能适应项目现场开发/实施/维护所需要的出差;3、熟练使用Eclipse,Idea等开发工具进行Java开发,熟悉SSM,SpringBoot,SpringCloud等框架应用;熟练掌握JQuery,Vue,FreeMarker,Thymeleaf等前端的开发技术,以及掌握Oracle、Mysql数据库应用开发。
有高并发大数据开发经验者优先;4、具有较强的时间管理、耐压能力、沟通协调能力,具有一定的市场意识和素养。
java开发岗位职责3岗位职责:1、负责核心技术问题的攻关、架构设计、系统优化,协助解决项目开发过程中的技术难题;2、了解互联网的技术发展、评估外部技术与解决方案。
任职要求:1、精通java编程,熟练掌握java/j2ee平台及常用框架Spring、MyBatis、Memcache、Redis、MySQL、MongoDB、ActiveMQ、Solr2、有3年以上使用Java开发的经验3、能承受较大的工作压力4、有大型分布式、高并发、高负载、高可用性系统的设计开发经验者优先5、有上进心,精力充沛,愿意与公司一同成长6、一本全日制计算机或者相近专业毕业,有竞赛或者创业经历者优先,985/211院校优先。
对猪八戒网的分析猪八戒网是中国最典型的威客平台,所谓威客模式就是人的知识、智慧、经验、技能通过互联网转换成实际收益,从而达到各取所需的互联网新模式。
就在以阿里巴巴为代表的电商平台发展得如火如荼之际,众多企业也都瞄准了互联网。
所以我很佩服猪八戒网的创始人,眼界非常的独到,很早的就意识到威客网站所蕴藏的巨大的商机,打造服务类网上平台绝对是非常前卫的想法。
下面我简单分析一下猪八戒网。
一、商业模式及创新点战略目标:要做成全球最大的服务业交易平台,让每个人每个企业都能获得更诚信、更有保障的服务。
目标客户:专业威客、业余威客、专业设计机构和专业咨询机构。
其中卖方主要是各大企业、社会团体、个人,只要注册并认证就可发布任务。
而买房多为在校生、就业群体、待业群、事业群。
交易模式:猪八戒网标榜诚信交易,交易模式包括三种:悬赏、招标和速配。
从而实现提供方和寻找方在互联网上完成交易。
收入来源:1.悬赏任务酬金提成。
目前的任务赏金分配原则是中标的会员80%,入围的和时时彩奖的4%,剩下的16%归网站服务费。
2.赏金托管时的利润。
由于任务发布者在发布任务之初就将酬金全额达到了网站服务商的账户上,因此酬金利息也是网站的收入来源之一,类似于支付宝。
3.广告收入。
网站运营的好,自然有广告来源,这是毋庸置疑的。
4.接收工作任务。
网站在接受公司业务之后,在通过发布任务,尤为可完成5.其他增值业务。
比如礼品定制,可以获得利润。
创新点有:1.网站从客户角度出发,提供猪八戒帮助、新手上路等服务,界面操作简单。
2.网站“猪八戒”,亲切诙谐,有趣好记。
3.运营模式特殊,登录认证以后,可以悬赏任务、招标任务,根据需求而定,非常的人性化。
4.管理模式方便易懂。
网站的管理模式是由用户下单,然后再由威客们领取任务,客户选定,然后公示结果,再由网站把钱给中标者这种自助投标模式,威客的成果由用户和网站确认,再通过公示结果,再大家的监督下进行,力求公正,公平。
高并发高负载网站系统架构解决方法本文作者在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,可以和大家一起探讨一下。
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。
大型网站,比如门户网站。
在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。
但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。
上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。
1、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。
同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。
2、图片服务器分离大家知道,对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的图片服务器,甚至很多台图片服务器。
这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率。
3、数据库集群和库表散列大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。
在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就参考相应的解决方案来实施即可。
上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。
我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。
sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。
4、缓存缓存一词搞技术的都接触过,很多地方用到缓存。
网站架构和网站开发中的缓存也是非常重要。
这里先讲述最基本的两种缓存。
高级和分布式的缓存在后面讲述。
架构方面的缓存,对Apache比较熟悉的人都能知道Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。
网站程序开发方面的缓存,Linux上提供的Memory Cache是常用的缓存接口,可以在web开发中使用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大型社区使用了这样的架构。
另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多了,.net不是很熟悉,相信也肯定有。
5、镜像镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异,比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点,数据进行定时更新或者实时更新。
在镜像的细节技术方面,这里不阐述太深,有很多专业的现成的解决架构和产品可选。
也有廉价的通过软件实现的思路,比如Linux上的rsync等工具。
6、负载均衡负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。
负载均衡技术发展了多年,有很多专业的服务提供商和产品可以选择,我个人接触过一些解决方法,其中有两个架构可以给大家做参考。
硬件四层交换第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。
第四层交换功能就象是虚IP,指向物理服务器。
它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。
这些业务在物理服务器基础上,需要复杂的载量平衡算法。
在IP世界,业务类型由终端TCP 或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP 端口共同决定。
在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。
Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。
软件四层交换大家知道了硬件四层交换机的原理后,基于OSI模型来实现的软件四层交换也就应运而生,这样的解决方案实现的原理一致,不过性能稍差。
但是满足一定量的压力还是游刃有余的,有人说软件实现方式其实更灵活,处理能力完全看你配置的熟悉能力。
软件四层交换我们可以使用Linux上常用的LVS来解决,LVS就是Linux Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。
一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性,随时往架构里面增减节点都非常容易。
这样的架构我准备空了专门详细整理一下和大家探讨。
对于大型网站来说,前面提到的每个方法可能都会被同时使用到,我这里介绍得比较浅显,具体实现过程中很多细节还需要大家慢慢熟悉和体会,有时一个很小的squid参数或者apache参数设置,对于系统性能的影响就会很大,希望大家一起讨论,达到抛砖引玉之效。
随着中国大型IT企业信息化速度的加快,大部分应用的数据量和访问量都急剧增加,大型企业网站正面临性能和高数据访问量的压力,而且对存储、安全以及信息检索等等方面都提出了更高的要求……本文中,我想通过几个国外大型IT企业及网站的成功案例,从Web技术人员角度探讨如何积极地应对国内大型网站即将面临的扩展(主要是技术方面,而较少涉及管理及营销等方面)矛盾。
一、国外大型IT网站的成功之道(一)MySpace今天,MySpace已经成为全球众口皆碑的社区网站之王。
尽管一流和营销和管理经验自然是每个IT企业取得成功的首要因素,但是本节中我们却抛弃这一点,而主要着眼于探讨在数次面临系统扩张的紧急关头MySpace是如何从技术方面采取应对策略的。
第一代架构—添置更多的Web服务器MySpace最初的系统很小,只有两台Web服务器(分担处理用户请求的工作量)和一个数据库服务器(所有数据都存储在这一个地方)。
那时使用的是Dell双CPU、4G内存的系统。
在早期阶段,MySpace基本是通过添置更多Web服务器来对付用户暴增问题的。
但到在2004年早期,在MySpace用户数增长到五十万后,其数据库服务器已经开始疲于奔命了。
第二代架构—增加数据库服务器与增加Web服务器不同,增加数据库并没那么简单。
如果一个站点由多个数据库支持,设计者必须考虑的是,如何在保证数据一致性的前提下让多个数据库分担压力。
MySpace运行在三个SQL Server数据库服务器上—一个为主,所有的新数据都向它提交,然后由它复制到其它两个;另两个数据库服务器全力向用户供给数据,用以在博客和个人资料栏显示。
这种方式在一段时间内效果很好——只要增加数据库服务器,加大硬盘,就可以应对用户数和访问量的增加。
这一次的数据库架构按照垂直分割模式设计,不同的数据库服务于站点的不同功能,如登录、用户资料和博客。
垂直分割策略利于多个数据库分担访问压力,当用户要求增加新功能时,MySpace只需要投入新的数据库加以支持。
在账户到达二百万后,MySpace还从存储设备与数据库服务器直接交互的方式切换到SAN(存储区域网络)—用高带宽、专门设计的网络将大量磁盘存储设备连接在一起,而数据库连接到SAN。
这项措施极大提升了系统性能、正常运行时间和可靠性。
然而,当用户继续增加到三百万后,垂直分割策略也变得难以维持下去。
第三代架构—转到分布式计算架构几经折腾,最终,MySpace将目光移到分布式计算架构——它在物理上分布的众多服务器,整体必须逻辑上等同于单台机器。