初创公司出于对功能和运维效率的需求,普遍都对技术有很深的依赖。对于技术团队来说,新feature的快速发布和迭代是其核心工作。初创企业通常的架构是开发一个单独的web后端,来支撑Android,iOS和网站等前端业务。很多时候,这个后端是从一个单体设计开始的,所有东西都被放在一个项目中。但是,随着团队的扩大,由于其组织松散,会造成很多麻烦。
但求无过:单体架构的诱惑
如果只有一两个开发者协同工作,单体设计无疑是很好的选择。原因很多:首先,开始一个项目很快捷,可以直接部署,开发者也能灵活地修改代码。当每个团队成员都可以充当产品经理,开发者,测试和DevOps的角色时,将所有东西放到一个应用里可以让事情变得简答。一个feature从原型到单体设计中仅用几个小时,如果一切顺利,马上就可以发布到生产环节中。当不太确定一个新feature是否有意义时,这提供了一个很灵活的实验环境。
对于一个起步阶段的初创公司来说,产品迭代唯快不破。需要尽早交付和高频率的迭代,来进行市场验证,复杂想法的可行性验证,和扩展性验证。单体应用很适合做这些,但是当团队扩大的时候,问题将接踵而至。最早的问题形式可能是『merge conflicts』,当多个开发者向同一个文件提交代码,自己的代码可能被其他开发者改掉。对一个feature的修改可能涉及多个开发者,很难跟踪进度。这时,对微服务架构的需求就体现得很明显了。
微服务来帮忙
在今天的web服务世界,微服务可以说是银弹。创建一个微服务相当于从母体的单体架构中,按照逻辑分离出一个独立的组件,各个组件通过REST等协议来与主体部分进行通信,部署的时候是作为相对独立的整体。
比如,在Routofy的微服务架构中,有几个分离的微服务组件:旅游搜索,预定,前端等。以下是应用微服务的一些优势:
代码组织更优化:不同微服务被放到分别的代码库中,更容易实现代码自动化。对代码的访问控制也做得粒度更细,防止关键组件被他人无意修改的情况。
自扩展组件:经常会有这种情况:应用中的一个组件比其它组件需要更多进程。可以将其放到一个单独的微服务中,为它分配更多的专有资源,实现了资源的高效利用和纵向扩展。同时,在多台服务器上运行这些组件,最上面放一个负载均衡器,也为横向扩展提供了空间。
步调独立的开发:只要通信协议不变,每个微服务都能按照自己的步调开发,不需要依赖其它组件。一些组件可能是需要每天更新和部署的,另一些则需要每个月更新,所有组件都可以独立更新,不需要停止/重启整个应用。
灵活性更强:当一个模块变成微服务,它对技术栈的选择就变得非常自由,考虑到某些组件的功能更适合某些编程语言,不同的微服务就可以尝试新的库,甚至新的语言,而且不会影响到其它微服务。而且,某个微服务在这个实验过程中得到的一些经验,也可以分享给其它的微服务团队,促进整个组织的技术进步。
单体到微服务的迁移
从单体到微服务架构的迁移通常需要3-4周的时间,这段时间内在旧的应用中交付新功能会很困难。要定好通信协议是同步还是异步的。同等重要的是模块间的解耦程度,将一个单体分解为10个微服务看起来很好,但从实际角度来看是灾难性的。要改造为微服务的模块必须代表一个独立的部分。
团队规模,开发者在相关领域的经验,交付的时间周期,都是决定采用哪种架构来构建一个新应用时,应该考虑的重要因素,除此之外还要综合考虑各种架构能带来的好处。
关于:中科研拓
深圳市中科研拓科技有限公司专注提供软件外包、APP开发、智能硬件开发、O2O电商平台、手机应用程序、大数据系统、物联网项目等开发外包服务,十年研发经验,上百成功案例,中科院软件外包合作企业。通过IT技术实现创造客户和社会的价值,致力于为用户提供很好的软件解决方案。联系电话400-0316-532,邮箱sales@zhongkerd.com,网址http://www.zhongkerd.com