parent
3779f6b34a
commit
22967a5790
21 changed files with 8862 additions and 8491 deletions
@ -0,0 +1,10 @@ |
||||
# Key-Value Databases |
||||
|
||||
A key-value database (KV database) is a type of database that stores data as a collection of key-value pairs. In a KV database, each piece of data is identified by a unique key, and the value is the data associated with that key. |
||||
|
||||
KV databases are designed for fast and efficient storage and retrieval of data, and they are often used in applications that require high performance and low latency. They are particularly well-suited for storing large amounts of unstructured data, such as log data and user profiles. |
||||
|
||||
Some popular KV databases include Redis, Memcached, and LevelDB. These databases are often used in combination with other types of databases, such as relational databases or document databases, to provide a complete and scalable data storage solution. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://en.wikipedia.org/wiki/Key-value_database'>Key-Value Databases - Wikipedia</BadgeLink> |
@ -0,0 +1,12 @@ |
||||
# GraphQL |
||||
|
||||
GraphQL is a query language and runtime system for APIs (application programming interfaces). It is designed to provide a flexible and efficient way for clients to request data from servers, and it is often used as an alternative to REST (representational state transfer) APIs. |
||||
|
||||
One of the main features of GraphQL is its ability to specify exactly the data that is needed, rather than receiving a fixed set of data from an endpoint. This allows clients to request only the data that they need, and it reduces the amount of data that needs to be transferred over the network. |
||||
|
||||
GraphQL also provides a way to define the structure of the data that is returned from the server, allowing clients to request data in a predictable and flexible way. This makes it easier to build and maintain client applications that depend on data from the server. |
||||
|
||||
GraphQL is widely used in modern web and mobile applications, and it is supported by a large and active developer community. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://graphql.org/'>GraphQL Official Website</BadgeLink> |
@ -0,0 +1,7 @@ |
||||
# Database Indexes |
||||
|
||||
An index is a data structure that you build and assign on top of an existing table that basically looks through your table and tries to analyze and summarize so that it can create shortcuts. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.freecodecamp.org/news/database-indexing-at-a-glance-bb50809d48bd/'>An in-depth look at Database Indexing</BadgeLink> |
||||
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=-qNSXK7s7_w'>Database Indexing Explained</BadgeLink> |
@ -0,0 +1,7 @@ |
||||
# Data Replication |
||||
|
||||
Data replication is the process by which data residing on a physical/virtual server(s) or cloud instance (primary instance) is continuously replicated or copied to a secondary server(s) or cloud instance (standby instance). Organizations replicate data to support high availability, backup, and/or disaster recovery. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
|
||||
<BadgeLink badgeText='Watch' href='https://youtu.be/fUrKt-AQYtE'>What is Data Replication?</BadgeLink> |
@ -0,0 +1,9 @@ |
||||
# Sharding strategies |
||||
|
||||
Sharding strategy is a technique to split a large dataset into smaller chunks (logical shard) in which we distribute these chunks in different machines/database nodes in order to distribute the traffic load. It’s a good mechanism to improve the scalability of an application. Many databases support sharding, but not all. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
|
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.geeksforgeeks.org/database-sharding-a-system-design-concept/'>Database Sharding – System Design Interview Concept</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://en.wikipedia.org/wiki/Shard_(database_architecture)'>Wikipedia - Sharding in Datbase Architectures</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://stackoverflow.blog/2022/03/14/how-sharding-a-database-can-make-it-faster/'>How sharding a database can make it faster</BadgeLink> |
@ -0,0 +1,10 @@ |
||||
# CAP Theorem |
||||
|
||||
CAP is an acronym that stands for Consistency, Availability and Partition Tolerance. According to CAP theorem, any distributed system can only guarantee two of the three properties at any point of time. You can't guarantee all three properties at once. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.bmc.com/blogs/cap-theorem/'>What is CAP Theorem?</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://en.wikipedia.org/wiki/CAP_theorem'>CAP Theorem - Wikipedia</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/'>An Illustrated Proof of the CAP Theorem</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.ibm.com/uk-en/cloud/learn/cap-theorem'>CAP Theorem and it's applications in NoSQL Databases</BadgeLink> |
||||
<BadgeLink colorScheme='purple' badgeText='Watch' href='https://www.youtube.com/watch?v=_RbsFXWRZ10'>What is CAP Theorem?</BadgeLink> |
@ -0,0 +1,7 @@ |
||||
# Databases |
||||
|
||||
A database is a collection of useful data of one or more related organizations structured in a way to make data an asset to the organization. A database management system is a software designed to assist in maintaining and extracting large collections of data in a timely fashion. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.oracle.com/database/what-is-database/'>Oracle: What is a Database?</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.prisma.io/dataguide/intro/what-are-databases'>Prisma.io: What are Databases?</BadgeLink> |
@ -1,4 +1,4 @@ |
||||
# CQRS and Event Sourcing |
||||
# CQRS |
||||
|
||||
CQRS, or command query responsibility segregation, defines an architectural pattern where the main focus is to separate the approach of reading and writing operations for a data store. CQRS can also be used along with Event Sourcing pattern in order to persist application state as an ordered of sequence events, making it possible to restore data to any point in time. |
||||
|
@ -0,0 +1,10 @@ |
||||
# Event Sourcing |
||||
|
||||
Event sourcing is a design pattern in which the state of a system is represented as a sequence of events that have occurred over time. In an event-sourced system, changes to the state of the system are recorded as events and stored in an event store. The current state of the system is derived by replaying the events from the event store. |
||||
|
||||
One of the main benefits of event sourcing is that it provides a clear and auditable history of all the changes that have occurred in the system. This can be useful for debugging and for tracking the evolution of the system over time. |
||||
|
||||
Event sourcing is often used in conjunction with other patterns, such as Command Query Responsibility Segregation (CQRS) and domain-driven design, to build scalable and responsive systems with complex business logic. It is also useful for building systems that need to support undo/redo functionality or that need to integrate with external systems. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://martinfowler.com/eaaDev/EventSourcing.html'>Event Sourcing - Martin Fowler</BadgeLink> |
@ -0,0 +1,13 @@ |
||||
# Service Mesh |
||||
|
||||
A service mesh is a network of microservices that are connected using a mesh of interconnected, intelligent proxies. It is used to manage and secure communication between microservices, and it provides features such as load balancing, service discovery, and observability. |
||||
|
||||
In a service mesh, each microservice is typically represented by an instance of a lightweight, transparent proxy called an "envoy." The envoys handle the communication between microservices and provide features such as load balancing, routing, and security. |
||||
|
||||
Service meshes are typically implemented using a sidecar pattern, in which the envoys are deployed alongside the microservices they are responsible for. This allows the service mesh to be decoupled from the microservices and makes it easier to manage and update. |
||||
|
||||
Service meshes are commonly used in cloud-native architectures and are often managed using a control plane, which is responsible for configuring and managing the envoys. Some popular service mesh implementations include Istio and Linkerd. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.nginx.com/blog/what-is-a-service-mesh/'>What is a Service Mesh?</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.cncf.io/blog/2018/05/02/service-mesh-explained/'>Service Mesh Explained - Cloud Native Computing Foundation (CNCF)</BadgeLink> |
@ -0,0 +1,23 @@ |
||||
# Twelve-Factor Apps |
||||
|
||||
The Twelve-Factor App is a methodology for building scalable and maintainable software-as-a-service (SaaS) applications. It is based on a set of best practices that were identified by the authors of the methodology as being essential for building modern, cloud-native applications. |
||||
|
||||
The Twelve-Factor App methodology consists of the following principles: |
||||
|
||||
* Codebase: There should be a single codebase for the application, with multiple deployments. |
||||
* Dependencies: The application should explicitly declare and isolate its dependencies. |
||||
* Config: The application should store configuration in the environment. |
||||
* Backing services: The application should treat backing services as attached resources. |
||||
* Build, release, run: The application should be built, released, and run as an isolated unit. |
||||
* Processes: The application should be executed as one or more stateless processes. |
||||
* Port binding: The application should expose its services through port binding. |
||||
* Concurrency: The application should scale out by adding more processes, not by adding threads. |
||||
* Disposability: The application should be designed to start and stop quickly. |
||||
* Dev/prod parity: The development, staging, and production environments should be as similar as possible. |
||||
* Logs: The application should treat logs as event streams. |
||||
* Admin processes: The application should run admin/maintenance tasks as one-off processes. |
||||
|
||||
The Twelve-Factor App methodology is widely adopted by developers of SaaS applications, and it is seen as a best practice for building cloud-native applications that are scalable, maintainable, and easy to deploy. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://12factor.net/'>The Twelve-Factor App</BadgeLink> |
@ -1,13 +0,0 @@ |
||||
# RKT |
||||
|
||||
RKT(pronounced like a "rocket") is an application container engine developed for modern production cloud-native environments. It features a pod-native approach, a pluggable execution environment, and a well-defined surface area that makes it ideal for integration with other systems. |
||||
|
||||
|
||||
RKT project was ended in 2018. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://rocket.readthedocs.io/en/latest/Documentation/trying-out-rkt/'>RKT Documentation</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.redhat.com/en/topics/containers/what-is-rkt'>What is RKT?</BadgeLink> |
||||
<BadgeLink colorScheme='green' badgeText='Github Repo' href='https://github.com/rkt/rkt'>What is RKT?</BadgeLink> |
||||
<BadgeLink badgeText='Watch' href='https://youtu.be/JgUEXKTSVXw'>Introduction to RKT</BadgeLink> |
||||
<BadgeLink badgeText='Watch' href='https://youtu.be/mRlQC6s8IwM'>The RKT Container Runtime - Explanation & Demonstration</BadgeLink> |
@ -0,0 +1,12 @@ |
||||
# Kubernetes |
||||
|
||||
Kubernetes is an [open source](https://github.com/kubernetes/kubernetes) container management platform, and the dominant product in this space. Using Kubernetes, teams can deploy images across multiple underlying hosts, defining their desired availability, deployment logic, and scaling logic in YAML. Kubernetes evolved from Borg, an internal Google platform used to provision and allocate compute resources. (similar to the Autopilot and Aquaman systems of Microsoft Azure) |
||||
|
||||
The popularity of Kubernetes has made it an increasingly important skill for the DevOps Engineer and has triggered the creation of Platform teams across the industry. These Platform engineering teams often exist with the sole purpose of making Kubernetes approachable and usable for their product development colleagues. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://kubernetes.io/'>Kubernetes Website</BadgeLink> |
||||
<BadgeLink colorScheme='blue' badgeText='Documentation' href='https://kubernetes.io/docs/home/'>Kubernetes Documentation</BadgeLink> |
||||
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=s_o8dwzRlu4'>Kubernetes Crash Course for Absolute Beginners</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://thenewstack.io/primer-how-kubernetes-came-to-be-what-it-is-and-why-you-should-care/'>Primer: How Kubernetes Came to Be, What It Is, and Why You Should Care</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://thenewstack.io/kubernetes-an-overview/'>Kubernetes: An Overview</BadgeLink> |
@ -0,0 +1,10 @@ |
||||
# Server Sent Events |
||||
|
||||
Server-Sent Events (SSE) is a technology that allows a web server to push data to a client in real-time. It uses an HTTP connection to send a stream of data from the server to the client, and the client can listen for these events and take action when they are received. |
||||
|
||||
SSE is useful for applications that require real-time updates, such as chat systems, stock tickers, and social media feeds. It is a simple and efficient way to establish a long-lived connection between a client and a server, and it is supported by most modern web browsers. |
||||
|
||||
To use SSE, the client must create an EventSource object and specify the URL of the server-side script that will send the events. The server can then send events by writing them to the response stream with the proper formatting. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events'>Server-Sent Events - MDN</BadgeLink> |
@ -0,0 +1,5 @@ |
||||
# Bonus Content |
||||
|
||||
Following expands on the topics covered in the roadmap and has the items which were missed in the roadmap. |
||||
|
||||
* **Regular Expressions**: Regular expressions are a powerful tool for string manipulation. They are used in many programming languages and are a must know for any developer. [RegexOne](https://regexone.com/) is a good place to start learning regular expressions. |
@ -1 +1,12 @@ |
||||
# Kubernetes |
||||
# Kubernetes |
||||
|
||||
Kubernetes is an [open source](https://github.com/kubernetes/kubernetes) container management platform, and the dominant product in this space. Using Kubernetes, teams can deploy images across multiple underlying hosts, defining their desired availability, deployment logic, and scaling logic in YAML. Kubernetes evolved from Borg, an internal Google platform used to provision and allocate compute resources. (similar to the Autopilot and Aquaman systems of Microsoft Azure) |
||||
|
||||
The popularity of Kubernetes has made it an increasingly important skill for the DevOps Engineer and has triggered the creation of Platform teams across the industry. These Platform engineering teams often exist with the sole purpose of making Kubernetes approachable and usable for their product development colleagues. |
||||
|
||||
<ResourceGroupTitle>Free Content</ResourceGroupTitle> |
||||
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://kubernetes.io/'>Kubernetes Website</BadgeLink> |
||||
<BadgeLink colorScheme='blue' badgeText='Documentation' href='https://kubernetes.io/docs/home/'>Kubernetes Documentation</BadgeLink> |
||||
<BadgeLink badgeText='Watch' href='https://www.youtube.com/watch?v=s_o8dwzRlu4'>Kubernetes Crash Course for Absolute Beginners</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://thenewstack.io/primer-how-kubernetes-came-to-be-what-it-is-and-why-you-should-care/'>Primer: How Kubernetes Came to Be, What It Is, and Why You Should Care</BadgeLink> |
||||
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://thenewstack.io/kubernetes-an-overview/'>Kubernetes: An Overview</BadgeLink> |
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue