单体(传统web项目)
比较适合小项目,优点是:
- 开发简单直接,集中式管理
- 基本不会重复开发
- 功能都在本地,没有分布式的管理开销和调用开销
它的缺点也非常明显,特别对于互联网公司来说:
- 开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断
- 代码维护难:代码功能耦合在一起,新人不知道何从下手
- 部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长
- 稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉
- 扩展性不够:无法满足高并发情况下的业务需求
通俗点说就是对于互联网项目,属于一直运营中有客户一直在使用。单体应用的缺陷就暴露出来了,比如可能会因为一个小问题,需要紧急上线,而导致整个网站需要停止,这样的情况对客户、业务都是影响很大的,重新部署、备份对于开发人员来说更是不好维护。
微服务:
- 分布式服务组成的系统
- 按照业务而不是技术来划分组织
- 做有生命的产品而不是项目
- Smart endpoints and dumb pipes(我的理解是强服务个体和弱通信)
- 自动化运维(DevOps)
- 容错
- 快速演化
所以,现在主流的设计一般会采用Microservice Architecture,就是基于微服务的架构。简单来说, 微服务的目的是有效的拆分应用,实现敏捷开发和部署 。