大规模网站开发技术

大型网站的特点

什么样的网站才算是大型网站?

大型网站的特点:高并发,大流量,高可用,海量数据等

什么是PV,UV和IP呢?

  • PV(访问量):Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。
  • UV(独立访客):Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只会被计算一次。
  • IP(独立IP):指独立IP数。00:00-24:00内相同IP地址之被计算一次。

高并发是什么意思,如何定义高并发呢?

什么是高可用?

高可用性(英语:High availability,缩写为 HA),IT术语,是系统的一种特性,代表系统的可用性程度。其度量方式,是根据系统损害、无法使用的时间,以及由无法运作回复到可运作状况的时间,与系统总运作时间的比较。高可用性是进行系统设计时的准则之一。

可用性(Ao) = 总体时间 - 无法运作时间(total time - down time) / 总体时间(total time)

大型网站和小型网站比较有哪些不同?


大型网站核心架构要素

大型网站核心架构要素是什么?

  1. 性能
  2. 可用性
  3. 伸缩性
  4. 扩展性
  5. 安全性

打开一个网站的正常响应时间是多久呢?

DNS域名解析->建立连接->服务器计算->下载内容

响应时间2/5/10原则
当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-10秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过10秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择离开这个Web站点,或者发起第二次请求。

从数据库中查询一条记录的正常时间是多久?

低于100ms

如何计算系统的最佳性能运行点?

如何进行系统性能测试?如何编写性能测试报告?

常见的性能测试工具有哪些?如何选择?

Siege -Siege(英文意思是围攻)是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。 Siege 支持基本的认证,cookies, HTTP 和 HTTPS 协议。

http_load – http_load 以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。可以可以测试HTTPS类的网站请求。

大型网站为了减少HTTP请求,有哪些常见的做法?

主要可通过合并CSS,JavaScript、图片

CSS和JS文件在网页中的位置如何放置是最合适的呢?

WEB前端优化有哪些常用的做法?各是什么原理?

  • 减少HTTP请求数,主要可通过合并CSS,JavaScript、图片。
  • 使用浏览器端缓存。在某些时候,静态资源文件编写需要及时应用到客户端浏览器,这种情况下,可通过改变文件名来实现。
  • 启用页面压缩,文本文件的压缩效率可达80%以上。
  • CSS放在页面最上面,JavaScript放在页面最下面
  • 减少Cookie传输。可以考虑使用独立域名来发送Cookie等。

影响网站高可用性的因素有哪些?

网站的高可用性如何度量?

  • 网站不可用时间(故障时间)=故障修复时间点-故障发现(报告)时间点
  • 网站年度不可用时间=(1-网站不可用时间/年度时间)× 100%

什么是网站的伸缩性?

网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能,通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。

为了实现网站的伸缩性,有哪些固定的模式?

网站的伸缩性设计可以分成两类,一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的 功能;后者是集群内的多台服务器部署相同的服务,提供相关的功能。


建设大型网站的核心思想

建设大型网站的核心思想有哪些?

什么是水平切分?什么是垂直切分?

分层是企业应用系统中最常见的一种架构牧师,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度组成一个完整的系统。在网站的分层架构中,常见的为3层,即应用层、服务层、数据层。应用层具体负责业务和视图的展示;服务层为应用层提供服务支持;数据库提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等。分层架构是逻辑上的,在物理部署上,三层架构可以部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,是网站拥有更多的计算资源以应对越来越多的用户访问。

如果说分层是将软件在横向方面进行切分,那么分隔就是在纵向方面对软件进行切分。网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分隔开来,包装成高内聚低耦合的模块单元,不仅有助于软件的开发维护也便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。大型网站分隔的粒度可能会很小。比如在应用层,将不同业务进行分隔,例如将购物、论坛、搜索、广告分隔成不同的应用,有对立的团队负责,部署在不同的服务器上。

基于分层设计的系统架构带来了什么好处?

分层架构模式最初的目的是规划软件清晰的逻辑结构以便于开发维护,但在网站的发展过程中,分层结构对网站支持高并发向分布式方向的发展至关重要。

如何分割网站中不同的业务?

大型网站分隔的粒度可能会很小。比如在应用层,将不同业务进行分隔,例如将购物、论坛、搜索、广告分隔成不同的应用,有对立的团队负责,部署在不同的服务器上。

分布式是什么意思?有什么常见的应用场景?

对于大型网站,分层和分隔的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完同样的工作,计算机越多,CPU、内存、存储资源就越多,能过处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。

  • 分布式应用和服务:将分层和分隔后的应用和服务模块分布式部署,可以改善网站性能和并发性、加快开发和发布速度、减少数据库连接资源消耗。
  • 分布式静态资源:网站的静态资源如JS、CSS、Logo图片等资源对立分布式部署,并采用独立的域名,即人们常说的动静分离。静态资源分布式部署可以减轻应用服务器的负载压力;通过使用独立域名加快浏览器并发加载的速度。
  • 分布式数据和存储:大型网站需要处理以P为单位的海量数据,单台计算机无法提供如此大的存储空间,这些数据库需要分布式存储。
  • 分布式计算:目前网站普遍使用Hadoop和MapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而不是移动数据,将计算程序分发到数据所在的位置以加速计算和分布式计算。

