zoukankan      html  css  js  c++  java
  • bigworld源码分析(4)——BaseAppMgr分析

      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 = 99999.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

      

  • 相关阅读:
    use other gpio pins as i2c
    systemd详解详解
    Python ctype sizeof incorrect!
    libvirt 安装篇
    Django Restful Framework (二): ModelSerializer
    Django Restful Framework (一): Serializer
    libvirt 网络手册(二):桥接网络
    KVM 虚拟机联网方式:NAT 和 Bridge
    libvirt 网络手册(一)
    CentOS 7 环境配置
  • 原文地址:https://www.cnblogs.com/chobits/p/5085865.html
Copyright © 2011-2022 走看看