谈谈微服务架构的诞生历程与理解
对于微服务,马丁福勒在2014年发表了一篇关于微服务的博客,感兴趣的读者可以去看看。
博客
微服务是一种架构风格,是以开发一组小型服务的方式来作为一个独立的应用系统,即每个服务都运行在自己的进程中,服务之间采用轻量级的HTTP通信机制(通常是采用HTTP的RESTFUL API)进行通信。每一个服务都是根据业务来进行划分的,并且每个服务都可以独立地部署到生产环境上。最大的优势是这些服务都可以采用不同的编程语言编写,且可以使用不同的数据存储技术,即可以使用不同的数据库来存储。对这些微服务我们只需要使用一个非常轻量级的集中式管理来进行协调就可以了。
以上就是马丁福勒对微服务的描述,我对其进行了翻译并做简单说明了。
微服务因何诞生呢?
我们都知道在微服务架构之前,项目是采用单体应用架构来进行构建的;单体应用架构一个应用中包含了程序所有的功能,也就是把所有的功能模块都放在一个应用程序里面,把应用打包成一个war或jar包部署到tomcat中,通常称为就称为单体应用架构。
通过以上我们知道,单体应用架构存在诸多缺点:
- **复杂性高:**由于是单个应用,所以整个项目文件包含的模块非常多,导致模块的边界模糊、依赖关系不清晰、代码的质量参差不齐,混乱的堆在一起,使得整个项目非常复杂。以致每次修改代码,都非常小心,可能添加一个简单的功能,或者修改一个Bug都会带来隐藏的缺陷。
- **技术债务:**随着时间的推移、需求的变更和技术人员的更替,会逐渐形成应用程序的技术债务,并且越积越多。
- **阻碍技术创新:**对于单体应用来说,技术是在开发之前经过慎重评估后选定的,每个团队成员都必须使用相同的开发语言、持久化存储及消息系统。
现在我们来比较单体应用架构与微服务架构:
微服务架构的优缺点:
优点:
1. **易于开发和维护:**一个微服务只会关注一个特定的业务功能, 所以业务清晰、代码量较少。开发和维护单个微服务相对简单。
2. 单个微服务启动快
3. **局部修改容器部署:**单体应用架构只要有修改,就必须重新部署整个应用,微服务解决了这样的问题。一般来说。对某一个微服务进行修改,只需要重新部署修改的这个微服务即可。
4. **技术栈不收限制:**在微服务架构中,可以结合项目业务及团队的特点,合理的选择技术栈。
5. **按需伸缩:**可以根据需求,实现细粒度的扩展。
缺点:
1. 运维成本高:更多的服务意味着要投入更多的运维
2. 分布式固有的复杂性:使用微服务构建的是分布式系统,对一个分布式系统来说,系统容错、网路延迟、分布式事务等都会带来巨大的问题。
3. 接口调整成本高:微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有用到这个接口的微服务都需要进行调整。
说了这么多,我们来总结一下微服务架构吧。
微服务架构总结:
-
微服务的核心就是将传统的单一应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事。
-
在 IDEA 工具中使用Maven构建的一个个独立的 Module ,也就是使用Spring Boot 开发的一个个小模块就是一个个微服务,将专业的事交给专业的模块来做。比如一个大型项目可能有上百个微服务,将这些微服务集中起来构成一个大的系统,对外暴露服务进行调用与使用。
-
从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立 的数据库。
介绍微服务架构技术栈:
微服务技术维度 技术实现
服务开发 Spring Boot、Spring、Spring MVC等
服务注册与发现 Eureka、Zookeeper等
服务调用 Rest、RPC等
服务熔断器 Hystrix、Envoy等
负载均衡 Ribbon、Nginx等
服务接口调用(客户端调用服务的简化工具) Feign等
消息队列 Kafka、ActiveMQ等
服务配置中心管理 Spring Cloud Config等
服务路由 (API网关) Zuul等
服务监控 Zabbix、Nagios等
全链路追踪 Zipkin,Brave等
服务部署 Docker、OpenStack等
数据流处理 Spring Cloud Stream(Redis,Rabbit,Kafka等发送接收消息)
事件消息总线 Spring Cloud Bus
…… ……
什么是spring cloud? -
Spring Cloud,基于 Spring Boot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。
-
官方译文:构建分布式系统不用特别的复杂且避免容易出现的错误。Spring Cloud为最常见的分布式系统模式提供了一个简单和可访问的编程模型,帮助开发人员构建弹性、可靠和协调的应用程序。SpringCloud构建在
SpringBoot之上,使开发人员很容易开始工作并迅速提高生产力。
springboot快速构建一个个微服务,那么多个微服务之间该如何互通互调呢?
使用springcloud进行管理协调服务间正常互通互调,从而实现分布式微服务架构。
说明:
springcloud使用RESTFUL API实现服务之间的通信
Dubbo使用RPC实现服务之间的通信
我们在面试的时候经常会问到springboot与springcloud的关系
那么两者之间究竟是什么关系呢?
- Spring Boot 可以离开 Spring Cloud 单独使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系.
- Spring Boot 专注于快速方便的开发单个个体微服务,Spring Cloud 关注全局的服务治理框架。Spring Cloud是关注全局的微服务协调整理治理框架,它将 Spring Boot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。
springcloud目前集合了21种分布式微服务架构技术
针对微服务架构技术栈的说明,将在下文进行阐述。本文就到此结束了,感谢大家的阅读。