code: protected Module createModule(final TwillContext context) {
      return Modules.combine(
        new ConfigModule(cConf, hConf),
        new IOModule(),
        new ZKClientModule(),
        new MetricsClientRuntimeModule().getDistributedModules(),
        new LocationRuntimeModule().getDistributedModules(),
        new DiscoveryRuntimeModule().getDistributedModules(),
        new DataFabricModules().getDistributedModules(),
        new AbstractModule() {
          @Override
          protected void configure() {
            // For Binding queue stuff
            bind(QueueReaderFactory.class).in(Scopes.SINGLETON);
  
            // For program loading
            install(createProgramFactoryModule());
  
            // For binding DataSet transaction stuff
            install(new DataFabricFacadeModule());
  
            bind(ServiceAnnouncer.class).toInstance(new ServiceAnnouncer() {
              @Override
              public Cancellable announce(String serviceName, int port) {
                return context.announce(serviceName, port);
              }
            });
          }
        }
      );
    }
docs: TODO(terence) make this works for different mode