大型网站技术架构演化

何谓大型网站


大型网站系统特点:

ps:符合这些要求的所谓大型网站真的很少,可遇而不可求也。

说到大型网站,就要先理一下大型网站的特点:高并发,大流量,高可用,海量数据等,本文根据《大型网站技术架构》一书整理如下:

初始阶段的网站架构


初始阶段都比较简单,通常一台服务器就可以搞定一个网站了,一台服务器搞定所有演示站点,后期逐渐优化,向更优的方向进化!

应用服务和数据服务分离


随着网站业务的发展,一台服务器逐渐不能满足需求,这时候就需要将应用和数据分离:

使用缓存改善网站性能


现在的80%的业务访问都会集中在20%的数据上,网站基本上都会使用缓存,前文中也有关于缓存的相关教程,我们的perfect-ssm项目目前处于这个阶段中,通过缓存层的接入,减少部分对数据库的直接压力,提升网站的响应性能。

使用应用服务器集群改善网站的并发处理能力


因为单一应用服务器能够处理的请求连接有限,在网站访问高峰时期,应用服务器会成为整个网站的瓶颈,因此使用负载均衡处理器势在必然,通过负载均衡调度服务器,可将来自浏览器的访问请求分发到应用的集群中的任何一台服务器上,进一步将压力分担掉。

数据库读写分离


当用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈,而目前主流的数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库的数据更新同步到另一台服务器上,网站利用数据库这一功能实现数据库读写分离,从而改善数据库负载压力。

目前很多云服务商都有类似的产品提供,当然,也可以自己搭建数据库集群并在业务代码中进行读写分离的实现(有时间会整理相关教程)。

使用反向代理和CDN加上网站相应


提高网站的访问速度,主要手段有使用CDN和反向代理。

CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,而反向代理是部署在网站的中心机房,当用户请求到达中心机房后,首先访问的反向代理,如果反向代理缓存着用户请求的资源,则直接返回给用户。

使用分布式文件系统和分布式数据库系统


任何强大的单一服务器都满足不了大型网站持续增长的业务需求。 分布式数据库时网站数据库拆分的最后手段,只用在单表数据规模非常大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务拆分,将不同业务的数据部署在不同的物理服务器上。

使用NoSQL和搜索引擎


搜素引擎也基本已经形成现在大型网站必须提供的功能了,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。各种开源产品不断涌现,遍地开花:redis、mongodb、solr、elastic stack、hadoop、spark......

关于搜索引擎的接入,目前考虑在My-Blog项目中接入elastic search,优化文章搜索模块。

业务拆分


大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将真个网站业务拆分成不同的产品线。

具体到技术上,也会根据产品线话费,将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过超链接建立管理,也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

分布式服务


由于每一个应用系统都需要执行许多相同的业务操作,比如用户管理,session管理,那么可以将这些公用的业务提取出来,独立部署。

本文思维导图


整理图片整理的要吐血了。

如果觉得本文对你有帮助的话,欢迎大家随手点赞、转发。

原文发布于微信公众号 - Java团长(javatuanzhang)

原文发表时间:2018-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

web server 你真的需要

最近有几个项目都是涉及到嵌入式web服务器的,我们经常要用到像js脚本,cgi 技术和css格式样表,以及html语言来描述网页,那么怎么调试呢?对于做惯了嵌入...

3206
来自专栏王金龙的专栏

大型网站架构技术一览

前端指用户请求到达网站应用服务器之前经历的环节,通常不包含网站业务逻辑,不处理动态内容。

2031
来自专栏知晓程序

用手机也能看小程序后台数据了!微信你很棒棒哦

这个小程序,能让开发者、运营者在手机上就能查看小程序的运营数据,随时随地掌握小程序的市场反应。

841
来自专栏腾讯IVWEB团队的专栏

WEB 开发性能优化:核心定义介绍篇(1)

随着互联网的蓬勃发展,对于技术人员来说最大的挑战就是如何在保证业务快速发展的同时,也可保证不断复杂的业务对用户体验的影响,本文系统介绍了相关指标。

4130
来自专栏极客猴

10张图带你了解后台服务架构演变

上篇文章讲了一些高并发相关的知识,相信大家对高并发有些简单的认识。说到高并发,往往离不开分布式系统。人们经常将两者拿来一起讨论,因为高并发(High Concu...

6982
来自专栏木子昭的博客

Python游戏开发! Mac完美安装pygame

2763
来自专栏Petrichor的专栏

git: 简洁高效 的 双分支式 git flow (master + dev)

使用 git branch (git 分支)进行版本控制,可以让大家有效地合作,使得项目井井有条地发展下去。

1793
来自专栏北京马哥教育

浅谈运维工具体系

运维行业正在变革,推荐阅读:30万年薪Linux运维工程师成长魔法 运维流程管理工具 发布变更流程管理工具:做为系统接口与其他角色的工作衔接。并提供审批环节控制...

4368
来自专栏13blog.site

大型网站技术架构(二)--大型网站架构演化

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 何谓大型网站 大型...

3126
来自专栏BeJavaGod

Shiro系列(2) - 权限模型以及权限分配的两种方式

顶级账户分配权限 用户需要被分配相应的权限才可访问相应的资源。权限是对于资源的操作一张许可证。给用户分配资源权限需要将权限的相关信息保存到数据库。 这些相关内容...

3264

扫码关注云+社区