What is the optimal number of FME Engines? Should I use multiple machines?
What an excellent question and one we receive quite often!! You are planning your system architecture, budget, hardware, etc and you need to know exactly what is required. The reality is that your conditions will be quite unique compared to others and that makes it very hard to say. If I'm pressed, I will probably say 42, but a better answer follows.
How FME Engines Work
Let's say we need to do the following:
- Run 6 data processing workflows (jobs)
If we have a single FME Engine, we can run 1 job and then 5 jobs will be queued for later. If we add 1 more FME Engine, then we can process 2 jobs at the same time. So, if we have 6 FME Engines, we can process 6 jobs at the same time.
1 FME Engine = 1 job processed
6 FME Engines = 6 jobs processed (concurrently)
Deciding on the Number of FME Engines
Your data, required transformations, system resources are unique and will produce a unique time required per job. In addition, you may have requirements on how many jobs need to be run per hour or minute. These all impact how many FME Engines you need. We provide proof-of-concept licenses to help you evaluate this.
Here is a nice neat (over-simplified) formula:
number of FME Engines = number of jobs you'd like done in an hour / number of jobs an engine can do in an hour
Dealing with System Resources
Let's make this a bit more real world and consider the impact of system resources like memory, processing power, I/O, etc. Imagine that jobs require much more time to process and system resources are limited.
Assume we know that:
- A job takes 1 hour to run.
- We want to run 1 job per hour.
- The FME Engine uses around 2 GB of memory while the job runs.
- The machine where the FME Engines are installed has 4GB of memory.
In this example, there is no problem with system resources as 1 FME Engine will use only 50% of the memory
Setup: 1 machine with 1 FME Engine
More JobsLater on we decide:
- We need to run 2 jobs per hour.
If a job were to take 50% of the systems resources, then running 2 jobs on 2 FME Engines will take 100% of the system resources. The 2 jobs will run at the same time and finish at the same time.
Setup: 1 machine with 2 FME Engines
Beyond CapacityLater on we decide:
- We need to run 6 jobs per hour.
And we still observe:
- A job takes 1 hour to run.
- The FME Engine uses around 2 GB of memory while the job runs.
- The machine where the FME Engines are installed has 4GB of memory.
So, for sure we need to attempt to run 6 jobs at the same time, which means 6 FME Engines. However, the existing machine's system resources are fully used by 2 FME Engines.
What are the options?
Non-Scaling1. Let Jobs Queue
If 6 jobs are submitted and 2 FME Engines are available, 2 jobs will be started and 4 will be queued for later. You may need to reconsider the number of jobs required per hour based on what you can achieve. Perhaps 6 jobs in 3 hours is okay.
Setup: 1 machine with 2 FME Engines
2. Improve the ProcessingThe FME Workspace contains readers, writers and transformers that control how the job works. There are definitely more and less efficient ways to create a workspace. Take a look at the log file to determine where the most time is being taken. Search the Knowledge Center for lots of tips and tricks. However, it's likely that you won't get large enough performance gains to eliminate the need for scaling.
Setup: 1 machine with ? FME Engines
3. Add FME EnginesIf 2 jobs on 2 FME Engines take all the system resources (memory, CPU, I/O), then running 6 jobs on 6 FME Engines will cause conflicts over system resources. This means that the jobs will run slower. This might be okay if there is no other acceptable option.
Setup: 1 machine with 6 FME Engines
Scaling1. Upgrade the MachineYou can upgrade the machines components to provide additional resources (vertical scaling). If the machine has more memory, then those memory intensive jobs will likely run faster too. This is a great option in cloud computing where machine virtual hardware can be upgraded in seconds. FME Cloud offers this functionality.
Setup: 1 big machine with 6 FME Engines
2. Use Additional MachinesYou can install FME Engines on multiple machines to provide additional processing capacity (horizontal scaling). To be clear, there is still only one central FME Server Core install.
Setup: 3 machines with 2 FME Engines per machine.
Indeed excellent question! but I like the answer more ...:)
my question: cannot find any reference on safe website / documentation.
FME Server 64-bit, each Engine memory capacity/need, how many cores does and engine uses
My understanding Engine = 4Gb and 1 core, but does it use more core on 64-bit
my question: cannot find any reference on safe website / documentation.
FME Server 64-bit, each Engine memory capacity/need, how many cores does and engine uses
My understanding Engine = 4Gb and 1 core, but does it use more core on 64-bit
my question: cannot find any reference on safe website / documentation.
FME Server 64-bit, each Engine memory capacity/need, how many cores does and engine uses
My understanding Engine = 4Gb and 1 core, but does it use more core on 64-bit