If someone meant to say Ps and pronounce it Bees. would this confuse you :).
Ps is for the P that is the start of Properties and Practice
Each application should have some properties and follow certain practices.
Properties:
Below are 5 properties we should try to have in our application with a small description of how to include them
- Scalable, Scale => Increase workload (horizontally scaling)
- Statless, no state should be shared among different application instances,
- Concurrency, concurrent processing = Threads.
- Loosely coupled, decompose the system into modules, each has minimal dependencies on each other "modularization", encapsulating code that changes together "High cohesion".
- API first, Interfaces, implementation can be changed without affecting other application. favor distribution of work across different teams.
- Backing Services, "DB, SMTP, FTP ..." , treating them as attached resources, meaning they can easily be changed.
- Manageable, changing the internal state and O/P via external I/P, Also regarding updating the application while keeping the overall system up and running.
- Configuration: aspect that changes during deployment should be kept outside the app codebase, recommended to be stored as environment variable within environments.
- Observable, infer the internal state through external O/P, ensuring that every component provide the correct data.
- Logs, treating logs as event stream. Log aggregator for fetch/collect logs to be available for inspection.
- Telemetry data, matrices, traces, health state and events.
- Resilient, Failure is not cascaded (Isolated), a system is considered resilient if it provides its services even in the presence of a fault.
- Disposable, can be started/stopped at any time, designed to start quickly.
Practices:
Below are 6 practices we should follow
- One CodeBase, 1**1 correlation between application and repository, each application is tracked in its own repository.
- Administrative Processes, handled as small standalone services, "DB migration, Batch job, maintenance job ..." should be tracked in revision control.
- Dependency management
- Design, Build, Release & Run, each release is immutable and should be uniquely identified.
- Environment parity
- Time gap, reduce the period between when a developer writes a code to when it is deployed.
- People gab, embrace DevOps culture, improve collaboration between teams.
- Tool gab, same type/version should be used in all environments, keeping environments as similar as possible.
- Port binding, Self-Contained, containers, application is self contained. translating request from public endpoint to internal port bounded service.
Notes:
- One application can become the backing service of the other.
- Admin code better to be shipped with application code to avoid sync issues.
- Working with modules increase flexibly as each will evolve independently.
Comments
Post a Comment