2018-08-14 12:48:17 +00:00
|
|
|
##### Project:
|
2018-08-14 15:15:49 +00:00
|
|
|
::PROJECTNAME(Home)
|
2018-08-14 12:48:17 +00:00
|
|
|
|
|
|
|
##### Internal Release Number:
|
|
|
|
::X.Y.Z
|
|
|
|
|
|
|
|
##### Related Documents:
|
2018-08-14 17:39:17 +00:00
|
|
|
- [Design](Design) > Design Architecture
|
2018-08-14 15:55:05 +00:00
|
|
|
- [Software Requirements Specification](SRS)
|
|
|
|
- [Glossary](Glossary)
|
2018-08-14 12:48:17 +00:00
|
|
|
- ::LINKS TO RELEVANT STANDARDS
|
|
|
|
- ::LINKS TO OTHER DOCUMENTS
|
|
|
|
---
|
|
|
|
|
|
|
|
*TODO: Answer the questions below to help you define your system
|
|
|
|
architecture. Some example text is provided.*
|
|
|
|
|
|
|
|
### Overview
|
2018-08-14 15:15:49 +00:00
|
|
|
|
2018-08-14 12:48:17 +00:00
|
|
|
#### What are the most important facts that a developer should know about this system architecture?
|
|
|
|
|
|
|
|
::PARAGRAPH OR BULLETS
|
|
|
|
|
|
|
|
#### What software architecture style is being used?
|
|
|
|
|
|
|
|
- ::Single-process desktop application (with plug-in extension modules).
|
|
|
|
- ::Client-server with a custom thick-clients and server.
|
|
|
|
- ::2-tier web application: webserver/app-server, database.
|
|
|
|
- ::3-tier web application: webserver, app-server, database.
|
|
|
|
- ::Single web service: app-server, database.
|
|
|
|
- ::Network of web services.
|
|
|
|
- ::Peer-to-peer with/without central server.
|
|
|
|
- ::Pipe-and-filter.
|
|
|
|
- ::Computing grid / distributed servers.
|
|
|
|
|
|
|
|
#### What are the ranked goals of this architecture?
|
|
|
|
|
2018-08-14 15:55:05 +00:00
|
|
|
1. ::[Ease of integration](Glossary-Std#ease_of_integration)
|
|
|
|
2. ::[Extensibility](Glossary-Std#extensibility)
|
|
|
|
3. ::[Capacity matching](Glossary-Std#capacity_matching)
|
2018-08-14 12:48:17 +00:00
|
|
|
|
|
|
|
### Components
|
2018-08-14 15:15:49 +00:00
|
|
|
|
2018-08-14 12:48:17 +00:00
|
|
|
#### What are the components of this system?
|
|
|
|
|
|
|
|
::The components of this system are clearly defined in this [UML Model
|
|
|
|
with Component Diagram](LINK-TO-MODEL).
|
|
|
|
|
|
|
|
::The components of this system are listed below by type:
|
|
|
|
|
|
|
|
- ::Presentation/UI Components
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-00: COMPONENTNAME](Design-Components#c-00)
|
2018-08-14 12:48:17 +00:00
|
|
|
- ::Application Logic Components
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-10: COMPONENTNAME](Design-Components#c-10)
|
2018-08-14 12:48:17 +00:00
|
|
|
- ::Data Storage Components
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-20: COMPONENTNAME](Design-Components#c-20)
|
2018-08-14 12:48:17 +00:00
|
|
|
|
|
|
|
### Deployment
|
2018-08-14 15:15:49 +00:00
|
|
|
|
2018-08-14 12:48:17 +00:00
|
|
|
#### How will the components be deployed to processes and machines?
|
|
|
|
|
|
|
|
::The deployment of components to processes and machines is clearly
|
|
|
|
defined in this [UML Model with Deployment Diagram](LINK-TO-MODEL).
|
|
|
|
|
|
|
|
::The deployment of components to processes and machines is clearly
|
|
|
|
defined below:
|
|
|
|
|
|
|
|
- ::All-in-one server
|
|
|
|
- ::Tomcat process
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-00: Tomcat web server](Design-Components#c-00)
|
2018-08-14 12:48:17 +00:00
|
|
|
- ::[C-10: PROJECTNAME
|
2018-08-14 15:55:05 +00:00
|
|
|
application](Design-Components#c-10)
|
2018-08-14 12:48:17 +00:00
|
|
|
- ::Database process
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-20: COMPONENTNAME](Design-Components#c-30)
|
2018-08-14 12:48:17 +00:00
|
|
|
|
|
|
|
::The deployment of components to processes and machines is clearly
|
|
|
|
defined below:
|
|
|
|
|
|
|
|
- ::Load-balanced front-end servers
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-01: COMPONENTNAME](Design-Components#c-00)
|
2018-08-14 12:48:17 +00:00
|
|
|
- ::Back-end server
|
|
|
|
- ::JVM process
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-00: COMPONENTNAME](Design-Components#c-00)
|
|
|
|
- ::[C-10: COMPONENTNAME](Design-Components#c-10)
|
|
|
|
- ::[C-11: PLUG-IN COMPONENTNAME](Design-Components#c-11)
|
|
|
|
- ::[C-12: PLUG-IN COMPONENTNAME](Design-Components#c-12)
|
2018-08-14 12:48:17 +00:00
|
|
|
- Database process
|
2018-08-14 15:55:05 +00:00
|
|
|
- ::[C-20: COMPONENTNAME](Design-Components#c-30)
|
2018-08-14 12:48:17 +00:00
|
|
|
|
|
|
|
#### What aspects/resources of their environment are shared?
|
|
|
|
|
|
|
|
::Everything is on one server so all machine resources are shared by
|
|
|
|
all components.
|
|
|
|
|
|
|
|
::All machines share the same bandwidth to the Internet. All machines
|
|
|
|
access the same file server. So, if one component uses the resources
|
|
|
|
heavily, other components may have to wait.
|
|
|
|
|
|
|
|
#### How are requests allocated to redundant or load-balanced servers?
|
|
|
|
|
|
|
|
::We are not doing any load-balancing or redundancy for fail-over.
|
|
|
|
|
|
|
|
::Load-balancing among front-end servers is handled by a load
|
|
|
|
balancing device that we can make very few assumptions about.
|
|
|
|
However, once a user session is established, the same front-end
|
|
|
|
server will be used for all requests during that session.
|
|
|
|
|
|
|
|
#### What alternative deployment configurations are possible?
|
|
|
|
|
|
|
|
::This is the only possible deployment.
|
|
|
|
|
|
|
|
::The database could be moved to a different machine with a fairly
|
|
|
|
simple change to a configuration file. Otherwise, nothing can be
|
|
|
|
changed about the deployment.
|
|
|
|
|
|
|
|
::We have the ability to move the database process to a
|
|
|
|
separate machine. We have the ability to add more front-end servers.
|
|
|
|
The application logic running on the application server cannot be
|
|
|
|
split or load-balanced.
|
|
|
|
|
|
|
|
### Integration
|
2018-08-14 15:15:49 +00:00
|
|
|
|
2018-08-14 12:48:17 +00:00
|
|
|
|
|
|
|
#### How will components be integrated? Specifically, how will they communicate?
|
|
|
|
|
|
|
|
::All of our code uses direct procedure calls. The database is
|
|
|
|
accessed through a driver.
|
|
|
|
|
|
|
|
::Components within the same process use direct procedure call or
|
|
|
|
standard Java events. Plug-ins are also accessed through a API of
|
|
|
|
direct procedure calls and standard events. Communication with the
|
|
|
|
database uses a JDBC driver. Communication between the front end-and
|
|
|
|
back-end servers uses XML-RPC.
|
|
|
|
|
|
|
|
#### What architectural mechanisms are being used to ease future extensions or modifications?
|
|
|
|
|
|
|
|
::We could change the database by switching drivers. Otherwise,
|
|
|
|
extensions and modifications can only be done at the design level.
|
|
|
|
|
|
|
|
::New front-end components could be added so long as they access the
|
|
|
|
back-end the same way. New plug-in components can be dynamically
|
|
|
|
loaded, so long as they satisfy the plug-in API. Otherwise, there is
|
|
|
|
no ability to add or exchange components, because this architecture
|
|
|
|
uses direct dependencies between its components rather than
|
|
|
|
implicit invocation. Extensions and modifications can be made at the
|
|
|
|
design-level, but deploying those changes requires recompilation
|
|
|
|
and down-time.
|
|
|
|
|
|
|
|
### Architectural Scenarios
|
|
|
|
|
|
|
|
*TODO: Provide architecture scenarios that show how objects will
|
|
|
|
communicate across components, processes, and machines. Focus on
|
|
|
|
scenarios where the architecture itself is changing, e.g., system
|
|
|
|
startup, shutdown, adding or upgrading components, load balancing or
|
|
|
|
fail-over.*
|
|
|
|
|
|
|
|
The following sequence diagrams give step-by-step descriptions of how
|
|
|
|
components communicate during some important usage scenarios:
|
|
|
|
|
|
|
|
- ::[System startup](LINK-TO-DIAGRAM)
|
|
|
|
- ::[System shutdown](LINK-TO-DIAGRAM)
|
|
|
|
- ::[SCENARIO NAME](LINK-TO-DIAGRAM)
|
|
|
|
|
|
|
|
### Architecture Checklist
|
|
|
|
|
|
|
|
*TODO: Evaluate your architecture with respect to each of your goals.*
|
|
|
|
|
|
|
|
#### Ease of integration: Have mechanisms been provided for all needed types of integration?
|
|
|
|
::Yes. In this system, all of the new components are designed to
|
|
|
|
work together. And, the reused components are integrated via fairly
|
|
|
|
simple interfaces.
|
|
|
|
|
|
|
|
#### Extensibility: What types of components can be added later and how?
|
|
|
|
::See above.
|
|
|
|
|
|
|
|
#### Capacity matching: How has this architecture matched component resource needs to machines?
|
|
|
|
::The database can be on a machine with RAID disks and a hot-swappable
|
|
|
|
power supply, while the web front-end components can be on cheaper
|
|
|
|
machines that could fail individually without causing
|
|
|
|
system downtime. The front-end web servers and application server
|
|
|
|
are both CPU-intensive, so they are deployed to different CPUs. The
|
|
|
|
database is disk-intensive, so it can be deployed to the same
|
|
|
|
machine as the CPU-intensive application server, with only moderate
|
|
|
|
competition for resources.
|
|
|
|
|
|
|
|
#### Has the architecture been communicated to the development team and other stakeholders?
|
|
|
|
|
|
|
|
::Yes, everyone understands. Feedback is welcome.
|
|
|
|
|
2018-08-14 15:15:49 +00:00
|
|
|
::No, this is a risk that is noted in the [Risk Management](Project-Plan#risks) section.
|