⚠️ 容灾处理
容灾备份、恢复方案的重要性不言而喻,用户在服务端的核心业务越来越依赖于系统的可靠运行,同时系统中的关键业务数据已经成为用户最为重要的资产。因此,是否对关键业务数据进行备份保护,甚至提供自动的恢复处理是衡量一款引擎是否可靠的关键标准之一。
在我们KBE引擎设计之初,已把容灾处理作为核心。随着版本的迭代,引擎可以对数据进行自动备份、自动恢复,甚至对实体、实体状态、Cellapp上的Space等都可以进行恢复。
Machine进程的作用:
我们在app介绍的一文已经提到,Machine进程是用于监视服务器进程的,每个服务器机器上都有一个Machine,它可以:
- 启动或停止服务器进程
- 通知服务器群组各个进程的存活状态
- 监视机器的使用状态:CPU/内存/带宽等
当某个app出现问题(如crash、断开连接等)时,会通知服务器群组。有了它可以让引擎第一时间知道问题,并进入容灾处理状态。
Baseapp的容灾处理:
在Baseapp中提供了自动存档、自动备份、自动恢复的功能。
1. 自动存档:
间隔一个周期,自动保存数据进数据库,使实体上的属性都被存档。
当然,你也可以手动进行存档,通过调用API-Entity.writeToDB。
该周期值,可以在 {项目资产库}/res/server/kbengine.xml
中,找到 baseapp
的标签块,修改 archivePeriod
中的值(如果没有,自行增加)。
<root>
...
<baseapp>
<!-- 自动存档的时间周期(秒)
(Automatic archiving time period(secs))
-->
<archivePeriod> 300 </archivePeriod>
</baseapp>
...
</root>
这个值是一个Float型,单位为秒,默认为300秒。
2. 自动备份:
间隔一个周期,自动把Entity备份到其他Baseapps上去。见下图:

一个实体会每隔一个周期,自动备份到其他Baseapps上,这个策略是引擎内部自动进行的。你可以修改自动备份的时间间隔( backupPeriod
)以及是否备份未定义的属性( backUpUndefinedProperties
)。
<root>
...
<baseapp>
<!-- 自动备份的时间(秒)
(Automatic backup time period(secs))
-->
<backupPeriod> 300 </backupPeriod>
<!-- 是否备份未定义的属性
(Whether backup undefined property)
-->
<backUpUndefinedProperties> 0 </backUpUndefinedProperties>
</baseapp>
...
</root>
backupPeriod
中的值是Float型,单位秒,默认为300。
backUpUndefinedProperties
中的值是Bool型(0或1),默认为0表示不备份未定义的属性。
3. 自动恢复(尚未实现):
一旦某Baseapp crash后就变得不可用:

与Crash的Baseapp连接的客户端会被断开连接,当重新连接后,它们将继续与其原来的Proxy进行连接(如果没有timeout的话)。
**注意:**该功能暂且未实现。
Cellapp的容灾处理:
在Cellapp中提供了自动备份、自动恢复的功能。
当某一个Cellapp出现问题(如crash、断开连接等)时,引擎会根据负载自动寻找一个健康的Cellapp,并把crash的Cellapp上所有Space和当前拥有base的Entity进行恢复。而每个被恢复的Entity会调用其回调函数 onRestore()
,使脚本层收到通知,并可自行进行应对处理。开发者要做的,就是正确处理 onRestore()
,使自己的业务逻辑不受影响。