一个工地要启动项目,前期需要搭建基础设施支撑后续搬砖顺利。比如:脚手架的搭建、安全、监控 等。
对于软件工程也是类似,每个项目的初期都需要搭建基础设施。那么对于一个微服务项目,你有用微服务模板吗?一个简单又可以快速帮助搭建的微服务的模板。自从微服务的潮起,搬砖的工作变成多工地模式,每个工地都需要搭建好一套基础设施。
作为 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 setupnetwork port linkdatabase linkrelated 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
 - …
 
写在最后
持续更新…