Hello everybody. I have a general design question that I would like to get some input on. I am working on a fairly large JEE application that will be used by many customers that will range from small to large businesses (in terms of web traffic). This is a hosted application by the way.
Currently, the application is designed to support one customer per EAR and each customer has their own database and DataSource access. Large enterprise class customers would have there own dedicated server and would be the only EAR running on JBoss. For small to medium size customers we would like to run multiple/many EARs on one instance of JBoss thus supporting multiple/many customers on one server.
How does deploying multiple/many EARs in one instance of JBoss affect performance and system resources? For example, if 50 smaller customers produce the same amount of traffic, database access, object creation, EJB usage, and other IO as one large customer running on a dedicated server would we be able to expect the performance and system resource usage on both machines to be equivalent? Or, does the addition of each EAR running on JBoss (or any application server for that matter) require a significant amount of system resources to be used for each additional EAR? In other words, for each EAR added to a single instance of JBoss will this exponentially, linearly, or minutely affect the usage of system resources?
Also, we have the situation where we need to be able to have demo accounts running on a hosted server. There is the potential to need 100s of demo accounts (should not reach into the 1000s). Assuming there is nothing wrong w/ the code , would JBoss be able to run this many EARs all in one instance? I understand we may need to cluster JBoss on several physical servers to accomplish this if it is even possible. If this is not possible, is it a big "no no" to support many customers through one EAR? Each customer would still have their own database, but the EAR now would have to determine which DataSource to use for each individual customer. Hopefully we would only need to go this route for demo accounts.
I'm off to do testing, lots of that to do ;). Any thoughts or comments are much appreciated.
Your requirement is a challenging task. We also developed and maintaining the same kind of Application.But we are using the same DB for all customers as our application is not a larger app. We did the following things:
1. Packaging into Compoenents: Dividing the product features into generic ones. Should be able to configure the features for the customers.
2. Configurations: Need to divide the configurations based on Product and Customer. During Server startup we need to load all product and customer Specific configurations including Datasources.
3. Avoid Database specific keywords and functions. Use plain PL/SQL for your Data Layers.
4. Audit Logging based on customers need to configure. Also need to have a plan/documentation to add new customer: confgurations and features etc.
5. Libraries: need to check for interdependency of third party libraries.
6. Good Data Center to process large no. of user requests.
Best of luck.