BaseAppMgr是用来管理BaseApp的,在整个bigworld中只有一个。本篇就BaseAppMgr的一些核心功能进行分析:
(1) BaseAppMgr是如何通知BaseApp创建Entity的
(2) BaseAppMgr如何针对多个BaseApp做负载的
(3) BaseAppMgr如何给BaseApp做backup的
1. BaseAppMgr通知BaseApp创建Entity的
baseAppMgr在收到dbMgrcreateEntity命令时,通过其消息接口将消息发送给最合适的BaseApp,流程如下图:
整个流程非常简单,主要就是选取一个最好的(best)baseApp,然后消息通知它就可以了。
2. BaseAppMgr选取best baseApp
那么baseAppMgr是如何选举出bestBaseApp的呢?代码也很简单,如下:
/**
* This method finds the least loaded BaseApp.
*
* @return The least loaded BaseApp. If none exists, NULL is returned.
*/
BaseApp * BaseAppMgr::findBestBaseApp() const
{
const BaseApp * pBest = NULL; float lowestLoad = .f;
BaseAppMgr::BaseApps::const_iterator iter = baseApps_.begin(); while (iter != baseApps_.end())
{
float currLoad = iter->second->load();
// 通过负载值比较,找出最小的一个
if (currLoad < lowestLoad)
{
lowestLoad = currLoad;
pBest = iter->second.get();
} iter++;
} return const_cast< BaseApp * >( pBest );
}
从代码中可以看出,主要就是针对所有存在的baseApp,然后选择出load最小的一个。如果不存在的话,返回NULL。
3. BaseAppMgr给BaseApp做backup