程序员,如何逐步去构建一个大型网站系统,面试必问!!!

news/2024/5/8 12:23:15/文章来源:https://blog.csdn.net/Gupaoxueyuan/article/details/80039750

往往程序员在面试的时候,公司的面试任职资格上,总有一个大型系统网站的开发经验,我们先来看看几张面试招聘信息截图.......

大型网站定义

首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技术指标角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点 行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那么像hao123这样的网站就是大型网站了,如下图所示:

其实这种网站访问量非常大,并发数也非常高,但是它却能用最为简单的Web技术来实现:我们只要保持网站的充分的静态化,多部署几台服务器,那么就算地球上所有人都用它,网站也能正常运行。

  大型网站是技术和业务的结合,一个满足某些用户需求的网站只要技术和业务二者有一方难度很大,必然会让企业投入更多的、更优秀的人力成本实现它,那么这样的网站就是所谓的大型网站了。0


如何逐步去构建一个大型网站系统

互联网时代,怎么构建一个大型网站是不可缺少的技能。当然,本人目前接触的网站都是读远远大于写。本文将一步步讲诉,怎么去使用lamp构建完善一个大型网站(读大于写)。

网站架构,我个人认为最为重要的是两方面的考虑:计算和存储。有些是属于计算密集型,有些是IO密集型。所以以下都将围绕计算和存储来讲述问题。

1、最简单的搭建

假设我们自己创业了,那么我们可能需要自己去搭建一个网站。

这个时候,我们需要去租借一个主机(比如阿里云的虚拟主机等)。对于网站来说,数据是最为重要的,所以需要有一个备份。但是每天pv肯定不高,所以理论上只需要一个计算机器即可。因此,我们只需要3台机器就能完整一个完整的架构。

从上图可以看到计算机器上主要部署2部分内容,一部分是webserver(轻量级可以考虑niginx,lighttpd等),一个是UI逻辑处理部分,lamp架构则使用php语言来搞定这个问题。因为数据是最重要的,所以database则明显需要2台机器,一台主机,一台做冗余备份。lamp使用mysql来存储数据。

2 增加数据缓存

随着我们网站知名度变高,每天pv越来越大,导致的问题是数据库压力越来越大。很明显,绝大部分网站,读流量都远远高于写流量。即使我们开了mysql的query cache,它也只能在一定程度上通过减少DB机器I的操作来减少DB服务器压力。更为靠谱的是,减少对DB服务器的请求。那么这个时候就需要使用cache.

cache为非关系型kv存储,在使用过程中一般为内存操作。下面的架构改进如下。

可以看出ui写数据仍然直接写入到数据库,但是读则先从cache读取,cache读取不到再从database读取。因为很有可能大部分数据都直接访问cache就可以搞定,这样就可以大大减少数据库的压力。

3、增加计算机器集群(计算方向)

随着整个系统pv继续上涨。单台的计算机器已经无法满足要求。这个时候就需要使用增加计算机器来解决问题。为了方便起见,可以把这个机器放入一个集群进行统一管理。

这个时候,我们可能需要考虑2个问题:负载均衡、数据同步。负载均衡系统相对难度较大,但是是必不可少的,最简单的可以通过zookkeeper等对配置文件进行统一管理。对于节点下的若干机器,可以简单通过概率来进行请求分发。数据同步也是一个难点,比如session同步、文件操作等。

需要说明的是,好的架构结果如下:N台机器能撑住的PV为X,那么T*N台机器基本能撑住T*X pv。换句话说,架构必须能支持横向扩展。如果机器加了一倍,但是撑住的峰值pv不能增加(接近)一倍,那个这个架构就是失败的架构,不是可扩展性的架构。

可以看出的是在负载均衡系统下可以挂很多机器。好的扩展是,加入多少倍机器,计算能力就相应提高多少倍(暂时不考虑存储的瓶颈)。

4、搭建简单的数据库集群(存储方向)

流量上升,计算能力提升的同时,也需要提升数据库的能力。这时候,我们可以采用读写分离。也就有了主从之说。主库可以写,当然也肯定能提供写,从库只能提供读,我们目前主从延时在20ms以内。目前这种工具不少,比如mysql proxy等。(下图应该是ui logic访问dbproxy,图有稍许错误,但是不影响理解)。

如上图,dbproxy作用主要有3个:

1、读写分离。读主要读从库,写只能是写主库。我们在实际设计的时候需要考虑主从延时,比如事务读必须读主库,写完若干秒内最好读主库等等。

2、负载均衡。他能自动根据dbproxy下面挂在的db进行负载均衡。

3、dbproxy维持sql连接池,里面存在和db的长连接。请求过来之后,直接从连接池取连接即可。

5、静态页面跨地域缓存