Hadoop及其MapReduce的原理是什么?

MapReduce是一种编程模式,在很大程度上借鉴了函数式语言。它主要的思想是分而治之(divideand conquer)。将一个大的问题切分成很多小的问题,然后在集群中的各个节点上执行,这既是Map过程。在Map过程结束之后,会有一个Ruduce的过程,这个过程即将所有的Map阶段产出的结果进行汇集。

什么是动静分离?如何实现动静分离?

upstream模块,将使nginx跨越单机的限制,完成网络数据的接收、处理和转发。数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。

读写分离是什么意思?常见的实现方式有哪些?

让主数据库(master)处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库(slave)处理SELECT查询操作。

异步消息队列有哪些应用场景?

常规的使用场景:短信服务、电子邮件服务、图片处理服务、好友动态推送服务等。

自动化技术能帮助我们干哪些事情?如何实现?

自动化运维 自动化部署 自动化测试

如何配置高性能的Linux服务器?背后有什么道理?


大型网站常用技术和工具

如何实现负载均衡技术,有那些常用的工具?

负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软体和硬件来完成。

LVS,haproxy,nginx,F5等各有什么不同,如何选用?

LVS

  • 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;
  • 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
  • 工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;
  • 无流量,保证了均衡器IO的性能不会收到大流量的影响;
  • 应用范围比较广,可以对所有应用做负载均衡;
  • 软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
  • 如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

Nginx

  • 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;
  • Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
  • Nginx安装和配置比较简单,测试起来比较方便;
  • 也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
  • Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
  • Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;
  • Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。
  • Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。

HAProxy

  • HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。
  • 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
  • 支持url检测后端的服务器出问题的检测会有很好的帮助。
  • 它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  • HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
  • HAProxy的算法现在也越来越多了,具体有如下8种:

  • roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
  • static-rr,表示根据权重,建议关注;
  • leastconn,表示最少连接者先处理,建议关注;
  • ource,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
  • ri,表示根据请求的URI;
  • rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
  • hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
  • rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

如何理解TCP/IP七层网络协议?

负载均衡的常见算法有哪些,如何选择?

  • 依序Round Robin
  • 比重Weighted Round Robin
  • 流量比例Traffic
  • 使用者端User
  • 应用类别Application
  • 联机数量Session
  • 服务类别Service
  • 自动分配Auto Mode

如何配置LVS的DR模式?

如何配置haproxy的高可用?

怎样用Nginx来实现负载均衡?

高可用软件keepalived的实现原理是什么?

一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

如何利用rsync技术高效的实现文件的传送和分发?

git的基本原理和实现方式什么?

直接记录快照,而非差异比较 近乎所有操作都是本地执行 时刻保持数据完整性 多数操作仅添加数据 文件的三种状态

如何搭建自己的git服务器?

虚拟化技术xen和kvm有什么不同,如何选择?

CDN技术的原理是什么?为什么要用CDN?

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

  • 内容发布:它借助于建立索引、缓存、流分裂、组播(Multicast)等技术,将内容发布或投递到距离用户最近的远程服务点(POP)处;
  • 内容路由:它是整体性的网络负载均衡技术,通过内容路由器中的重定向(DNS)机制,在多个远程POP上均衡用户的请求,以使用户请求得到最近内容源的响应;
  • 内容交换:它根据内容的可用性、服务器的可用性以及用户的背景,在POP的缓存服务器上,利用应用层交换、流分裂、重定向(ICP、WCCP)等技术,智能地平衡负载流量;
  • 性能管理:它通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态。

如何理解HTTP加速器Varnish,如何运用?

Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来。

如何架构一个日均超过1000w的大型电商网站?

https://blog.csdn.net/he90227/article/details/50800546

参考

大型网站核心架构要素
大型网站技术架构(一)–大型网站架构演化
十个免费的Web压力测试工具
如何构建日均千万PV Web站点
upstream模块
案例分析:基于消息的分布式架构
1号店自动化运维构建
持续集成之“自动化部署”
持续部署,并不简单!
基于Func自动化部署:方案思索及演进
A remote server automation and deployment tool written in Ruby.
Deployment Tool on PHP http://deployer.org
持续集成之“自动化部署”
三张图看遍Linux 性能监控、测试、优化工具
Linux 高可用(HA)集群之keepalived详解
起步 - Git 基础
Varnish 入门
varnish原理精解\

Updated: