大规模网站开发技术


大型网站的特点

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

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

什么是PV,UV和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前端优化有哪些常用的做法?各是什么原理?

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

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

什么是网站的伸缩性?

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

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

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


建设大型网站的核心思想

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

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

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

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

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

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

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

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

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

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

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

Nginx

HAProxy

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

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

如何配置LVS的DR模式?

如何配置haproxy的高可用?

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

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

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

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

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

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

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

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

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

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

如何理解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原理精解\

Yan Peipan 25 January 2015