写点什么

分离通用和用户专有数据流,实现可扩展的网站

  • 2008-03-06
  • 本文字数:1013 字

    阅读完需:约 3 分钟

Gojko Adzic 是一位作者兼 IT 咨询师,他发表了一篇很有趣的文章,该文章阐述了利用分离动静态内容这种架构的好处达到扩展 Web 应用的目的:

在一个要求可扩展性的网站项目中,有很多需要早做决定的架构问题,其中之一就是将数据流分离成两部分:一是用户特定数据,二是通用数据。

这种分离数据方法的主要原理是因为它们的使用约束意味着两种不同的缓存和状态管理方法:

例如,大部分通用数据流是完全无状态的,但用户的特定操作通常是有状态的。如果把这两种数据流清晰划分开,那么我们就可以通过无状态的服务和服务器来处理通用操作。无状态服务比有状态服务更容易理解,因为他们可以很容易地被代替而不会影响任何的系统操作。你如果想达到更大的吞吐量,只要使用 round-robin 策略和简单的负载均衡器将请求分发给更多廉价的服务器就可以了。而有状态服务的扩展却不是如此容易的事——它们可能会依赖于资源锁定,而负载均衡器就不得不将来自于同一个 Session 的所有请求发送到同一个服务器上。如果一个有状态的服务器宕机了,那么对系统运行有明显的影响,所以这些有服务必须比那些无状态服务具备更快的恢复能力。

Gojko 提出了如何分离数据流的指导原则。对于一个双层架构的应用,要创建不同的数据源。对于静态数据流,要打开缓存,关闭事务。对于三层架构的应用来说就更复杂一些:

在三层架构中,我喜欢在中间层就直接分离为用户特有数据服务器组和通用服务器组。Web 服务器在前端从第一组中间件服务器中得到通用数据,而利第二组中间件服务器管理事务。通用数据流服务器可以做成集群,很容易扩展,而且任何负载均衡系统都可以在集群外部运行。它们可以被重启、直接从集群中拿掉或者再放回去,这些都不会影响系统的运行。透明的缓存也很容易应用于这些服务器。而另一方面,用户特有数据的服务器在这些方面要复杂一些,而且不能使用透明的缓存。这种分离方法就是为了将来的扩展和缓存做打算,因为通用数据服务器可以按区域划分,放在几层缓存服务器之下,通过产品界限或类型垂直分开。而用户特定数据服务器的功能要专一且独立,所以当我们以后需要分割时,只要关注这一小部分就可以了。

Gojko 建议,尽可能让通用服务器利用缓存能力,如使用 AJAX 技术将用户特定内容加载到通用页面,使用 cookies 保存每个页面顶部都要显示的用户详细信息。通用数据流可以使用高性能的 http 服务器,如 LightHttpd

查看英文原文: Generic versus User Specific Data Streams for Scalable Web Sites

2008-03-06 17:36914
用户头像

发布了 100 篇内容, 共 23.3 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

golang中的map

六月的

Go map

Go语言入门03—条件语句

良猿

Go golang 后端 10月月更

途游游戏 DevOps 实践|都说「单元测试」好,「AAAC四步法」少不了

极狐GitLab

DevOps 运维 单元测试 CI/CD 代码安全

不可错过!14位安全大拿齐聚!AMD、Arm及Intel等技术专家解读系统安全 | 2022云栖大会

OpenAnolis小助手

开源社区 系统安全 云栖大会 龙蜥安全专场 操作系统峰会

Go语言入门04—循环语句

良猿

Go golang 后端 10月月更

为什么vue3要选用proxy,好处是什么?

hellocoder2029

JavaScript

BH1750 光照传感器文档详解 及 驱动设计

矜辰所致

传感器 stm32 I2C协议 10月月更 BH1750

uniapp打开地图选择位置

源字节1号

软件开发 前端开发 后端开发 小程序开发

一文彻底搞懂前端缓存机制

hellocoder2029

JavaScript

自主创新、领先一代,星环科技成功登陆科创板

星环科技

大数据 开源

驾考宝典携手HMS Core统一扫码服务,构建复杂场景中的流畅扫码体验

HarmonyOS SDK

扫码

node+express操作cookie

木偶

前端 Node Express 10月月更

促双碳|AIRIOT智慧能源管理解决方案

AIRIOT

物联网 智慧能源

“程”风破浪的开发者|OpenHarmony应用开发环境搭建

技能实验室

OpenHarmony “程”风破浪的开发者

原来Vue3的computed属性还能这么用啊🔥

渔戈

Vue 前端 10月月更

强烈推荐!腾讯T8架构师手写的SpringBoot分布式架构笔记

小小怪下士

Java 分布式 后端 springboot

数字云栖,邀您共享极致计算与创新进化的科技盛宴

阿里云CloudImagine

阿里云 边缘计算 云栖大会

分布式事务-CAP理论

zarmnosaj

10月月更

生产环境P0级事故,整个项目组被罚

CTO技术共享

【kafka原理】kafka Log存储解析以及索引机制

石臻臻的杂货铺

kafka 10月月更

企业如何添加内嵌式的帮助文档

Baklib

帮助文档

pt尾递归优化

hellocoder2029

JavaScript

遮罩和蒙版有什么区别,视频遮罩怎么用

懒得勤快

如何进行企业数字化转型?传统企业数字化转型的3大底层逻辑

优秀

企业数字化转型

秒杀活动!!!! 如何撑住10W QPS

CTO技术共享

10月月更

ERP到底是自研还是外采好????

CTO技术共享

10月月更

担时代任务 与国家同频 | 九科信息创始人万正勇:自主可控是中国超级自动化技术发展的必要条件

九科Ninetech

RPA 信创

【kafka原理】 消费者偏移量__consumer_offsets_相关解析

石臻臻的杂货铺

kafka 10月月更

Mysql数据库基础之数据库的安装与配置

渔戈

MySQL 数据库 10月月更

常见恶意软件类型及危害

郑州埃文科技

网络安全 恶意软件 办公安全

前端懒加载和预加载

hellocoder2029

JavaScript

分离通用和用户专有数据流,实现可扩展的网站_架构_Gavin Terrill_InfoQ精选文章