很明显,我们网站有很多静态页面,若干天才会更换一次。但是因为跨地域、跨机房的问题,外地用户可能访问较慢,所以我们可以通过cdn等技术缓存静态页面。这样就可以减少对服务器的请求,同时加快外地、不同机房用户的访问时间。

如上图所示,加入了静态页面缓存

6、跨地域跨机房设计

当我们业务进一步扩大,我们可能需要跨地域进行机器部署,目前我们主要分为华北(北京)和华东机房(杭州、南京)。跨地域部署,可以加快因为区域带来的访问过慢问题。比如广州访问北京机房数据,就不如北京访问北京机房速度快。这个时候,还是主要分为计算和存储两方面进行讲述。

6.1 计算方向

除了该机房的标示以外,各个机房的机器部署应该完全一致。

6.2 存储方向

在我看来,对于读远远大于写的系统而言,最好只有一个主库,若干个从库。所以只需要在其他机房搭建从库,让从库从主库进行数据同步即可。当然,这样的代价是主从时间比比较长。在数据链路不稳定的情况下,主从同步可能在400ms以上,所以设计需要考虑这个。

当然cache等等也需要跨地域跨机房部署。

如图简要勾勒出了跨地域跨机房的一个部署方案。

7、通用服务的使用

随着业务拓宽,我们可能会有一些需要考虑新能的模块或者业务。

如搜索业务,我们不可能直接通过数据库的select like来实现,就需要使用C等编译型语言来搭建其他系统。所以需要我们根据业务进行架构调整来通过http等使用一些通用的高性能计算方向的服务。

同样,出于业务发展等因素的考虑,我们需要使用内存型的数据库,比如redis等,这些属于存储方向的通用服务。

这些服务,有的可以跨机房部署,各个机房无耦合,有的则相互之间有耦合,比如类似于数据库的主库从库。

8、其他考虑

除此以外,我们还需要有其他因素进行考虑。需要了解的可以加JAVA架构师学术交流群:587372254

8.1 网站数据

这个主要是比如uv/pv。这个有几种做法,第一种是借助第三方的统计攻击,比如百度统计、Google统计等。第二种是对我们现有系统的日志进行统计,同时可以进行深一步的数据挖掘。

8.2 安全性

这个需要考虑网站是不是存在sql注入,xss漏洞,csrf漏洞等。这个方面对于网站是非常关键的。一旦有黑客攻入,后果不堪设想。

对于管理员后台,最好不要开通外网权限,只能通过内网访问。

8.3 seo等

搜索引擎优化对于网站作用不言而喻。 后续可能会专门针对百度SEO进行一些分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_829788.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在你的网站中嵌入 RunJS 的代码 (gist)?

RunJS 推出的一个叫做 Gist (此名完全来自与 Github 同样功能)的小功能,假如你在 RunJS 上写好了代码,你可以在自己的网站中加入如下 script 标签来引用该代码,代码将被语法着色,另外你还可以选择不同的主题…

说说大型高并发高负载网站的系统架构(更新)

鄙人先后在CERNET做过拨号接入,在Yahoo&3721搞过搜索前端,在猫扑处理过mop.com的架构升级,在6.cn视频网站从事开发工作,还在多年的工作中接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方…

P2P小贷网站业务数据流程分享

P2P小贷网站业务数据流程分享 引言 这是去年年底开发的一个项目,完成后和用户的衔接没有很好的做起来,所以项目就搁浅了。9月以来,看各路P2P风声水起,很是热闹;这里分享下我的设计文档,算是抛砖引玉&#x…

高性能网站构建实战文摘

第一篇 架构规划篇 第1章 网站架构简介 1.1网站的硬架构 1.1.1 机房的选择 1.1.2 带宽的大小 1.1.3 服务器的划分 1.2 网站的软架构 1.2.1 框架的选择 1.2.2 逻辑的分层 表现层,应用层,领域层,持久层 1.3 网站架构需要考虑的几个问题 1.3.1 h…

LNMP构建动态网站WordPress

一、部署LNMP架构1、安装nginx#配置nginx源cat>/etc/yum.repos.d/nginx.repo<<-EOF[NGINX]namenginxbaseurlhttp://nginx.org/packages/centos/7/x86_64/enabled1gpgcheck0EOF#生成yum缓存[rootnginx ~]# yum makecache#安装NGINX软件[rootnginx ~]# yum -y install n…

通过代码审计找出网站中的XSS漏洞实战(三)

一、背景 笔者此前录制了一套XSS的视频教程&#xff0c;在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完&#xff0c;内容有一些关联性&#xff0c;其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践…

html 树形结构_第四:高权重网站结构打造

第四&#xff1a;高权重网站结构打造网站结构是网站的骨架&#xff0c;就像人也有骨架一样&#xff0c;及其重要。在搜索引擎打分规则中&#xff0c;网站的得分占比还是非常大的&#xff0c;我们下面会给大家分享下网站结构优化建议。★ 什么是网站结构网站的结构&#xff0c;可…

