微服务是指使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且它们可以通过自动化的方式部署
微服务的特征
- 单一职责
只把紧密相关的服务放在一起,无关的业务独立出去;
例如:订单和支付、登录和注册、邮件、短信分别放在一起 - 轻量级通讯
定义:与平台无关,与开发语言无关
例如:Http
非轻量级:Java的RMI,.Net的Remoting - 隔离性
每个微服务运行在自己的进程中,不会相互干扰 - 有自己的数据
业务数据的独立性,每个微服务都有自己独立的存储系统 - 技术多样性
可选择自己熟悉的语言(Java、C、Golang、Python),提供api就可以了
微服务诞生的背景
- 互联网的快速发展
需求变化快、用户数量变化快 - 敏捷开发,精益方法深入人心
用最小的代价做最快的迭代,频繁修改、测试、上线 - 容器技术的成熟
docker容器
微服务架构图
假定业务场景
— 在线教育网站
- 用户可以注册、登录,获取用户信息
- 发短信、邮件功能
-
查看课程列表和课程的基本CURD
单体架构图:
微服务架构图:
优势
- 独立性
每个服务都是单独运行,与其他服务互不影响,数据库也独立开来,修改的时候就不用考虑会影响其他模块 - 敏捷性
功能单一,有清晰的API - 技术栈灵活
每个微服务都可以有自己独立的技术栈 - 高效团队
每个团队只负责自己的服务
不足
- 额外的工作
考虑哪些服务放在一起,哪些服务需要拆分,不宜太大也不宜太小 - 数据一致性
尽量保证对数据库的连表操作,数据表尽量搭在同一个微服务内
单体:只有一个数据库,可采用事物来进行多表级联修改、删除,很容易达成一致性 - 沟通成本
想修改某个不是本组负责的服务,需要与其他组进行沟通处理