微服务是一种架构风格(千万别理解成微服务就是一种组件、框架)。由一系列微小的服务共同组成,跑在自己的进程里,每个服务为独立的业务开发,独立部署,分布式的管理。
一.架构演进
- 单一应用架构
- 垂直应用架构
- 分布式服务架构
- 流动计算架构
1.单体架构
- 什么是单体架构?简单理解就是最终打成一个war包的就是单体架构。
- 单体架构的优点
- 容易测试,在本地可以启动完整系统
- 容易部署,直接打成war包放到Web容器中就可以运行
- 单体架构的缺点
- 开发效率低,所有开发人员提交到一个代码上会导致开发人员互相等待,或者代码冲突
- 代码维护难,尤其是新人来的时候,代码都写到一起,新人不知该如何下手
- 部署不够灵活,构建时间特别长,有任何代码的修改需要构建整个项目
- 稳定性不高,一个小问题会让整个系统挂掉
- 扩展性不够,无法满足高并发的业务需求(如在单体架构中,有两个模块一个是商品详情页面,一个是商品购买页面,详情页的访问并发需要高于购买页,这在单体架构的应用中很难实现;但微服务中,两个模块独立部署,将详情服务部署到十台服务器,购买服务部署到五台服务器,就很容易做到这一点)
2.分布式架构
- 什么是分布式架构?旨在支持应用程序和服务的开发,可以利用物理架构由多个自治的处理元素,不共享主内存,但通过网络发送消息合作。
- 多个自治的处理元素:即多节点(分布式系统和集群都是多节点的)。那么如何理解分布式和集群呢?厨房里面有两个厨师,一个洗菜,一个炒菜,互不干扰,称为分布式;如果两个都炒菜成为集群。
二.微服务介绍
1.微服务架构的基础框架/组件
- 服务注册发现
- 服务网关(Service Gateway)[对用户进行控制,如用户认证、反爬虫等等]
- 后端通用服务(也称中间层服务Middle Tier Service)[后端服务在启动时可以将地址信息注册到服务注册表中]
- 前端服务(也称边缘服务Edge Service)[查询注册表,发现并调用后端服务;主要作用在于对后端服务进行聚合(对多个API调用逻辑进行聚合,从而减少客户端的请求数)和裁剪(根据不同的需求返回不同的数据)后,暴露给外部不同设备]【聚合和裁剪都是前端服务来做的】
2.国内微服务两大配方
- 阿里系
- Dubbo:进行服务化治理
- Zookeeper:做服务注册中心
- SpringMVC or SpringBoot
- …
- SpringCloud栈
- Spring Cloud Netflix Eureka
- Spring Boot
- …
3.SpringCloud是什么
- SpringCloud是一个开发工具集,含有多个子项目
- 利用SpringBoot的开发便利性实现了很多功能,如服务注册与发现、负载均衡、数据监控、RestfulAPI发布等等
- 主要是基于对Netflix开源组件的进一步封装(Netflix是公认的大规模生产级微服务做的最杰出的实践者)
- 最大的作用:简化了分布式开发