KU-AIAC557-DataAcquisitionManagementSystem

Data System Design

System design is the process of defining and integrating components, APIs, and data models to build large-scale systems that meet a specified set of functional and non-functional requirements. Modern systems are complex, yet maintainable, and are designed to perform reliably (handle faults, failures, and errors) and effectively (meet all requirements) at scale.

There are two approaches of software engineering system design

  1. Top Down approach: aka stepwise design, decomposition, Splits the System (as a single entity with certain characteristics) into simpler sub-systems and components (modules) recursively until a lowest level of system is reached. scope the problem (Ask questions, identify constraints, functionality requirements) -> abstract design -> finding and addressing bottleneck
  2. Bottom up approach: Design starts with lowest components and sub-systems forming higher-level components and sub-systems with increasing level of abstraction until a complete system is formed

Concepts applied

Talk about the trade-offs: No Solution is perfect: Calculate the impact an system based on all the constraints and the end test cases.

MicroServices

The micro-services architecture is design paradigm where an application is structured to collect several independent services. Each independent service, organized around a specific business capability is owned, developed, managed and deployed independently by a small separate team. Being loosely coupled with the overall system, it is easier to manage, test, maintain, and deploy at large scale.

Caches

A cache is temporary storage that is relatively smaller in size with faster access time. Caches are used to reduce latency and reduce the load on your servers and databases. There are several levels at which caches are implemented. These are as follows:

  1. Client Caching: Caches are located on the client-side like browser, file-system, servers acting as reverse-proxy.
  2. CDN Caching: CDN (Content Delivery Network) is also used as a cache for serving static content (eg. HTML, CSS, Javascript, Image, Videos, etc.).
  3. Web Server Caching: Web Servers also implement local caches and can retrieve, return information without contacting downstream servers.
  4. Database Caching: Databases by default include some level of caching so that they do not have to run queries repeatedly. This can boost the performance of databases when they are under a lot of load.
  5. Application Caching: In application caching, the cache is placed between application and data stores. These caches usually store database query results and/or objects that the application uses. Typical application caches include Memcached, Redis, DynamoDB, etc.

One of the challenges with caching is ensuring consistency of the data between the cache and the underlying data layer (i.e. server or database).

Topics:

Web sockets: full duplex communication channel over single TCP connections. Provides persistent communication (client and server can send data at anytime). bidirectional communication in always open channel.

Courses