50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

  • 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:361174
用户头像

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

关注

评论

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

InheritableThreadLocal源码解析,子线程如何获取父线程的本地变量?

徐同学呀

ThreadLocal Java源码

JVM-技术专题-MAT解析OOM问题

码界西柚

JVM

Java流(Stream)操作实例-筛选、映射、查找匹配

Java小咖秀

Java stream java8 日常开发

爽面数码打底浆说明书

C13713145387

爽面数码打底浆 哑面数码打底浆 数码打底浆

完美的,从不空口说白话,140个案例带你深入理解微服务

Java架构师迁哥

升级JDK到1.8笔记

风翱

jdk8 4月日更

Coinbase上市在即,这里有你想知道的一切

CECBC

比特币

Spring 类型转换

邱学喆

Converter spring类型转换 GenericConversionService GenericConverter ResolvableType

智慧公安情指勤系统搭建,指挥调度平台解决方

13828808769

智慧公安

计算机原理学习笔记 Day4

穿过生命散发芬芳

计算机原理 4月日更

Linux 下的Zabbix Agent 安装

耳东@Erdong

Linux zabbix 4月日更

Python OpenCV 图像处理之图像直方图,取经之旅第 25 天

梦想橡皮擦

Python OpenCV 4月日更

Rust从0到1-枚举-定义

rust 枚举 Option

《分布式系统设计》(2) 关键概念和基本问题

陈皓07

无脑用 react 的 useCallback

sadhu

React Hooks 无脑 useCallback

什么是跨职能合作的关键?

王辉

团队管理 技术管理 沟通

「MySQL」深入理解事务的来龙去脉

学Java关注我

Java 编程 架构 程序人生 软件架构

《分布式系统设计》(1) 从程序思维到系统思维

陈皓07

树莓派安装pytorch

IT蜗壳-Tango

4月日更

升级版数字人民币试点在深启动 这次有啥不一样?

CECBC

数字人民币

区块链电子证照平台搭建,助推政务数字化发展

13828808769

电子存证 区块链+ #区块链#

透气胶浆、无手感透气胶浆

C13713145387

透气胶浆 仿拔印浆 无手感透气浆

余额宝|三年开发|一二三四+HR面面经,已拿offer|

Java架构师迁哥

三分钟热度的你,不会得到你想要的结果

小天同学

坚持 日常感悟 4月日更 专心 个人思考

真假敏捷教练

escray

面试 面经 4月日更

Spark的动态资源分配

小舰

Spark调优 4月日更

神秘又强大的@SpringBootApplication注解

vivo互联网技术

Java 后端 springboot 注解分析

Python模拟MOBA手游(三)

Bob

Python Python 游戏编程 4月日更

读scss/sass实例项目带你入门

devpoint

SASS scss css预处理器

微服务中台技术解析之项目环境隔离

小江

kafka 架构 DevOps 后端

区块链商品防伪溯源平台搭建,实现数据信息安全共享

13828808769

区块链 商品溯源 #区块链#

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