Junior
Which algorithm has logarithmic complexity O(log n)?
sobes.tech AI
Answer from AI
The difference in scope and testing points of isolation:
Monolithic architecture:
- Testing covers one large application.
- Types of testing include system testing at the whole application level, regression testing across the entire monolith, and end-to-end testing simulating external interactions.
- Dependencies are high between modules within the application. Changes in one part can affect others.
- Deployment is a single unit. Testing focuses on one artifact.
- Tools are standard for web apps, API, databases.
- Debugging is simpler within one process.
Microservices architecture:
- Each microservice is tested in isolation, then their interaction is tested.
- Types include unit testing, component testing, integration testing, end-to-end testing, and contract testing.
- Dependencies are low between services. Contract and integration testing at service boundaries are crucial.
- Deployment involves multiple independent units. CI/CD pipelines are critical.
- Tools for distributed systems, API testing, monitoring.
- Debugging is more complex, requiring distributed tracing.
| Parameter | Monolith | Microservices |
|---|---|---|
| Testing scope | Whole application | Individual services + their interaction |
| Dependencies | Internal, within codebase | Network-based, between services |
| Test data | Centralized | Managed per service, considering dependencies |
| Integration | Module-level | Service-to-service, contract testing |
| Fault tolerance | Less critical at module level | Critical at service boundaries |
Example contract test with Pact:
// pact_broker/pacts/consumer-provider/latest.json
{
"consumer": {"name": "MyConsumer"},
"provider": {"name": "MyProvider"},
"interactions": [
{
"description": "Get user by ID",
"request": {
"method": "GET",
"path": "/users/123",
"headers": {"Accept": "application/json"}
},
"response": {
"status": 200,
"headers": {"Content-Type": "application/json"},
"body": {"id": 123, "name": "John Doe"}
}
}
],
"metadata": {
"pactRust": {"version": "1.0.0"},
"pactSpec": {"version": "3.0.0"}
}
}
This JSON describes a contract where the consumer expects a GET request to /users/123 and a response with status 200 and a JSON body. The consumer generates this contract, and the provider verifies it.
This ensures API compatibility and reduces integration issues.