有朋友们来咨询关于用Spring Cloud全家桶开发微服务应用的问题、以及在Kubernetes上编排部署Spring Cloud微服务、如何寻址的问题,因此萌发了将我以前在几个互联网项目中开发和k8s部署微服务实战中积累的最佳实践提炼出来分享的想法。本项目为一个浓缩了Spring Cloud Microservices on Kubernetes最佳实践的mini微服务应用参考,用于最佳实践的分享,技术演示了:
- 一个可快速复制的采用
Spring Cloud全家桶来开发微服务应用的框架; - 一套可快速复制的将
Spring Cloud微服务部署到Kubernetes集群上的部署方案和YAML部署脚本(在生产项目应用中,这些YAML脚本应该需要部署到公司的CI & CD pipeline上以实现自动化的CI & CD)。
-
Kubernetes和Rancher Server:作为自动化部署、伸缩和编排微服务容器集群的PaaS平台。 -
Spring Cloud全家桶:用于开发微服务应用。采用目前最稳定的Edgware RELEASE,最佳搭配的全家桶组件有:- 开发:
Zuul作为API Gateway,Eureka作为服务注册治理中心,Spring Cloud Config作为配置中心,Hystrix作为熔断器、降级和限流,Ribbon作为负载均衡,Feign作为声明式的REST Client。 - 监控:
Spring Boot Actuator+Spring Boor Admin提供每个微服务的自省和监控能力、以及可视化监控UI,Hystrix Dashboard用于可视化监控Hystrix Metrics,Turbine用于聚合各个微服务的Hystrix Metrics,Sleuth和Zipkin用于分布式调用跟踪。
- 开发:
-
Swagger&Swagger UI:用于REST API文档和兼作REST API调试。 -
MyBatis:用于MySQL数据库访问ORM。 -
RabbitMQ:用于可靠的消息服务中间件。 -
Flyway:秉承DevOps的一切均代码思想,采用Flyway用于数据库升级的配置管理。 -
第三库:
lombok,guava
- 采用
RabbitMQ让各个微服务实例异步吐出Hystrix Metrics和Turbine进行异步采集聚合。 - 部署上
Zipkin和Elasticsearch:估计虚拟机的配置需要升级才能跑得动:(。 TCC柔性分布式事务处理的演示:需要再开发几个演示TCC的微服务。Spring Data JPA Repositories+Hibernate:演示另一种数据库ORM方案。- 文档:增加&完善文档。
感谢你的耐心阅读,如有对本项目中的Spring Cloud & Kubernetes的使用或者对本人的编码风格有更好的想法或者建议,欢迎通过邮件 lisong.zheng@gmail.com或QQ 40000646@qq.com与我取得联系,万分感谢。