一个工地要启动项目,前期需要搭建基础设施支撑后续搬砖顺利。比如:脚手架的搭建、安全、监控 等。
对于软件工程也是类似,每个项目的初期都需要搭建基础设施。那么对于一个微服务项目,你有用微服务模板吗?一个简单又可以快速帮助搭建的微服务的模板。自从微服务的潮起,搬砖的工作变成多工地模式,每个工地都需要搭建好一套基础设施。
作为 DRY 原则的信奉者,一切重复劳动都是浪费青春(我的青春还需要留着浪呢)。将重复的抽离出来,构建成模板,然后就是模板规模使用(复制粘贴)。
在软件工程领域,一个工程的初始化,包括:技术选型,工程实践,持续集成,持续交付等。展开来说,包括:
- 技术栈
- 代码规范
- 配置管理
- 测试策略
- 应用层
- 数据管理
- 集成策略
- 安全策略
- 持续交付
- 运维监控
那么对于一个基于 SpringBoot 技术栈的微服务工程,每个维度如何去落地搭建?
代码规范
- Checkstyle/PMD/FindBugs/AlibabaJavaCodingGuidelines
- EditorConfig
- SonarQube
- API Normalize
配置管理
- Version control system: Git
- Build Tool And Dependencies Management:Gradle、Maven
- Config Management: Spring Cloud Config
- Env management: Vagrant/Gradle
memory size setup
network port link
database link
related to the envrionment configuration
- …
测试策略
- Unit Test
- Component Test
- API Test
- Contract Test
- Integration Test
- Performance Test
- Test Coverage
应用层
- DDD Tactics
- DIP
- AOP
- ORM
- Asnyc
- Transactional Management
- DSL
- API Design: RESTfuls(Idempotent, Error Handling, etc.)
数据管理
- Migration: Database schema management: flyway
- Database: RDBMS
- Message: Kafaka
- Cache: Redis、Spring Cache
集成策略
- API Semantic Versioning
- Event Driven
- Service Discovery/Register
- Service Fallback: Hystrix
- Load Balance: Ribbon
- API Call: Feign
- ….
安全策略
- Auth: session management、Json web token
- Permission: Data permission、Feature permission
- Security: CORS、XSS、SQL Inject
- …
持续交付
- Pipeline: GoCD/Jenkins(pipeline as code)
- Containeize: Docker
- Container Scheduling and Management: Kubernetes、Docker Compose
- Container management platform: Rancher
- …
运维监控
- APM: APP Dynamic、Pinpoint、Grafana、Prometheus、Zipkin
- Logging System: EFK
- Cerebro
- …
写在最后
持续更新…