Skip to main content

Other Technologies

Updated Jan 30, 2024 ·

Cloud Computing​

Cloud computing involves accessing and utilizing computing resources and services over the internet, provided by third-party vendors. It offers scalability, flexibility, and reduced dependency on on-premise hardware.

  • Servers
  • Storage
  • Databases
  • Networking
  • Software Analytics
  • Intelligence

For more information, please see The Basics.

Virtualization​

Virtualization involves creating virtual instances of computing resources, such as servers, storage devices, or networks, to maximize resource utilization and flexibility.

For more information, please see Virtualization

Containerization​

Containerization is a lightweight form of virtualization that encapsulates an application and its dependencies into a standardized unit known as a container. Containers can be easily deployed and run consistently across different computing environments.

  • Docker
  • Kubernetes
  • Red Hat OpenShift

Advantages:

  • Efficiency

    • Optimizes resource usage.
    • Fast startup times.
  • Speed

    • Rapid deployment.
    • Quick application scaling.
  • Portability

    • Consistent across environments.
    • Easily deployable anywhere.
  • Scalability

    • Dynamic resource allocation.
    • Horizontal scaling capabilities.
  • Isolation

    • Ensures application separation.
    • Minimizes impact of failures.
  • Consistency

    • Standardized deployment process.
    • Reproducible builds and deployments.

Serverless​

Serverless is an approach where cloud providers manage the infrastructure, allowing developers to focus solely on writing and deploying code.

  • Resources are provisioned dynamically and automatically scale based on demand.
  • Billed based on actual usage rather than pre-provisioned capacity.
  • Eliminates the need for managing servers, operating systems, or infrastructure components.
  • Enable faster development and deployment cycles.

Vendor Lock-in​

It is a situation where a customer becomes dependent on a particular vendor's products or services to an extent that switching to another vendor becomes impractical or costly..

  • Developers heavily utilize proprietary services or features provided by a specific cloud provider.
  • This makes it challenging to migrate to another provider in the future.

Mitigation:

  • Using open standards
  • Implementing abstraction layers
  • Designing applications for portability to reduce dependency on specific vendor offerings.

Microservices​

Microservices is an architectural approach where applications are composed of small, independently deployable services. Each service is focused on a specific business function and communicates with others through APIs. This allows for modularity, flexibility, and scalability, enabling teams to develop, deploy, and maintain services independently.

Monolithic vs Microservices​

  • Monolithic

    • Single, unified codebase and application.
    • Components tightly integrated and deployed together.
    • Scaling involves replicating the entire application.
    • Development, testing, and deployment are typically done as a single unit.
    • Changes and updates require redeploying the entire application.
    • Simple to develop and initially deploy.
    • Can become complex and difficult to maintain as the application grows.
  • Microservices

    • Application divided into small, independently deployable services.
    • Each service focuses on a specific business function.
    • Services communicate through APIs or message queues.
    • Scaling is done at the service level, allowing for more efficient resource utilization.
    • Development, testing, and deployment can be done independently for each service.
    • Enables continuous deployment and faster iteration.
    • Additional overhead for managing service communication and orchestration.

Benefits​

  • Scalability

    • Enables scaling individual components independently based on demand.
    • Optimizes resource usage by allocating resources where needed most.
    • Allows for horizontal scaling of specific services without affecting others.
  • Flexibility

    • Provides freedom to choose different technologies and programming languages for each service.
    • Allows teams to use the most appropriate tools and frameworks for specific tasks.
    • Facilitates experimentation and innovation by enabling the adoption of new technologies as needed.
  • Resilience

    • Isolates failures to individual services, preventing them from affecting the entire system.
    • Enhances fault tolerance by ensuring that failures in one service do not propagate to others.
    • Supports graceful degradation, where the system continues to function despite partial failures.
  • Faster Deployment and Updates

    • Enables continuous deployment by allowing changes to be deployed independently for each service.
    • Reduces time-to-market by facilitating rapid iteration and experimentation.
    • Enhances agility and responsiveness to customer feedback by enabling quick updates and feature releases.

Challenges​

  • Complexity

    • Increased complexity in development, deployment, and maintenance.
    • Requires effective coordination between teams.
  • Data Management

    • Handling data consistency and synchronization challenges.
    • Requires careful management of data storage and retrieval.
  • Network Latency

    • Service-to-service communication introduces latency.
    • Requires optimization of network communication.
  • Security

    • Distributed nature raises security concerns.
    • Requires robust authentication and encryption mechanisms.