【本章导读语】
过程是方法的自然延续。
________Ivar Jacobson,《统一软件开发过程之路》
13.1 并发处理与分流
并发处理与分流的目标就是提高下面几个指标:并发用户数量,吞吐量,可靠性。换句话说,我们希望让应用更快地为更多的用户提供服务,且保证服务过程不会中断。
我们的目标是首先从现有的应用和应用服务器榨取最大的性能,在此之后才考虑添加硬件设备。从长远来看,单纯靠添加硬件来提高性能很难获得好效果:虽然有可能暂时解决眼前的性能危机,但问题仍旧存在,一旦负载增加了又会出现。
l 并发用户
在应用服务器上运行应用,评估其在不能响应请求或响应请求所需时间超出许可范围之前能够支持的最大并发用户数量。
l 吞吐量
应用和应用服务器的吞吐量可以用每秒完成的事务数量来表示,它从一个侧面反映了应用和应用服务器的运行是否正常,指出了服务器的能力。我们是通过应用和应用服务器的调整,来尽可能地提高服务器的吞吐量。
l 可靠性
除了支持最大数量的并发用户、可接受的响应时间之外,另一个要求就是尽量减少请求失败的次数。Web服务器都可能出现故障,最主要的原因是网络延迟或超时,而我们优化的主要工作就是确保用户能够收到他请求的信息。
l 应用系统性能优化
就优化性能而言,应用本身的优化属于最艰巨的步骤之一。首先要深入地分析业务逻辑,然后找出满足业务需求的最优解决方案。每一个业务领域都有其与众不同的特点,因此也不存在适用于所有业务领域的万能解决方案。我们在实践中总结出了许多优秀的设计模式,在规划应用的体系结构时合理选用设计模式对性能大有好处。
² 使用事物对象处理并发
² 多线程开发
l 平台:硬件和JVM
应用开发完毕、服务器选定之后,还考虑操作系统和IIS的配置选项,适当地调整这些选项来提高性能。
l 后端资源
ASP.net系统需要访问后端资源,例如SQL Server数据库。虽然后端资源的优化已经超出了ASP.net的领域,但它决不是一个可以忽略的问题。即使应用在其他方面都做得很好,如果后端数据库总是迟迟不能响应,应用的整体性能必将大受影响。我们同时对SQL Server数据库进行优化。
l SQL Server的并发处理
² 用加锁保证数据的一致性。
一万个用户同时访问,我们可用独享方式打开或者中间层的处理线程进安全性封装。各个请求排队解决。通过SyncLock,仿银行的同时取款。一个人用存折,一个人用卡。同时取里面只有1000块的钱。
² SQLSERVER索引优化
² 通过增加字段处理并发
l 反向代理服务器
反向代理服务器可以将请求转发给内部Web服务器,如果代理服务器能够将请求均匀转发给多台内部服务器,就能达到负载均衡的目的。反向代理方式下能应用优化的负载均衡策略,每次访问最空闲的内部服务器来提供服务
l 使用网络地址转换实现多服务器负载均衡
支持负载均衡的地址转换网关中可以将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的。根据服务器的连接数量或者响应时间进行选择的负载均衡策略来分配负载。
l 双网卡分流
在服务器上安装两个网卡。例如:两个网卡ip分别是192.168.0.1和192.168.0.2。把每个网卡用网线分别接到交换机上。
然后,把客户端计算机分成两批。把第一批计算机的客户端程序中的“服务端ip”设置为192.168.0.1;把第二批计算机的客户端程序中的“服务端ip”设置为192.168.0.2。当所有客户端同时连接服务端工作的时候,服务端的每个网卡都是独立处理自己的数据,每个网卡都能发挥到最大的效能,平均每个网卡都分担了50%的网络流量。
图13-1 用户分流技术
13.2 数据同步的种类
双向同步:中心数据库与远程数据库之间。
以会话为基础:只有同步时需要直接连接。
以脚本为基础:两个数据库需要同步的数据,在同步过程中所需要做的工作。
以事务为基础:变化的纪录被上传,用行状态标记,用数据库日志。
13.3 MobiLink同步解决方案
MobiLink是数据同步的最佳解决方案。
13.3.1 MobiLink同步解决方案
l 设计目标使传输的字节数最少
MobiLink有自动的冲突检测和处理功能,可以管理大型的同步系统,支持数万个远程数据库的同步。功能非常强大,数据安全并全程可监控。可以检查和报告潜在的错误。可测量使用和响应时间。
l 可以定义远程数据库同步的时间表
减小时间间隔可以实现即时同步系统。
图13-2 是MobiLink同步的解决方案。
图13-2 MobiLink同步解决方案
13.3.2 MobiLink的多层体系结构
图13-3 MobiLink多层体系结构
13.3.3 MobiLink的中心数据库
l 可与工业标准的中心数据库同步
Oracle8、Microsoft SQL Server、IBM DB2、Sybase Adaptive Server Enterprise、Sybase Adaptive Server Anywhere、其它ODBC数据库。
l MobiLink同步技术
l 支持多种同步和网络协议
TCP/IP、HTTP、MS ActiveSync、Palm HotSync, ScoutSync、RiverBed Scout、支持无线同步。
l 可选用128位加密技术
13.3.4 MobiLink同步过程
图13-4 MobiLink同步过程
13.3.5 MobiLink如何工作
1. 上传数据
² UltraLite在运行期间保留了前次同步以来的所有变化
² MobiLink Client把这些变化以一个上传数据流的方式发送给MobiLink Server
² MobiLink Server以一个事务的方式修改中心数据库
2. 下载数据
² 存储在中心数据库的MobiLink同步脚本确定了需要下载的数据
² MobiLink Server把这些数据以一个下载数据流的方式发送给MobiLink Client
3. 确认
13.3.6 MobiLink同步脚本
1. 脚本定义了
² 两个数据库需要同步的数据
² 在同步过程中所需要做的工作
2. 通过SQL方法(在版本8中支持JAVA)
3. 脚本存储在中心数据库的数据表中
4. 脚本通过version分组
5. 可以在Sybase Central中定义
MobiLink同步脚本的例程
6. upload_cursor脚本用于远程对中心数据库的修改
SELECT emp_id, emp_fname, emp_lname
FROM mployee WHERE emp_id = ?
7. download_cursor脚本用于中心对远程数据库的修改
SELECT emp_id, emp_fname, emp_lname FROM employee
8. 列的顺序与远程数据库的列的顺序必须一致
易于管理的MobiLink Manager
9. 在图形环境中进行集中管理
² 基于Java的SQL central
² 向导可帮助自动生成脚本
² 帮助解决冲突
13.3.7 MobiLink卓越的性能
1. 经过广泛的测试和使用
2. 性能白皮书
3. 工作线索
dbmlsrv7-w
4. 数据库连接会话
dbmlsrv7–cn
5. MobiLink的上传数据流缓冲
dbmlsrv7–u
6. MobiLink的BLOB记录缓冲
dbmlsrv7-bc
7. MobiLink不会产生锁的竞争
8. 几乎没有磁盘访问
9. JAVA同步脚本
10. 同步部分数据
Publication
Subscription
11. 远程数据库支持多中心数据库结构
12. 增强的远程数据库同步命令行功能
13. 自动同步脚本生成
dbmlsrv8–za+
14. 例子同步脚本自动生成
dbmlsrv8–ze+
15. 增强的insert/delete冲突检查和处理
dbmlsrv8–di/dbmlsrv8-dd
16. 增强的远程用户验证
17. 自动的下载数据行时间戳
18. 基于语句的上传脚本
upload_insert, upload_delete, upload_update
19. 支持 SMP 对称多处理器的服务器
dbmlsrv8 -zt
20. 可选的下传确认
21. MobiLink 的下传数据流缓冲
dbmlsrv7 –d
22. Bulk 方式读取脚本
23. MobiLink 服务器 shutdown 功能增强
24. 增强的连接超时
25. 增强的 TCP/IP 连接检查
26. 增强的并发上传
27. 统计事件脚本
upload_statistics
warnings,errors,inserted_rows,deleted_rows,updated_rows,conflicted_inserts, conflicted_deletes,conflicted_updates,ignored_inserts,ignored_deletes, ignored_updates,bytes,deadlocks
download_statistics
warnings,errors,fetched_rows,deleted_rows,bytes
synchronization_statistics
warnings,errors
连接机脚本还有
deadlocks,synchronized_tables,connection_retries
28. 远程ASA数据库把错误日志发送给MobiLink服务器
29. 错误日志信息更详细
30. 日志信息可以通过工作线索分组
13.3.8 MobiLink的冲突检测与处理
CREATE PROCEDURE DBA.OBagelResolveOrderConflict()
BEGIN
UPDATE orders as o, neworders as n
SET o.table_id = n.table_id
WHERE o.order_id = n.order_id;
DELETE FROM oldorders;
DELETE FROM neworders;
END
old_row_cursor
SELECT order_id, table_id, waiter_id, order_datetime, order_status, order_price, last_modified FROM oldorders
new_row_cursor
SELECT order_id, table_id, waiter_id, order_datetime, order_status, order_price, last_modified FROM neworders
resolve_conflict
CALL OBagelResolveOrderConflict
13.3.9 MobiLink 的错误处理
CREATE PROCEDURE MLHandleError(
OUT action integer,
IN error_code integer,
IN error_message varchar(1000),
IN user_name varchar(128),
IN table_name varchar(128) )
BEGIN
if error_code = -196 -- -196 is SQLE_INDEX_NOT_UNIQUE
or error_code = -194
then SET action = 1000; -- ignore the error and keep going
else SET action = 3000; -- abort the synchronization
end if;
END
call ml_add_connection_script('version', 'handle_error',
'CALL MLHandleError( ?, ?, ?, ?, ? )' );
13.3.10 MobiLink 的错误报告
CREATE TABLE sync_error_audit (
id int DEFAULT autoincrement,
sync_user varchar(128),
table_name varchar(128),
error_msg long varchar,
error_date datetime DEFAULT current timestamp,
primary key( id )
);
call ml_add_connection_script('version', 'report_error',
'CALL MLReportError( ?, ?, ?, ?, ? )' );
13.4 SQL Server数据同步解决方案
l 复制
复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布
在不同地点的数据自动同步更新,从而保证数据的一致性。
l SQL复制的基本元素
出版服务器、订阅服务器、分发服务器、出版物、文章。
l SQL复制的工作原理
SQL SERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再
把这些改变分发给订阅服务器。
l SQL SERVER复制技术类型
² 快照复制。
² 事务复制。
² 合并复制。
l 复制的步骤
² 第一,先来配置出版服务器。
² 第二,创建出版物。
² 第三,设计订阅。
13.5 小结
本章介绍了SaaS应用系统中数据同步的需求,通过并发处理与分流技术,减轻服务器负荷,实现按用户访问量及不同地域访问不同的服务器。
通过MobiLink同步和SQL Server数据同步的具体方案来解决SaaS的数据同步需求。