{"id":13679283,"url":"https://github.com/paunin/soa-checklist","last_synced_at":"2025-04-13T11:10:03.664Z","repository":{"id":70080139,"uuid":"72981199","full_name":"paunin/soa-checklist","owner":"paunin","description":"Microservice Oriented Architecture checklist","archived":false,"fork":false,"pushed_at":"2018-03-19T14:47:32.000Z","size":5,"stargazers_count":96,"open_issues_count":0,"forks_count":30,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-13T11:10:00.235Z","etag":null,"topics":["architecture","cluster","microservice","soa","soa-checklist"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paunin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-06T09:33:44.000Z","updated_at":"2025-03-19T01:00:07.000Z","dependencies_parsed_at":"2023-04-05T13:07:18.900Z","dependency_job_id":null,"html_url":"https://github.com/paunin/soa-checklist","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paunin%2Fsoa-checklist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paunin%2Fsoa-checklist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paunin%2Fsoa-checklist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paunin%2Fsoa-checklist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paunin","download_url":"https://codeload.github.com/paunin/soa-checklist/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248703199,"owners_count":21148118,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["architecture","cluster","microservice","soa","soa-checklist"],"created_at":"2024-08-02T13:01:03.948Z","updated_at":"2025-04-13T11:10:03.639Z","avatar_url":"https://github.com/paunin.png","language":null,"funding_links":[],"categories":["Others","soa","\u003ca id=\"Miscellaneous\"\u003e\u003c/a\u003eMiscellaneous"],"sub_categories":["\u003ca id=\"Web-App\"\u003e\u003c/a\u003eWeb App"],"readme":"# SOA checklist\n\nDisclaimer - Trust no one, use your brain! (**Work continuously in progress**)\n\n## Administrative (people, flows, responsibilities)\n\n* Blueprint/template for a new service\n* Documentation, standards, guides (how-to, know-how documents)\n* Team support\n   * Understanding of the whole process by each member\n   * Pro-active development and support\n   * Accepted responsibilities and duties for each stage of a service\n* Plan for service live circle\n   * Pre-production development\n   * Launching\n   * Rollout backward compatible version of a service\n   * Hotfixing\n   * Rollout backward incompatible version of a service\n      * Data migration\n      * Switchover\n      * Service rollback\n\n## Automated processes\n\n* Continuous development\n   * Tests\n      * Automated\n         * Unit tests\n         * Functional tests\n         * Code style (lints and sniffers)\n         * Code quality monitoring ([Sonar](http://www.sonarqube.org/), [Scrutinizer](https://scrutinizer-ci.com/))\n         * Code coverage checks\n      * Manual\n         * Feature acceptance/Business acceptance\n         * A/B tests  \n   * Conditions of integration\n      * Code style checks\n      * Test results\n      * Code coverage percentage\n   * Conditions of disintegration a feature\n      * Error rate after deploy live\n      * Healthchecks\n   * Storing a new tested snapshots/artefact of a service\n      * Artefact storage (Docker registry)\n         * Cleanup policy (Delete old tags with timeout)\n* Continuous delivery of stable artefacts \n   * [Images builder](https://github.com/paunin/images-builder)\n   * Services provisioning([Ansible](https://www.ansible.com/))\n\n## Implementation\n\n* System layers\n   * Hardware: Servers and networks\n      * Scaling (adding new nodes) should not affect consistency of other layers\n      * Degradation (removing nodes)  should not affect consistency of other layers\n      * Monitoring\n         * Hardware\n         * Network\n         * Resources and load\n      * Alerting policy\n   * Cluster: Services management system  ([Kubernetes](http://kubernetes.io/), alternatives: [OpenShift](https://www.openshift.com),[Apache Mesos/Apache Karaf](http://servicemix.apache.org/))\n      * Monitoring\n         * Availability of each node in the cluster\n         * All services up and running\n         * Connectivity between different pods and services\n         * Public endpoints accessibility \n      * Alerting policy\n      * Restart (full or partial) should bring cluster and systems up without destruction\n      * Log aggregation system - collect all logs from all containers\n      * Execution environment\n         * Meta-project with topology of the system\n            * Showroom + Staging \n               * Separate namespace for each showroom\n               * Fixed showroom for the staging (last stable pre-release)\n            * Production\n               * Configuration\n                  * Secrets\n                  * Configs should be a part of the meta-project \n   * Service: Application and any service\n      * Service itself (Docker image)\n         * Backward compatibility for a few generations\n            * Cleanup policy for deprecated/unused:\n               * Logic branches\n               * Data structures (RDBMS/NoSql)\n         * One container - one process\n            * Segregated commands even in one image (management layer can pick any to run)\n            * Built in commands\n               * Test service/source code (docker compose to setup required test ENV)\n            * DEV/DEBUG mode\n         * Logging\n            * Writing in stdout (without using containers’ file system) will enforce cluster layer to keep all logs\n         * Monitoring\n            * Application and business checks (New Relic: throughput, metrics)\n            * Self health checks (metrics+[Prometeus](http://www.prometeus.net/site/)+[Grafana](https://grafana.org/))\n               * Queues content (amount of messages)\n               * Db content (custom checks)\n               * Cache utilization check\n         * Alerting policies ([Prometeus](http://www.prometeus.net/site/), [NewRelic](https://newrelic.com))\n         * Tracing system agent ([zipkin](http://zipkin.io/))\n         * Self-sufficiency \n            * Interfaces documentation\n               * Restful API\n                  * [Swagger](http://swagger.io/)\n               * Port and service description (README.md files)\n            * Service should be able to set itself up\n               * Wait for required related services and ports ([dockerize](https://docs.docker.com/compose/startup-order/))\n               * Configuring from environment variables ([confd](https://github.com/kelseyhightower/confd))\n               * Warming up\n                  * Run data migration (needed maintenance service)\n                  * Cache fulfilment\n      * Replication, balancing and scaling on service level\n      * Failover and self-reorganisation in case of:\n         * Service crashed\n         * Physical node out of cluster\n         * Resources problems on specific node \n      * Logs system\n         * Service to collect and access logs grabbed from Cluster layer\n            * ELK stack/Gray Log/etc\n      * Persistent volumes to keep data\n         * EBS AWS\n         * Ceph\n         * NFS\n* Common services \n   * Tracing system ([Zipkin](http://zipkin.io/))\n   * Single sign-on service\n      * Authentication service ([JWT](https://jwt.io/))\n      * Authorization requests from all services\n   * Detached processing ([CQRS](http://martinfowler.com/bliki/CQRS.html))\n      * Request-Queue-Processor schema\n      * Stream data addressing and processing ([Reactor](https://projectreactor.io/))\n   * Real Time data requests processing\n      * Reliable data provider/API gateway (sync data retrieving)\n         * Request-Manager-Service solution\n   * Reliable data-bus for events\n      * Event-Broker-Subscriber solution ([Apache Camel](http://camel.apache.org/))\n         * Http/TCP API endpoint to accept events\n         * Event fulfilment (Earn required information for subscribers)\n         * Event delivery\n         * Event delivery policies\n            * Retry\n            * Reque\n            * Giveup\n   * RDBMS: [Postgres cluster](https://github.com/paunin/postgres-docker-cluster)\n   * DB backups: [PG backupper](https://github.com/paunin/pg-backupper)\n   * Key-value + Queue: [Redis cluster](https://github.com/relaxart/kubernetes-redis-cluster)\n   * Messages system: [Rabbit MQ cluster](https://github.com/relaxart/docker-rabbitmq-cluster)\n   * Healthcheck system\n   * Alerting system\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaunin%2Fsoa-checklist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaunin%2Fsoa-checklist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaunin%2Fsoa-checklist/lists"}