-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sanitize text, clean up bullets and removed colons
- Loading branch information
Showing
14 changed files
with
79 additions
and
80 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,27 @@ | ||
|
||
# User Facing API Gateway | ||
|
||
## Decision: | ||
## Decision | ||
|
||
- Establish single entry point for client applications, an API management service that sits between the client app and the collection of the internal services and allow us to make internal changes to our system, completely seamlessly and transparently to our API consumers. | ||
Establish single entry point for client applications, an API management service that sits between the client app and the collection of the internal services and allow us to make internal changes to our system, completely seamlessly and transparently to our API consumers. | ||
|
||
## Pros: | ||
## Pros | ||
|
||
- The API Gateway can abstract and encapsulate our internal APIs offering a single API and implementing a software architectural pattern called *API composition*. The client applications essentially interface one single service API and can execute a single call to the API Gateway, which would then route the request to all the appropriate services and return the response. (workflow, avoids tight coupling) | ||
- Consolidate all security aspects of the system in one single place. Also, performance benefits due to perhaps implementing SSL termination, and avoiding the overhead of authenticating each request with each service ( security, performance) | ||
- Improved monitoring since all requests and traffic are handled by API Gateway enhancing our system's observability and traceability capabilities (observability) | ||
- Protocol translation both for requests handled internally, but also for services exposed externally (e.g. consumption of analytics reports) so as to be flexible to integrate with other systems that may bring us additional revenue. (interoperability) | ||
|
||
## Cons: | ||
## Cons | ||
|
||
- API Gateway may become a Single Point of Failure | ||
- Performance overhead due to another layer of abstraction and routing of requests | ||
- Require to support and maintain an additional service | ||
|
||
## Justification: | ||
## Justification | ||
|
||
We typically benefit more than we sacrifice in terms of performance, and Single Point of Failure concerns can be mitigated by deploying multiple instance of the service behind a Load Balancer without incurring significant cost | ||
|
||
## Other Considerations: | ||
## Other Considerations | ||
|
||
We can also break the API Gateway into multiple services e.g. WebAPI gateway, Mobile gateway and third party gateway | ||
(more specialized and lightweight), but this initially looks like over-engineering and adding development overhead. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,25 @@ | ||
# Usage of CDN | ||
|
||
## Decision: | ||
## Decision | ||
|
||
CDNs have servers distributed globally, located in strategic places enabling content to be delivered quickly to users regardless | ||
of their geographic location. This allows for significant improvement in client's perceived performance. We favor push based | ||
strategy to upload our content since we do not expect static content to change frequently | ||
|
||
|
||
## Pros: | ||
## Pros | ||
|
||
- CDN caching minimizes the time required to load assets like images, stylesheets, scripts, resulting in faster page load times. (performance) | ||
- CDNs can reduce bandwidth costs because they offload a significant portion of traffic from the origin server (cost) while employ efficient compression | ||
algorithms on cached content (mobile-friendly) | ||
- CDNs are designed to handle high traffic loads and can easily scale to accommodate increased demand (scalability) | ||
|
||
## Cons: | ||
## Cons | ||
|
||
- Using a CDN service itself comes at a price (cost) | ||
- Caching can sometimes become an issue leading to outdated content until the cache is purged (complexity) | ||
- CDN means relinquishing some control over content delivery to a third-party provider. | ||
|
||
## Justification: | ||
## Justification | ||
|
||
CDN is a service used in conjuction with our system to improve user experience, lower maintenance costs on our part, and most | ||
importantly speed up content delivery to end users that are geographically distributed |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,23 @@ | ||
# Hybrid: Microservices - Event Driven Architecture | ||
|
||
## Decision: | ||
## Decision | ||
|
||
- Microservices organizes our business logic as a collection of loosely coupled fine-grained services promoting | ||
Microservices organizes our business logic as a collection of loosely coupled fine-grained services promoting | ||
Single Responsibility Principle (SRP), while event driven architecture favors higher scalability by ensuring | ||
easy decoupling of services by exchanging messages asynchronously and promoting availability and fault tolerance. | ||
|
||
## Pros: | ||
## Pros | ||
|
||
- Services can be scaled horizontally easily, adding more instances for targeted services utilizing cost-efficient infrastructure (scalability, elasticity) | ||
- Better availability, since infrastructure setup can cope with delays on requests and achieve better fault isolation, isolate the problem and mitigate it (availability, fault tolerance, loose coupling) | ||
- Improving engineering velocity and organizational decoupling, since services can be implemented separately have smaller codebase and also deployed in their own timeline (testability, deployability) | ||
|
||
## Cons: | ||
## Cons | ||
|
||
- Microservices introduce complexity in terms of managing multiple services, inter-service communication, and data consistency (performance,data consistency) | ||
- Combining microservices and event-driven architecture can introduce a significant level of complexity to your system (over-engineering) | ||
|
||
## Justification: | ||
## Justification | ||
|
||
Microservices inherently embrace the idea of distributed systems, and event-driven architecture aligns well with the challenges and requirements of distributed systems. | ||
Event-driven systems allow for asynchronous processing of tasks promoting loose coupling and availability. Also, each microservice can be responsible for specific business functionality therefore it is easier to evolve, modify, or replace individual microservices without affecting the entire system. |
Oops, something went wrong.