今天跟大家聊聊我最近搞的“chekhov”项目,就是个学习项目,主要是想深入理解一下微服务架构,然后顺便实践一下一些新的技术。
我啥也没想,直接上手就干。先是搭了个框架,用的是Spring Boot,这玩意儿我熟,上手快。然后就开始定义服务,用户服务、商品服务、订单服务,感觉像模像样的。
第一步:搭建基础框架。
- 用Spring Boot快速构建项目骨架。
- 引入常用的依赖,比如MyBatis、Lombok啥的。
- 简单配置一下数据库连接。
但是,很快就遇到问题了。服务之间怎么通信?一开始想用RestTemplate,简单粗暴,但是感觉不太优雅。后来调研了一下,决定用gRPC。这玩意儿性能而且有代码生成工具,能省不少事儿。
第二步:引入gRPC。
- 定义proto文件,描述服务接口。
- 用protobuf插件生成Java代码。
- 实现gRPC服务。
- 配置gRPC客户端。
接下来就是数据库了。我用了MySQL,这玩意儿我也熟。但是,单体应用的时候,一个数据库就够了,现在要搞微服务,每个服务都要有自己的数据库。这就麻烦了,数据一致性怎么保证?
第三步:数据库设计。
- 每个服务一个数据库。
- 考虑数据一致性问题,初步决定用最终一致性方案。
- 使用MyBatis作为ORM框架。
然后我开始吭哧吭哧写代码,把用户服务、商品服务、订单服务的基本功能都实现了。但是,越写越觉得不对劲。每个服务都要处理自己的业务逻辑,还要处理gRPC通信,代码冗余不说,还很难维护。
第四步:服务实现。
- 实现用户服务,包括注册、登录、用户信息查询等功能。
- 实现商品服务,包括商品列表、商品详情、库存管理等功能。
- 实现订单服务,包括创建订单、支付订单、订单查询等功能。
于是我又开始调研。发现可以引入服务网格(Service Mesh),这玩意儿能把服务间的通信、鉴权、监控等功能都抽离出来,放到一个专门的“边车”里。这样,服务就只需要关注自己的业务逻辑了。
第五步:引入Service Mesh。
- 调研了Istio和Linkerd,最终选择了Linkerd,因为更轻量级。
- 安装Linkerd。
- 配置Linkerd的代理规则。
- 测试服务间的通信。
用了Service Mesh之后,感觉清爽多了。但是,又遇到了新的问题。服务越来越多,配置文件也越来越多,手动管理太麻烦了。于是我又开始研究配置中心。
第六步:引入配置中心。
- 调研了Apollo和Nacos,最终选择了Nacos,因为功能更全面。
- 安装Nacos。
- 把服务的配置信息都放到Nacos里。
- 修改服务代码,从Nacos读取配置。
为了方便监控和调试,我还引入了Prometheus和Grafana。这样,就能实时监控服务的性能指标,及时发现问题。
第七步:引入监控系统。
- 安装Prometheus。
- 配置Prometheus的抓取规则。
- 安装Grafana。
- 创建Grafana的Dashboard,展示服务的性能指标。
搞完这些,整个项目才算基本成型。虽然还有很多地方需要完善,但是已经可以算是一个简单的微服务架构了。
- 搭建基础框架:Spring Boot
- 服务间通信:gRPC
- 数据库:MySQL,每个服务一个数据库
- 服务网格:Linkerd
- 配置中心:Nacos
- 监控系统:Prometheus + Grafana
通过这回实践,我学到了很多东西。微服务架构虽然复杂,但是确实能提高系统的可扩展性和可维护性。以后有机会,我会继续深入研究,争取把这个“chekhov”项目做得更
还没有评论,来说两句吧...