Tag: design

Reactive Extensions: Asynchronous Reactive Systems

Reactive Extensions: Asynchronous Reactive Systems Reactive Extension is a paradigm to develop systems using the react model. It’s an event-driven state machine for functions. It’s possible to represent either synchronous or asynchronous communication with Reactive Extensions. All we need is a message broker, producer of events (Observable), and consumers(Observer). Typically, the consumer processes an event…

Discussion on Microservices Integration

Discussion on Microservices Integration Microservices is a distributed system pattern and components need to communicate through the network. If communication data includes internal technical details of participating components, the system loses the property of loose-coupling. If a change in one service causes changes in many other services, we lose the property of high-cohesion. An unreliable…

Domain Driven Design: Bounded Context

Microservice architecture borrows many classical concepts. Bounded Context is one of the most important ideas of domain-driven design. A context means specific responsibility. Bounded Context implies a responsibility with explicit boundaries. Reading from a few blogs, the bounded context means more of real-world identification of responsibilities. It’s seeing things from different altitudes: An application is…

Why BitCoin Uses BloomFilters?

Bitcoin uses a blockchain record of transactions among the participating nodes. Since the size of the record is huge, there is a thin participating node that is interested in a subset of the records. But how to find the subset in the complete list of records. Bloom Filters help here. BF answers “does exist” query…

How Push Notifications Arrive on Your Phone?

The commonplace notifications on our iPhone/Android devices follow an interesting journey. What is a Push Notification? A push notification is a message sent to a user. The message is sent even if the app is not in use or the device is offline. Who Sends the Message? The app is controlled from a provider service…

A Software Design Document Template

The design document is a key piece of a project and used throughout the lifecycle of the product. The following is a sample template for a software design document: Introduction – A paragraph about project/product Objective – A paragraph on the problem being solved Requirements – Specifications, expectations High-Level Design – How the new product/feature…

MVC Explained

MVC is an architecture to separate an application in three cohesive, loosely coupled verticals. Model: The data of your application and methods to access it. View: The final output/expected result. Controller: The interface that handles requests from the model I’m trying to map it to a Linux Filesystem (e.g. ext2). Model: The file system block…

Ceph RGW Internals: Cache Coherence & Bucket Life Cycles

RGW Cache Coherence Why RGW have a control pool? We will try to understand its use case and purpose in RGW for cache synchronization. RGWRados::init_watch() Creates watcher objects in RGW control pool $ sudo rados ls -p .in-abc-1.rgw.control notify.1 notify.6 notify.3 notify.7 notify.2 notify.4 notify.5 notify.0 The common assumption is that these objects are watched…

Design: Brave Device Sync

The Brave Browser offers a sync facility that keeps bookmarks and browsing history across Brave browser installations. So your data from phone, laptop or iPad could all become one. All at the same time respecting your privacy. The current design of sync uses a device ID to identify a client. A client calls Brave server…

Why Redis Pipelining is a Good Idea?

What is PipeLining? Pipelining is a form of asynchronous task execution. A Pipeline is a task that is composed of many subtasks. Each subtask may be dependent on its previous subtasks. t1 => t2 => t3 ^ t4 =| t2 depends on t1. t3 is dependent on t2 & t4. While we are executing subtask…