项目介绍
light reading cloud(轻松阅读)是一款图书阅读类APP,基于 SpringCloud 生态开发的微服务实践项目,涉及 SpringCloud-Gateway、Nacos、Hystrix、OpenFeign、Jwt、ElasticSearch 等技术栈的应用。
项目的侧重点主要是基于实际业务场景使用微服务架构落地的思路,会采用图文的方式介绍每个服务或接口的原理以及为什么使用这种方式实现,希望会对想入门微服务的同学有所帮助。
客户端采用 Vue.js 、Vuetify 开发:点击进入仓库
版本
2.0
版本,主要更新了 SpringCloud Alibaba 的 Nacos 组件,替代了 SpringCloud Config 以及 Eureka
1.0
版本,采用 SpringCloud Config、Eureka 为配置中心、注册中心。获取此版本,请查看 reading-1.0
分支的说明,并 Checkout
此分支
部分截图:
架构图
客户端访问接口由统一流量入口 SpringCloud-Gateway 接收请求、响应结果,网关与微服务基于异步IO Netty通信,微服务获取配置文件启动后通过 Nacos 完成服务注册与发现,微服务之间的相互调用基于http协议的 FeignClient客户端。
核心架构图如下:
系统模块
微服务拆分策略:
- 业务先行,理清楚业务边界和依赖
- 先有独立的模块,后有分布式服务
- 模块之间的依赖关系要清晰、参数简单、耦合要少
- 最重要的是需求,根据需求判断具体价值,再按价值建立设计原则,最后按照设计原则来选择落地的技术方案,而不是根据技术来套业务需求
阅读APP,如果你有阅读的习惯,相信对此类产品并不陌生,其核心功能是阅读,当然在阅读之前需要发现想要读的图书,这就需要精品(榜单)页、排行、分类、搜索等功能的支撑,而用户数据主要分为账户、会员、书架、积分、评论等功能。
所以根据业务场景可进行最基础的拆分服务:图书服务、精品页服务、排行榜服务、搜索服务、账户服务、会员服务、消息服务、积分服务、活动服务、评论服务、支付服务等等(实际上会有比这更多的功能哈)
本项目进行以下拆分:
No | 工程模块 | 说明 | 依赖 |
---|---|---|---|
1 | reading-cloud-common | 公共模块,存放通用的POJO、工具类等文件。 | - |
2 | reading-cloud-gateway | 服务网关,流量入口、权限验证等 | - |
3 | reading-cloud-book | 图书中心,提供图书基础数据接口 | 1 |
4 | reading-cloud-account | 账户中心,提供账户授权、用户服务等接口 | 1、3 |
5 | reading-cloud-homepage | 精品页中心,提供App精品页接口 | 1、3、4 |
6 | reading-cloud-feign-client | Feign客户端,提供微服务的公用客户端 | 1 |
这样拆分的粒度比较适中,其中每个服务相对都比较独立。由于个人精力有限,只实现了最核心的业务:图书、精品页、账户、书架等服务。
从依赖中可以看出,除了common之外,图书中心被依赖的次数最多,由此可见图书中心是最基础的服务,为此需要对这类底层的服务分配更多的容器,具体的还需要根据 DAU
、QPS
等综合衡量,决策更合适的数值,是否要进一步拆分微服务等等。
附录
附录1.在线UML编辑工具:https://app.diagrams.net/
附录2.在线数据表关系编辑工具:https://dbdiagram.io/
下一节:一个阅读APP微服务项目(二)
作者: Zealon
崇尚简单,一切简单自然的事物都是美好的。