假设性思考~~~~
如果企业级开发中, 系统这样设计, 能否满足各类系统需求
——– 第一阶段限制
- 系统中所有的对象只有以下两种情况 a) 常量bean, 常量,不会改变的数据,固定配置,固定参数 a) 数据bean, 拥有getter,setter方法的纯javabean对象,均可持久化,如POJO,DTO b) 服务bean, 即bean组件, spring管理下的bean组件,如DAO,MO,AO,SO i. 对象的成员变量只能是bean组件 ii. 空参构造函数, 无需初使化 iii. 对象的方法的参数和返回类型必须为ID数据或数据bean
- 数据bean均需持久化管理,或者持久化到数据库服务器,或者持久化到缓冲服务器. 方法退出后,此bean中不可以保持任何引用.
- 数据bean的获取只能来源于 a) HTTP请求参数 b) 缓冲服务器 c) 数据库服务器 d) 其它的外部服务
- 数据bean不能来源于当前服务器的内存缓冲或者全局变量或者本地硬盘
- 数据bean在每台服务器获取后,都应该是一致的,不存在不同步的情况
- 数据bean是无状态的,与服务器无关,因此bean是一致的
- 数据bean的一致性由缓冲服务器,数据库服务器,或其它外部服务来保证
-
换句话说, 所有服务在等待请求状态时, 本地服务器不可以保持任何数据bean的引用.
- 服务bean中每个方法,只能接受数据bean做为参数,也只能返回数据bean做为结果 10.服务bean中每个方法,如果根据每个bean调用外部服务获取的数据一致,则相同的参数,必须返回相同的结果 11.服务bean中每个变量,不能是数据bean,只能是常量bean或者服务bean的引用, 12.服务bean中每个方法,不能依赖于成员变量, 没有上下文参数, 即此类对象性质等同于工具类助手类对象, 可实现单例模式
13.服务器集群=任意个应用服务器+外部服务器,应用服务器单点故障不会影响业务轮转
————- 第二阶段
- 由于数据bean是可序列化的,因此可以用固定的字符串ID来表示相应的数据bean
- 如果数据bean实现版本管理,可以通过 id.version 来确定唯一的数据
- 组合id.version与数据bean后产生的数据bean, 等同于常量bean
- 由于服务bean可实现单例,因此服务bean可以用固定的字符串name来确定唯一的服务bean
- 服务bean可以byName方式或byType注入, 再加上空参构造
————- 第三阶段
- 外部服务器上实现字符串ID获取最新版本的数据bean
- 本地服务器上实现字符串name获取唯一版本的服务bean
- 本地服务器上实现字符串name+方法名name获取服务bean指定的方法
- 由字符串name+方法名name确定唯一ID,来确定唯一方法
- 客户端传入字符串ID及方法ID,传至服务器,可返回唯一的字符串ID
- 字符串ID与方法ID,确定唯一的请求ID,可转换为字符串,也可逆转换
- 这里的唯一ID,都可以理解为常量bean
————- 第四阶段
- 本地服务器只处理两种逻辑 a) 传入唯一字符串ID,去外部服务器获取结果bean b) 根据字符串ID,方法ID,处理后返回结果bean
- 本地服务器,外地服务器都可理解为数据bean的转换器
- 唯一ID可用来标识 a) 常量bean,数据bean,服务bean,服务bean的每种请求
- 可使用缓冲服务器或代理服务器来缓冲唯一ID对应的各类数据
————- 第五阶段
- 使用URL规范来表示唯一请求ID,传至服务器,返回唯一的HTML代码
- HTTP协议中相同的URL,在服务端数据版本相同时,应该返回相同的HTML
- HTTP协议中与上下文参数相关的数据,应保存在HTTP.HEADER中,如处理服务器的ID,处理时间,处理版本,处理参数
- 由HTTP协议中的last-modified,etag来标识服务端的版本号,由max-age,Expire来标识版本的生命周期
- HTTP请求,对与相同的URL,相同版本,在生命周期内,返回唯一的HTML结果
————————————>
假设以下皆可实现
- 对数据bean操作自动保存至缓冲服务器, 根据缓冲策略刷新至数据库服务器
- 缓冲服务器选择性支持以下缓冲,单条缓冲,分页缓冲,TOP缓冲,分类缓冲,自增缓冲
- 数据bean是有版本的,服务bean,及服务bean中的每个方法也是有版本的
————————————>
高性能WEB服务
- 由代理服务器或者缓冲服务器缓冲HTTP结果,如果版本未更新,则返回304或者缓冲的内容
- 当缓冲生命周期结束后,由代理服务器去应用服务器验证每个数据bean及方法的版本,如果数据及方法的版本均未改变,则返回304或者缓冲的内容
- 如果数据bean或者方法bean更新,则由方法处理返回最新版本的结果bean,并通知代理服务器或者缓冲服务器更新版本
未完待续…