Showing posts with label Architecture. Show all posts
Showing posts with label Architecture. Show all posts

Sunday, August 11, 2019

Vertical and Horizontal Scaling

Vertical scaling is known as Scale up.
It is a process of adding resource to increase power of an existing server
Example: Adding CPU or Memory

Horizontal scaling is known as Scale Out.
It is a process of adding more servers.
Example: More than one server will be processing the input request from user

Sunday, June 17, 2018

Multi-tenancy


  • Multi-tenancy is an architecture in which a single instance of a software application serves multiple customers. 
  • Health Level-7 or HL7 refers to a set of international standards for transfer of clinical and administrative data between software applications used by various healthcare providers.

Architecture Concerns


  1. Scalability: how many users or transactions can it process concurrently?
  2. Performance: how fast does it respond? what is the max throughput?
  3. Recoverability: how does the application recover from a fault?
  4. Security: can it sustain attacks? is data protected?
  5. Maintainability: how easy is it to maintain?
  6. Operability: how easy is it to use and managed? how is it operated?
  7. Availability: is it available 24x7? and is it 99.9% or 99.99%?


Scalability
  • Horizontal and Vertical Scalability
  • Vertical: Add resources to a single computer (more CPU/RAM). vertical scaling is cheaper
  • Horizontal: Add more boxes of similar memory & CPU

Performance
  • Parallel Processing, Asynchronous Processing, Caching, multithreading

Recoverability
  • Session replication - ability to replicate the user sessions to a secondary server in the cluster
  • Backup
  • Business Continuity or Disaster Recovery Infrastructure Requirements  

Security
  •  Authentication & Authorization (LDAP, single sign-on), encryption

Maintainability 
  • Application complexity has direct correlation to maintainability. It is relatively easy to maintain a system with less dependencies.
  • Logging
  • Robust Error Handling - will keep the system's availability & uptime high
  • No direct access to server
  • Layered web application is easy to maintain. but multi-threaded application is hard to maintain
  • KISS (simple design)

Operability
  • Understands the purpose of the system
  • Ask users what they really want and design accordingly
  • Consistency - standard look & feel

Availability
  • Is the amount of time that the system is up and running
  • Robust Error Handling - will keep the system's availability & uptime high
  • Backups & recovery
  • Fault recovery
Backward error recovery (implementing transactions)
System is restored to a previous known valid state
  • Exception Handling 

Architecture Principles


  1. DRY ("Don't Repeat Yourself")
  2. KISS ("Keep It Short & Simple")
  3. Fit for Purpose (no gold plating)
  4. Black Box (implementation details should be hidden from inside)
  5. Divide & Conquer (Separating Responsibilities. mvc/layering)
  6. Prepare for Failure (designed to tolerate failure)

Blueprints


  • Decomposing system in to parts. 
  • What capability each part delivers, and what capability each part must leverage
  • Architect work with customer to determine requirement, based on req - he has the vision of high level components & he develops blueprints
  • Blueprint helps architects to communicate with various stakeholders

Architecture Strawman


  • Is an early representation of the key elements and concepts 
  • It does not contain all the levels of detail you can think of
  • It will be replaced by TA blueprints

Architecture Patterns


  • Architecture Patterns are broader, and can be used from the Solution phase on
  • Architectural patterns are high-level strategies that concerns large-scale components
  • Design patterns are solutions to software design problems

  • Example: MVC, MVVM, Layered Architecture (UI, BL, DAL etc)