写点什么

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

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

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

关注

评论

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

Java 如何在 Array 和 List 之间进行转换

HoneyMoose

2分钟快速上手流水线的创建与运行

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

PAG动效框架源码笔记 (一)概览

olinone

ios Android; 特效

只需要六步!快速开启专属的风控系统

Geek_2d6073

面试前必刷!Java高级工程师1380道面试题(附答案)分享

架构师之道

Java 面试

网易伏羲RL4RS荣获SIGIR2023 Resource Paper,推动深度学习技术创新

网易伏羲

从原理到应用,人人都懂的ChatGPT指南 | 京东云技术团队

京东科技开发者

人工智能 AI ChatGPT4 企业号 5 月 PK 榜

探讨AIGC的崛起历程,浅析其背后技术发展

华为云开发者联盟

人工智能 华为云 AIGC 华为云开发者联盟 企业号 5 月 PK 榜

ChatGPT会对我们日常生活带来什么影响?这些技术会改变我们学习阅读工作方式吗?| 社区征文

汀丶人工智能

人工智能 ChatGPT 人工智能ChatGPT 吗? 三周年征文

怎样成为优秀的后端工程师

越长大越悲伤

后端、 java‘

云服务器管理用什么软件好?行云管家好用吗?

行云管家

云计算 云服务器 云资源 云管理

Java实现多用户即时通信系统

timerring

Java

小程序开发中的插件、组件、控件,傻傻分不清楚

没有用户名丶

简单好用的网页设计工具:EverWeb中文版

真大的脸盆

Mac 网页设计 Mac 软件 网页布局 网页制作

什么是人工智能领域的深度学习?

汪子熙

人工智能 深度学习 强化学习 三周年连更

上海国家会计学院刘勤:事项法会计支撑企业更好地应对不确定性

用友BIP

SET智能合约量化系统app开发案例

薇電13242772558

合约量化 量化交易

Java 如何在 Array 和 Set 之间进行转换

HoneyMoose

用Leangoo领歌Scrum敏捷开发工具管理产品路线图?

顿顿顿

Scrum 敏捷开发 敏捷项目管理 scrum敏捷工具

持续交付下的分层自动化测试

单东东

DevOps 持续交付 持续测试 测试自动化 junit5

平台工程助力企业提升研发效能

SEAL安全

研发效能 平台工程

万字长文——Go 语言现代命令行框架 Cobra 详解

江湖十年

golang 后端 命令行 命令行工具

使用MASA全家桶从零开始搭建IoT平台(三)管理设备的连接状态

MASA技术团队

IoT MASA .NET 7

使用NineData定制企业级数据库规范

NineData

数据库 dba 企业管理工具 数据库开发工具 企业级数据库规范

2023一线大厂 Java 面试八股文大全(整理版)附答案详解!

采菊东篱下

Java 面试

LED显示屏行业发展步伐

Dylan

发展 科技 LED显示屏

如何使用apache的ab压力测试小工具传参数

北桥苏

ab测试 A/B 测试

文盘Rust —— rust连接oss | 京东云技术团队

京东科技开发者

rust OSS 对象存储 rust语言 企业号 5 月 PK 榜

万字长文详解如何使用Swift提高代码质量 | 京东云技术团队

京东科技开发者

swift 代码质量 代码质量检测工具 京东技术 企业号 5 月 PK 榜

关于华为MetaERP,我说几句

SAP虾客

oracle 华为 SAP metaerp

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