jQuery css3仿游戏网站右键环形菜单

效果展示 http://hovertree.com/texiao/jquery/86/PC用户右键弹出环形菜单。手机用户扫描二维码&#xff1a;长安可以弹出环形菜单。 转自&#xff1a;http://hovertree.com/h/bjaf/aht9w1n8.htm web前端特效:http://www.cnblogs.com/jihua/p/webfront.html转载于:https://www.…

使用jenkins配置.net mvc网站进行持续集成一

最近好久没有更新文章了&#xff0c;因为好久没有写代码了&#xff0c;以至于我不知道同大家分享些什么&#xff0c;刚好&#xff0c;今天突然叫我学习下jenkins每日构建&#xff0c;我就把今天的学习笔记记录下来&#xff0c;这其中很多东西都是公司同事之前调研总结的&#x…

TLS 1.2 协议现漏洞,多个网站受影响

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> TLS 1.2 协议被发现存在漏洞&#xff0c;该漏洞允许攻击者滥用 Citrix 的交付控制器&#xff08;ADC&#xff09;网络设备来解密 TLS 流量。“TLS 1.2 存在漏洞的原因&#xff0c;…

PbootCMS V1.3.7 发布,PHP 建站系统

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> PbootCMS V1.3.7 build 2019-03-12 1、修复部分情况数据库语句执行发生的错误不能正常显示的问题&#xff1b; 2、修复搜索时表单传递字段控制被过滤掉的问题&#xff1b; 3、新增…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

使用tomcat发布一个外网可以访问的网站

方法/步骤11.安装外网映射工具步骤阅读22.下载通tomcat33.更改tomcat的conf文件夹下文件server.xml1.<Connector port"8080" protocol"HTTP/1.1" connectionTimeout"20000" redirectPort"8443" />端口号:port改为802. <Engin…

【try..catch..】【判断输入是否为空】【onchange事件】【onmouseover和onmouseout事件】【onmousedown和onmouseup事件】...

1.try..catch.. <body><script>function myFunction(){try{ var xdocument.getElementById("demo").value;//取值if(x"") throw "值为空"; //返回错误提示if(isNaN(x)) throw "不是数字";if(x>10) …

使用Windows定时计划,7z开源压缩和批处理命令进行网站资料目录的定时备份

项目进行到数据备份阶段发现录入的数据很有必要进行备份,所以在实现sqlserver数据备份的前提下需要把上传目录下的文档进行备份 使用7zip来进行数据备份 首先创建一个文本文档,另存.bat批处理文档 备份代码如下 格式为 7z.ex a "压缩文件需要保存的路径" "要压缩…

电脑无internet访问_网站访问不了怎么办?

相信不少站长都会遇到过这样的问题&#xff0c;那就是网站打不开了&#xff0c;但是这里并不是说每次都打不开&#xff0c;其实网站打不开是有很多的原因的&#xff0c;有可能是域名解析错误&#xff0c;也有可能是服务器不稳定的原因等。大部分的用户都是搞不清楚是什么原因造…

tinymce移动端使用_中小站长该如何做好移动端SEO优化

点击上方"蓝字"&#xff0c;关注我们。文 | 陈老师来源&#xff1a;SEO轻松学对于网站来说&#xff0c;忽略移动端的流量从任何角度来看都是不划算的交易&#xff0c;就像流量站一样。这取决于流量实现它。虽然一些网站的移动端流量并不多&#xff0c;但还远远达不到…

网站后面为啥加端口_个人搭建博客网站的几种方案汇总

1、GitGithubMarkdownjekyll&#xff08;免费&#xff09;2、GitGithubMarkdownhexo&#xff08;免费&#xff09;3、虚拟主机插件Wordpress&#xff08;付费&#xff09;个人有个不成熟的小建议&#xff1a;如果你不想付费&#xff0c;也不想备案&#xff0c;那你基本上就已经…

Redis架构之防雪崩设计:网站不宕机背后的兵法

一、缓存穿透预防及优化 缓存穿透是指查询一个根本不存在的数据&#xff0c;缓存层和存储层都不会命中&#xff0c;但是出于容错的考虑&#xff0c;如果从存储层查不到数据则不写入缓存层&#xff0c;如图 11-3 所示整个过程分为如下 3 步&#xff1a; 缓存层不命中存储层不命…

手把手教程:如何在手机钉钉中添加企业自己的系统网站应用?

前言 在企业办公过程中&#xff0c;为了方便在钉钉中访问已经的系统或应用&#xff0c;可以通过在钉钉中添加自己的企业应用&#xff0c;方便快速找到&#xff0c;进行高效办公。 下面&#xff0c;以YesDev项目管理为例&#xff0c;图文说明如何操作。 用电脑操作&#xff1a…