双中心的应用双活设计上应尽量避免跨中心的调用,一个交易尽量在同中心内完成。在入口和出口出可以考虑负载均衡,双中心内部尽量避免负载均衡。对于持久化层如果不能做到双中心同时读写,可考虑读写分离或者主备方式。
收起双活环境负载的问题可以通过配置负载均衡设备来解决啊,交给硬件来调配负载不是更省事吗?
收起交行的方式是一个折衷的办法,牺牲了一点高可用,换取了整体的性能。整体思路是对的,就是尽量减少跨中心的访问。无论是应用到数据库的连接,还是数据库内部的协同机制。所以在考虑双活中心的应用负载分布时,就要充分考虑双活的技术特点。
一, 外围系统对该应用服务器的调用,尽量避免跨中心调用。
二, 应用服务器访问数据库服务器,配置本地访问,只有本地访问都不通的情况下才会尝试跨中心访问。
三, 工作负载。由于双活环境的特点,例如DB2的GDPC集群,CF组件分主次,主CF工作的内容比较多,所以和主CF同中心的数据库节点处理性能更好。那么可以考虑将更多的负载放在主CF所在的中心。
四, 批处理。批处理建议也是放在主CF所在的中心来提高性能。
五, 读写分离。如果应用能做到读写分离,那就最理想了。
为了不影响重要交易的性能,对应用负载和路由肯定是要严谨的考虑的。
直接说个例子,假设数据库用的是db2集群,距离主要造成以下影响:1、db2节点与两个中心cf的通讯时间增加了,造成sql语录require lock时间增加了,commit时将page写入cf中的gbp的时间也增加了;2、双中心磁盘同步造成db2写active log的时间增加了。
目前主机上的解决方法是在a中心部署2个同步的cf,在b中心部署一个闲置的cf,a中心的交易只访问a中心的数据库节点,这样a中心的交易就只受第二点影响从而性能不会太差,然后把重要的交易路由至a中心,b中心只负责处理一些对性能要求不高的查询交易。
收起