1、微服务的由来
微服务的提出是由James Lewis & Martin Fowler两个人提出的,他们在2014年3月25日写的《Microservices》中提出微服务的概念。
2、什么是微服务
微服务是一种架构风格,而不是某一种具体的框架,如Restful,也是一种架构风格,只是一种建议。特点如下:
- 一系列微小的服务共同组成
- 跑在自己的进程里
- 每个服务为独立的业务开发
- 独立部署
- 分布式的管理
这里需要说一下单体架构的优缺点了,当然单体架构也可以是分布式的,这里不考虑这种情况。
单体架构的优点:
- 容易测试,不需要依赖外部条件
- 部署方便,直接打成一个war包,发布在容器中
单体架构的缺点:
- 开发效率低,所有开发人员在提交、更新代码可能会出现等待或者冲突等问题
- 代码维护困难,人事的变迁,繁杂的业务代码维护,可能会导致各种问题
- 部署不灵活,构建时间长,任何细小的改动,需要重新部署
- 稳定性不高,任何一个问题会导致整个项目出现问题
- 扩展性不够,不能针对各个业务模块做出不同应对方案
3、分布式
说到微服务就不得不提分布式了,那么什么是分布式呢?
旨在支持应用程序和服务的开发,可利用物理架构,由多个自治的处理元素,不共享主内存,但通过网络发送消息合作。
—— Leslie Lamport
简而言之,分布式是多节点的,当然集群也是多节点的,二者的区别就是,一个厨房有两个人,一个洗菜,一个炒菜这个就是分布式,如果两个都是炒菜,那么这个就是集群。
4、微服务架构的基础框架或组件
说完分布式,我们需要看看微服务架构都需要哪些组件,微服务是多个微小服务通过某种机制相互之间来进行网络通信,所以需要以下组件:
- 服务注册发现,各个微小服务提供方需要注册服务才能够被服务的调用方发现
- 服务网关(Service Gateway),将自己的服务暴露出去,是服务的前段路由
- 后端通用服务,(也称中间层服务Middle Tier Service)
- 前段服务(也称边缘服务Edge Service)
5、解决微服务的两大方案
国内解决微服务拥有两大江湖流派:阿里系、SpringCloud栈。
阿里系:
- Dubbo,服务化治理
- Zookeeper,服务注册中心
- Spring MVC or SpringBoot
- ···
SpringCloud全家桶:
- Spring Cloud Netflix Eureka
- SpringBoot
- ···
6、Spring Cloud
在这里我只说SpringCloud,SpringCloud是一个开发工具集,包含了众多优秀的开源框架,SpringCloud是利用SpringBoot进行开发,主要是基于对Netflix开源组件进一步封装,SpringCloud极大地简化了分布式开发,降低了分布式开发的门槛。