crud + 微服务,如何解放重复劳动?
三十多个服务多数都是 crud,一般每个服务的实体不会超过三个,实体之间相对独立。参与开发的人也很多,不仅重复劳动比较大,各个服务内的代码统一也是个大问题。
现在在考虑:
- vscode 代码片段
- 根据 rpc 定义和 sql ddl 更深一点的代码自动生成
你们在实践中有什么好的方案吗?
三十多个服务多数都是 crud,一般每个服务的实体不会超过三个,实体之间相对独立。参与开发的人也很多,不仅重复劳动比较大,各个服务内的代码统一也是个大问题。
现在在考虑:
你们在实践中有什么好的方案吗?
过度微服务就是天坑
为什么同一个领域还要拆分服务,我的经验是为了平衡稳定性和灵活性。基本上是领域服务和管理服务拆开,领域服务负责稳定,发布后基本不动,管理服务负责灵活,可以随时迭代。而且这两个服务本来就是同一个业务,用的是相同的数据,你数据库怎么能不一样呢。
搞微服务不能教条主义,要按业务的实际需求来。
项目管理做不好,你拆分微服务是缘木求鱼,这不主就碰到问题了吗
1. 我们是负责广告投放的,服务都是管理端使用的服务,有很多纯粹是小工具性质,比如管理预览白名单媒体操作服务。
2. 开发的成员不专业,我们是前端组管理了 30+的 rpc 服务,对于服务拆分的思考可能不够,也有服务过大过于混乱的担心。
3. 版本迭代非常频繁且存在很严重的并行,因为我们是开发管理端不是对外服务,基本上是有需求就做,做完每周两个窗口发布。当然这跟管理制度有关,但我也没法解决。如果把多个功能放在一个服务,测试环境占用git 管理冲突都很麻烦(巅峰时期一个服务有三四个需求同时开发和测试),当然这也是技术上可以解决的,但是从人员现状来看,很难做。
大家在实践中对于微服务如何理解呢?一般有几个实体?如果不存在关联的实体(比如上面提到的预览服务和媒体操作服务)也会因为业务靠近放在一个服务内吗?
如果单体服务划分好模块,需求都在各个模块内部,也不会有什么冲突,反而是对公共依赖的修改可以更容易的发现对其他代码的影响。
单体服务也好,微服务也好,其实后面都是同样的设计方法。只不过微服务更灵活,难度也更大而已
合并,@swulling 的说法很对。
μ 的架构演进,(在没有经验的情况下)合理的情况应该是从一个单体架构开始的。 因为在单体架构是你的业务在内部非常清晰,逻辑完整,内聚程度也相对较高。