大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

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

关注

评论

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

基于 KubeVela 的机器学习实践

阿里巴巴云原生

实践GoF的设计模式:单例模式

华为云开发者联盟

程序设计 设计模式 单例模式 GoF 共享实例

恒源云(Gpushare)_如何获取实例SSH端口号?技巧大放送7!

恒源云

服务器 终端登录

一文简述:云原生架构的四个特征六个原则

穿过生命散发芬芳

4月月更

一场由TiCDC异常引发的GC不干活导致的Tikv硬盘使用问题

TiDB 社区干货传送门

日志中台不重不丢实现浅谈

百度Geek说

后端

恒源云(Gpushare)_啥,还不知道咋关机?技巧大放送6!

恒源云

人工智能 GPU服务器

如何满足一个前端对 Mock 的全部幻想

Liam

前端 Jmeter Postman Mock

硅谷区块链公司Espresso Systems因涉嫌知识产权盗窃被起诉

西柚子

百度程序员开发避坑指南(前端篇)

百度Geek说

前端

实例解析网络编程中的另类内存泄漏

华为云开发者联盟

TCP 网络编程 网络 压力测试 内存泄漏

日志中台不重不丢实现浅谈

百度开发者中心

厉害!我带的实习生仅用四步就整合好SpringSecurity+JWT实现登录认证!

沉默王二

Java

资产设备信息管理系统的功能

低代码小观

资产管理 CRM 企业管理系统 CRM系统 企业设备管理

王者荣耀商城异地多活架构设计

阿卷

架构实战营

多场景实现供应链可视化,小家电产业出海焕发新活力

数商云

产业数字化 供应链 供应链系统

fastposter v2.7.0 发布 电商海报编辑器

物有本末

海报 fastposter 海报生成器 海报编辑器 主图编辑器

局部变量是线程安全的,原因是什么?

华为云开发者联盟

线程 高并发 变量 线程安全 局部变量

图文并茂|彻底搞懂零拷贝(Zero-Copy)技术

深度Linux

内存管理 Linux内核 进程管理 嵌入式开发 设备驱动

银行推进人工智能技术应用时需同步考量可信AI的评估与验证

易观分析

人工智能 AI

"三高"Mysql - Mysql备份概览

懒时小窝

MySQL 高可用 MySQL 数据库

后端开发【一大波干货知识】tcp/ip定时器与滑动窗口详解

Linux服务器开发

网络协议 TCP/IP 后端开发 Linux服务器开发 C++后台开发

眼见为实,看看MySQL中的隐藏列!

码农参上

MVCC MySQL 数据库 4月月更

测试人员最佳测试管理工具

阿里云云效

阿里云 云原生 开发 测试管理 测试管理工具

活动预告 | 对话ACE:Oracle停服俄罗斯,国产数据库未来发展

OceanBase 数据库

oceanbase

2022年IAA行业品类发展洞察系列报告:内容向APP及休闲游戏的突围

易观分析

IAA 休闲游戏

恒源云(Gpushare)_如何加速从 GitHub 上克隆代码或下载文件?技巧大放送8!

恒源云

GitHub

如何为网站建立一个FAQ页面?

小炮

FAQ

CentOS8安装erlang 和 RabbitMQ

阿Q说代码

4月月更 RabbitMQ安装 erlang安装

pip:带你认识一个 Python 开发工作流程中的重要工具

华为云开发者联盟

Python 项目管理 pip 依赖关系 包管理器

netty系列之:netty中的核心编码器bytes数组

程序那些事

Java Netty 程序那些事 4月月更

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