Confused about distributed engine deployments

When configuring Appian engines distributed across multiple servers, I understand that the topology file tells the servers where other servers are located. What I don't understand is, how does the server itself know which functions it is fulfilling and which ports to open?

For example, let's say for the sake of this post that we have one server for the "forums" engine and all other engines are on a second server. We could model it like this in appian-topology.xml:

<topology>
  <server host="machine1" port="8000">
    <engine name="forums"/>
  </server>
  <server host="machine2" port="5000">
    <!-- Ports will be allocated consecutively -->
    <engine name="notify" />
    <engine name="notify-email" />
    <engine name="channels" />
    <!-- ... -->
  </server>
  <!-- kafka, search etc -->
</topology>

This makes sense, but now suppose machine1 is starting up and runs "k" as usual. How does it then know that it is responsible for "forums" and should listen on port 8000, rather than listening on ports 5000,5001,... for the other engines?

Is this done by looking up own hostname and/or IP address? Does this mean the hostname specified in topology needs to exactly match "/etc/hostname"?

  Discussion posts and replies are publicly visible

Parents
  • In the appian-topoloy.xml file the tabg <server host="machine1" port="500"> and then having <engine name="forum"><engine name="notify"> tells that these two engines must be run on that server and then if you have another server with <engine="process-exec"> then that server will run only process execution..
  • Hi Aswin, yes I understand that, but that is discussing it conceptually rather than how it works in practice. So in your example, if you have a machine starting up and that machine is the one which should be running "forums" and "notify", how does it know that it is that machine as opposed to the machine running "process-exec"?
  • 0
    A Score Level 2
    in reply to adamb940
    Hope you deploy the same appian-topology.xml file on all servers...then if you go to each individual server and do start-suite.sh on prior 17 versions or start.sh in 17.x versions....only the engines denoted in the appian-topoloxy.xml file for that server will start on it and you have to do start.sh on all other servers denoted in appian-toplogy.xml to start all the engines....Appian has a system called heart beat which detects all of this...
  • Yes I am deploying the same appian-topology.xml file on all servers and yes I am using the latest version of Appian (17.4).

    I am still not able to get the answer I want from what you have said. So you say "only the engines denoted in the appian-topoloxy.xml file for that server will start on it", but how does it know which engines those are, in other words how does it know which part of the appian-topology.xml to look at to find the engines for "that server"?
  • 0
    Appian Employee
    in reply to adamb940
    The server tag. (<server host="machine1" port="8000">)
    The value for host can be what you specify in the hosts file, IP or FQDN.
  • Hi Mike, yes, this is what I was getting at in my first post "Does this mean the hostname specified in topology needs to exactly match /etc/hostname"?

    So from your post I understand it can match "/etc/hostname", the machine's IP address, or an entry in "/etc/hosts".

    However, if I have for example a component which sits in front of an engine (and directs traffic to that engine), and put that component's IP address in the "appian-topology.xml", does this mean that Appian will not be able to work out that this server entry is meant to correspond to the server which it is running on?
  • 0
    Appian Employee
    in reply to adamb940
    There shouldn't be any components in between the transaction management components and engines. They will be connecting directly to the specified address and port. So yes, if the host in the topology file does not point to itself (either through IP, FQDN or a mapping) then the processes will not start.
  • Hi Mike, the idea of putting such a component in between the Appian gateway (not sure what "transaction management component" means or if this is the same thing) and the Appian engine, is basically to provide some resilience. The middle component does nothing more than direct traffic, and is not expected to fall over, so has a fixed IP address. If the engine server crashes, we can bring it back up, but it may have a different IP address. Therefore we would have liked to point the Appian gateway to this middle component and then that component redirects the traffic to the actual engine. However from what you have said, it sounds like Appian cannot support this kind of setup,
Reply
  • Hi Mike, the idea of putting such a component in between the Appian gateway (not sure what "transaction management component" means or if this is the same thing) and the Appian engine, is basically to provide some resilience. The middle component does nothing more than direct traffic, and is not expected to fall over, so has a fixed IP address. If the engine server crashes, we can bring it back up, but it may have a different IP address. Therefore we would have liked to point the Appian gateway to this middle component and then that component redirects the traffic to the actual engine. However from what you have said, it sounds like Appian cannot support this kind of setup,
Children