一、什么是微服务
提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务之间互相协调,互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制与互相沟通(一般基于HTTP的RESTFULL API),服务独立的部署,独立的发布。其中Dubbo是基于RPC远程过程调用。
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底的去耦合,每一个微服务提供单个业务功能的服务,一个服务就只做一件事,从技术的角度看就是一种小而独立的处理过程,类似进程的概念,能够自行单独启动或销毁,拥有自己独立的数据库。
让特定专业的模块来做特定专业的事情。
二、微服务与微服务架构
微服务:强调的是一个一个的个体,每一个个体完成各自具体的任务或者功能。例如去医院看病的一个科室一样:挂号——具体的科室——缴费——取药——离开。每一个步骤都是独立的个体功能,互不相扰,又相互联系。
微服务架构:强调的是一个整体,它是由一个个不同功能的微服务组合而成,用某种方式将其串联起来(HTTP API)。例如中国是一个微服务架构,那么24个省份就是一个个微服务,它们都通过汉语,普通话进行紧密的串联起来,对外形成一个庞大的国家(架构)。
微服务相对微服务架构是一个微观的概念,反之微服务架构相对于微服务就是一个宏观的概念。
三、微服务的优缺点
1.优点:
a.每个服务足够内聚,足够小,代码容易理解,能聚焦一个指定的业务功能或业务需求。
b.特定的服务专一的做特定的事情,开发简单,效率提高。
c.微服务是松耦合的,独立开发,独立部署,独立上线。
d.能够使用不同的语言开发。
e.易于和第三方集成。
f.微服务只是业务逻辑代码,不会和html,css或其他界面混合。
g.每个微服务既可以有自己的数据库,也可以有统一的数据库。
and so on。。。
2.缺点:
a.开发人员要处理分布式系统的复杂性。
b.运维难度和压力的增大。
c.系统部署依赖。
d.服务间的通信成本。
e.数据的一致性。
f.系统集成测试。
g.性能监控的难度和压力的增加。。。
四.微服务相关技术栈
服务开发——————————————SpringBoot,Spring,SpringMVC
服务配置与管理———————————Netflix公司的Archaius,阿里的Diamond等
服务注册与发现———————————Eureka,Consul,zookeeper等
服务调用——————————————Rest,RPC,gRPC
服务熔断器—————————————Hystrix,Envoy等
负载均衡——————————————Ribbon,Nginx
服务接口调用————————————Feign等
消息队列——————————————Kafka,RabbitMQ,ActiveMQ等
服务配置中心管理——————————SpringCloud Config,Chef等
。。。大约有二十几种的技术栈。
五、SpringCloud是什么?
根据官网解释:SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务官网,负载均衡,熔断器等组件。
SpringCloud通过springBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出来一套简单易懂,易部署和易维护的分布式系统开发工具包。即微服务全家桶,是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体。
六、SpringCloud与SpringBoot的关系
springboot专注于快速便捷的开发单个个体微服务。
springcloud是关注全局的微服务协调整理治理框架,将一个个springboot单体微服务整合管理起来。为各个微服务之间提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。
总结一句话:SpringBoot可以离开SpringCloud独立使用,开发项目。但SpringCloud必定依赖于SpringBoot。即Springboot专注于快捷,方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。