其实我自个做产品已经经历了两个阶段,前两个阶段有什么坑有什么好处自己都基本明白。
现在算是第三个阶段。
又开始纠结了……
先说下我业余做东西的心路历程:
我要上业界最前沿的技术!
然后就是用上了各种压根没啥人用的新框架,架构就是分布式微服务(细粒度拆分,觉得自己代码写的是真他吗优雅,可维护性可拓展性拉满了)、搞个前后端分离、然后缓存搜索消息各种中间件全部 balabala 怼上去……
倒不是技术不行,其实我还是可以 cover 的,新技术新框架查查官方文档、debug 看下源码,都能解决。
就是坑太鸡儿多了,尤其是 WebFlex 和 SpringSecurityOAuth2 有几个坑我都要看源码看的很深才能解决,真实折腾。
服务又多,窗口 /屏幕切来切去麻烦的我要死。
产品 demo 都没出来,就先在“基础设施”这一块折腾了三个多月。
后面直接放弃。
反思:
《黑客与画家》说的是对的,圣母玛利亚式开发没有好结果。
大而全没什么卵用, 直接做个最小功能集上线然后慢慢加东西就挺好。
适合小团队 /单人的还就真是快速迭代这个搞法。
吸收了阶段一的经验。
决定采用巨石架构,搞的就是单体服务,直接一个 SpringBoot 怼上去就完事了。
中间件选型就一个 Postgres 直接把 SQL 、NoSQL 、时序、图、搜索 balabala 全部 cover ,是真的完美。
然后把之前那个死掉的项目的尸体拿过来消化了一下,基础设施复制复制改改还能用。
然后就是一周上线,实际投入生产环境。
好家伙,这项目一做就是一年多,慢慢的也就开始有收益了。
反思:
巨石架构是真的好用,你哪有那么多用户、那么多功能、那么多人手来整微服务那套东西。
开发方便快速就不说了,部署也是简单的很。
说白了就算是一般公司那几十百把万用户甚至都没必要上微服务。作为个人开发者的体量就更不用谈了。
还有一个很关键的点就是:就算你最初版功能再怎么少也好,有没有上线 /有没有用户,对于一个独立开发者的心态而言真的是完全不一样的。
现在想要开发一个新的东西……
那问题就来了,诸如 [用户系统] [认证鉴权] [主题 /文章 /帖子等 UGC 模块] [回复中心 /消息中心] [用户动态] [第三方服务对接] [图片存储 /处理] ……等等等等“基础服务”实际上是属于你无论开啥 APP 都可以用上、有机会用上的。
我要是新的产品也保持巨石架构,那就不得不全部一股脑复制过去。
但又由于业务肯定不同,要针对性修改也感觉怪麻烦的。
后期的话随着迭代的加深,我各个产品线的基础服务甚至都可能会变得不太一样,到时候同时维护多个产品估摸着也会有些消耗心智。
所以我又想着捡起微服务了…… 给自己做一套 SAAS 是不是挺不错的?
先用 RBAC 做一套统一的 Auth 服务。
然后把基础设施抽取出来,不进行更细粒度的拆分直接把常用的基础服务打包到一起。
然后考虑拆一个专门的对接服务用来和第三方打交道。
底层数据模型就类似多租户的模式,做 APP 隔离。
中间件准备在加一个,在 Postgres 外添加个 Redis ,够了。
那么在这几个服务的支持下, 我在开新的软件、新产品 就快速方便很多了。
至于多个服务用一套基础服务的性能问题,我是完全不考虑的。 现在我那个单体项目的 DB 配置也就 1c1g ,还天天 CPU 10%。
差不多就这样了……
不知道我的考虑是否正常,想法是否正确?
上面就权当抛砖引玉, 看看各位老哥有没有啥经验,还请多多指导我。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.