Posts

System Design

 System Design Designing for scale Designing for availability Designing for performance Content delivery network Caching Designing for resilience Secure by design Perimeter Security Intrusion detection and Prevention Zscaler Network security Network Isolation Zero trust architecture Server security Application security Data at rest - Encryption using keys Data in transit Encryption Key management  Code Security OWASP guidelines Web security Authentication OAuth Single Signon LDAP Authorization Google Zanzibar OPA Mobile Security Wireless transmission security Penetration testing Architecture principles in system design 12 factor DRY SOLID Programming types Functional Reactive Architecture tools Abacus Modular design Do we need microservices? When to go for Microservices ? Building microservice architecture Breaking down into Microservices Domain driven design Inter service communication Direct Connectivity Circuit breakers Service Registry Distributed transaction management Saga and Co

Cryptography

 Handling Secure Communications between Client and Server The client or application that wants to access your service will need an  API Key  and a  Secret Key  from you as the service owner. These keys are usually randomly generated strings and is given to the client beforehand. API Keys are unique to each client/application.  Both the client and server will hold the API Key and Secret Key. When the client makes a call to the API, the message content is hashed, using the secret key on the client, to generate a HMAC signature. This value, along with the original message and the API Key is then passed to the server’s API. Using the client API key, the equivalent Private key stored on the server is retrieved and the server also generates a HMAC signature which is compared with the one from client. Request is authorized when both match. Digital Signature The client holds the  Private Key  used to sign the message. The client will provide its public key to the server.  Each request is then

Key Concepts

A  resource group  is a collection of AWS resources that are all in the same AWS Region, and that match the criteria specified in the group's query.  Tag-based queries include lists of resources and tags.  In an AWS CloudFormation stack-based query, you choose an AWS CloudFormation stack in your account in the current region, and then choose resource types within the stack that you want to be in the group.   You can use  resource groups  to organize your AWS resources. AWS Resource Groups is the service that lets you manage and automate tasks on large numbers of resources at one time.  With Resource Groups, you can create a custom console that organizes and consolidates information based on criteria specified in tags, or the resources in an AWS CloudFormation stack.  Transfer Family - Supports connecting to S3 or EFS through FTPS/SFTP/FTP protocols.  The hostname for the endpoint can also configured with R53.  The transfer family can be associated with Elastic IP. Security group pe

Machine learning

When dealing with a large dataset with a high number of features, such as 200,000 rows and 3,000 features, both gradient descent and closed-form solutions have their advantages and disadvantages. Here's a comparison: Gradient Descent: Advantages: Suitable for large datasets: Gradient descent can handle large datasets efficiently because it processes data sequentially in small batches or even individual samples. Scalability: It scales well with the size of the dataset and the number of features, making it suitable for high-dimensional data. Flexibility: It can handle non-linear optimization problems and non-convex cost functions. Disadvantages: Requires hyperparameter tuning: Gradient descent requires tuning hyperparameters such as the learning rate and batch size, which can be time-consuming and require experimentation. Convergence may be slow: Convergence to the optimal solution may be slow, especially if the cost function has many local minima or saddle points. Sensitive to featu