软件外包需求洽谈的过程中,往往需要根据客户期望的网站并发量来评估工作量,客户往往都想要更多的并发量,更多并发量也意味着更多的工作量,本文就一步一步告诉大家,1千并发与1千万并发的网站系统架构有什么区别? 既然说的是大型网站架构,那么架构的背后自然是解决人因面对大型网站特性而带来的问题。这样可以先给大家说下大型网站的特性,这些特性带来的问题就是人要解决的问题:
大型网站目标 既然说到了大型网站的特性,那么解决这些特性带来的问题要达到什么目标呢?如下:
大型网站架构目标 每个目标背后面临着技术、设计、维护等诸多方面的挑战; 而目标本身的期望值也会根据实际情况进行调整,这也意味着网站架构建设是个不断调整的过程。 有了问题,也定了伟大的目标,那么网站在不同阶段面对不同的问题,是如何解决的?又是如何一步步成长为大型网站架构,实现这些伟大的目标呢? 如何网站架构 首先,什么是大型网站架构呢? 其实大型网站架构的概念对于每一个开发者来说很笼统、很模糊,正如盲人摸象,看到的、了解到的只是很小的一部分,大部分情况下我们只是负责架构中的一小块内容,所以很难清晰地给出具体定义。这就是所谓“不识庐山真面目 只缘身在此山中”的尴尬吧。所以我们要跳出来,站在宏观的角度,从整体到细节实现来认识大型网站架构。 那么从宏观的角度怎么去认识大型网站架构呢?正如前面几篇《细品架构系列》所描述对架构的认识,按照问题识别—>概念认知—>架构切分的思路,来分析大型网站架构的诞生:
在进行分析大型网站架构的演进之路前,首先我们要明确的两个价值观:
还有,大型网站架构演进必须避免的几个误区:
架构体系演进 单机时代 草根时期,快速开发网站并上线。当然,通常只是先试水,用户规模也没有形成,经济能力和投入也非常有限。应用程序、数据库、文件等所有资源都集中在一台 Server上,典型案例:基于 LAMP 架构的 PHP 网站;
单机时代(纯依赖RDBMS)
缓存出场 有一定的业务量和用户规模了,想提升网站速度,于是,缓存出场了。
单机时代+缓存出场
如上图,缓存可以分为:
数据服务与应用分离 市场反响还不错,用户量每天在增长,数据库疯狂读写,逐渐发现一台服务器快撑不住了。于是,决定把数据服务和APP做分离。
数据服务与应用分离
分离后三台 Server 对硬件资源的需求各不相同:
数据库读写分离 单台数据库也感觉快撑不住了,一般都会尝试做“读写分离”。由于大部分互联网“读多写少”的特性所决定的。Salve的台数,取决于按业务评估的读写比例。
数据库读写分离
应用服务集群 数据库层面是缓解了,但是应用程序层面也出现了瓶颈,由于访问量增大,加上早期程序员水平有限写的代码也很烂,人员流动性也大,很难去维护和优化。所以,很常用的办法还是“堆机器”。
应用出现瓶颈 负载均衡集群
通过集群解决高并发、海量数据问题的常用手段,实现系统的可伸缩性。通过负载均衡调度器,可将用户访问分发到集群中的某台 Server 上,应用服务器的负载压力不再成为整个网站的瓶颈。 集中式缓存、Session集中存储 加机器谁都会加,关键是加完之后得有效果,加完之后可能会引发一些问题。例如非常常见的:集群应用之间页面输出缓存和本地缓存一致性的问题,Session保存的问题……。
集中式缓存 Session集中存储
动静分离 动静分离也是提高网站响应速度的一种常用方式。将动态请求与静态请求分离开,尽量减少对应用服务器的压力。同时,可以再进一步对静态请求,进行缓存,以加快响应速度。可以需要开发人员配合(把静态资源放独立站点下),也可以不需要开发人员配合(利用7层反向代理来处理,根据后缀名等信息来判断资源类型)。
使用动静分离
反向代理和CDN加速网站响应 使用反向代理和CDN加速网站响应:CDN 和反向代理的基本原理都是缓存,区别在于:
使用 CDN 和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。
使用反向代理和 CDN 加速网站响应 |
|
来自: liang1234_ > 《架构参考》