1.什么是微服务?
微服务是一种架构风格,由一个或者多个微服务组成,每个微服务都可以孤立部署,每个微服务都是松耦合,专业的事情交给专业的模块来做,一个模块就做这一件事。
1.1松耦合与紧耦合的区别
紧偶合
模块之间关系太紧密,存在相互调用
松耦合
模块依赖程度不高
2.为什么需要微服务?
单体架构在规模比较小的情况下工作情况良好,但是随着系统规模越来越大,出现的问题也就越来越多。
2.1 复杂性逐渐变高
单体项目
- 各个模块比较模糊
- 代码量过多
- 逻辑比较乱
- 代码量过多,增加解决BUG的难度
微服务
- 每个模块相当是一个单独项目
- 代码量少
- 降低解决BUG难度
2.2 部署速度逐渐变慢
单体项目
- 单体架构模块非常多
- 代码量非常庞大
- 部署花费时间长
微服务
- 一个小功能就是一个微服务
- 代码量少
- 部署花费时间短
2.3 阻碍技术创新
单体项目
- 整体项目使用相同技术开发
- 整体项目共用一个数据库
- 重构项目成本非常大,每个模块之间可能都存在互相调用,增加重构的难度
微服务
- 每个模块可以使用不同技术开发
- 每个模块可以使用不同的数据库,每个模块都可以对应自己的数据库。
- 每个模块都是独立的,使用技术也可以不一致,开发模式更灵活。
3. 微服务优缺点
- 优点
- 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或者业务需求
- 开发简单,开发效率提高,一个服务可能就是专一的只干一件事
- 微服务是松耦合的,是有功能义的服务,无论是在开发阶段或部署阶段都是独立的
- 微服务能使用不同的语言开发
- 易于和第三方集成,微服务允许容易灵活的方式集成自动部署,通过持续集成工具,如Jenkins,Hudson,bamboo
- 微服务易于被一个开发人理解,修改和维护,这样小团队能够更关注自己的工作成功,无需要通过合作才能体现价值
- 微服务允许你利用融合最新技术
- 微服务只是业务逻辑的代码,不会和HTML、CSS或其他界面组件混合
- 缺点
- 开发人员要处理分布式系统的复杂性
- 多服务运维难度,随着服务的增加 ,运维压力也在增大
- 系统部署依懒
- 服务间通信成本
- 数据一致性
- 系统集成测试
- 性能监控