1.什么是微服务
解释什么是微服务前要了解为什么会出现微服务?
这就不得不说一下架构的演进,从单体架构——》分布式架构——》微服务。
单体架构:将业务所有功能集中到一个项目中开发,打包成一个jar包部署。
优点:1.架构简单 2.部署成本低
缺点:耦合程度高,万一动一部分代码其他代码出现问题怎么办。比如说要动订单模块,用户模块和订单模块耦合度高,我改订单模块用户模块会不会受到影响?我订单模块挂了,那么我用户模块也不能用了,这显然是不适合的,那我是不是可以考虑把业务给拆分出来?分布式架构应用而生。
分布式架构: 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发。
优点:1.降低服务耦合 2.有利于服务升级
缺点:需要考虑一下问题:
• 服务拆分粒度如何?哪些业务可以拆开,哪些业务不能拆开?• 服务集群地址如何维护?服务拆开了,怎么去维护这些业务?• 服务之间如何实现远程调用?服务和服务之间怎么进行调用?• 服务健康状态如何感知?服务调用其他服务,其他服务挂了导致自己服务挂了怎么办?
解决这些繁琐的问题,就可以考虑有没有成熟的解决方案呢,微服务就展现出来。
微服务:微服务是一种经过良好架构设计的分布式架构方案,具体就是把一个项目拆分成独立的多个服务,并且多个服务是可以独立运行的,而每个服务都会占用线程。
特征:
• 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发• 面向服务:微服务对外暴露业务接口• 自治:团队独立、技术独立、数据独立、部署独立• 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
总结:
单体架构特点?
• 简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构特点?
• 松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案
• 优点:拆分粒度更小、服务更独立、耦合度更低• 缺点:架构非常复杂,运维、监控、部署难度提高
2.什么是SpringCloud
SpringCloud不是新技术或新框架,而是一系列成熟的微服务框架组合,并基于springboot实现这些组件的自动装配。
3.两者的联系
总结:
微服务是一套分布式架构的解决方案。
SpringCloud是一系列成熟微服务框架的集合。
SpringCloud是解决微服务落地框架的一种。
4.微服务技术的对比
微服务这种方案需要技术框架来落地,比较知名的有:SpringCloud、Dubbo、SpringCloudAlibaba,其中SpringCloud和SpringCloudAlibaba都是一站式解决方案,三种技术的对比如下
一般是这几种组合:
1.SpringCloud+Feign
• 使用 SpringCloud 技术栈• 服务接口采用 Restful 风格• 服务调用采用 Feign 方式
2.SpringCloudAlibaba+Feign
• 使用 SpringCloudAlibaba 技术栈• 服务接口采用 Restful 风格• 服务调用采用 Feign 方式
3.SpringCloudAlibaba+Dubbo
• 使用 SpringCloudAlibaba 技术栈• 服务接口采用 Dubbo 协议标准• 服务调用采用 Dubbo 方式
4.Dubbo原始模式
• 基于 Dubbo 老旧技术体系• 服务接口采用 Dubbo 协议标准• 服务调用采用 Dubbo 方式
SpringCloud + Feign