Design Considerations for Performance and Scalability
The design phase provides opportunities for exploring the effect of application requirements and design decisions on performance and scalability. The data design, which lies at the heart of the Uniface modeling process, can affect other designs.
Application Design
Design the application carefully to be component-based and encapsulated. This can help in creating a scalable application providing flexibility in deployment and making it possible to partition the application and substitute other component implementations during deployment.
Scalable applications can be transparently partitioned over multiple servers, and application components can be executed synchronously or asynchronously on those servers. Synchronous application components are typically short, predefined transactions, while asynchronous component execution can be queued or executed in parallel on multiple servers.
Scalable applications can be dynamically partitioned so that components that access large amounts of data can be executed on the server where the data resides. This reduces network traffic, which can improve response times significantly.
The degree to which application functionality can be split depends on the way the components are designed and implemented. Uniface versions prior to Uniface 8, did not support multi-tier architecture to the same degree. When upgrading to a new version of Uniface, you can improve the scalability of an application by redesigning some components to take advantage of this split.
Data Design
Design the data entities so the most-used data is the most easily accessible. Use access path analysis to identify this data and the ways in which it can be optimized for retrieval and processing.
Uniface applications can transparently access data from multiple sources, ranging from small local file systems to large distributed databases. To switch databases, you simply configure Uniface to use the appropriate database driver. If the application uses DBMS-specific functionality, such as stored procedures, additional development work is required to tailor the application to the new database. This allows data to be optimally distributed over client and server platforms, to obtain the maximum performance-to-network traffic ratio.
DBMS-specific functionality often has significant performance benefits. When designing and building the application, it is worth considering the trade-off between easier data deployment and performance optimization.
Component Design
Minimize the depth of access paths (as reflected in the component structure).
Uniface supports a simple form of 'late binding' for components, which means that one component implementation type can be swapped for another without recompiling the application. This gives the freedom for you to use the best component technology for a specific function. For example, 3GL can be used for complex mathematical calculations, Uniface components can be used for transactional services, and stored procedures can be used for large batch updates.
Deployment Design
Ensure that the application can be partitioned, and consider the architecture (web, single-tier, 2-tier using DBMS server, or multi-tier) and servers (shared or exclusive, server roles) required for initial deployment and projected growth.