微服务划分及部分解读

微服务划分及细节分析

微服务架构

微服务架构是一种系统架构的设计风格,与传统的单体式架构不同,微服务架构提倡将一个单一的应用程序拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间使用轻量级通信机制通常是 HTTP RESTFUL API)进行通讯。

通常情况下,这些小型服务都是围绕着某个特定的服务进行构建的,每一个服务只只专注于完成一项任务并把它做好,即每个模块进行分离

每个服务都能够独立的部署到各个环境中,即开发环境,测试环境,生产环境,每个服务都能独立启动或销毁而不会对其他业务造成影响

这些服务之间的交互式使用标准的通讯技术进行的,因此不同的服务可以使用不同的数据库存储技术

微服务架构和单体架构

单体架构是微服务架构出现之前业界最经典的软件架构类型,许多早期的项目采用额也是单体架构,单体架构将应用程序中所有业务逻辑都编写在一个工程下,并在一台服务器架构

在项目的初期,单体架构开发运维都有明显的优势,但随着业务复杂度的不断提高,单体架构也会出现许多弊端

  • 随着业务复杂度的提高,单体应用的代码量也会越来越大,代码的可读性,可维护性扩展性都会下降
  • 随着用户越来越多,程序所承受的并发越来越高,而单体应用处理高并发的能力有限
  • 单体应用将所有的服务都集中在同一个工程中,修改或者增加业务都可能对其他业务造成一定的影响,导致测试难度增加
不同点微服务架构单体架构
团队规模微服务架构可以将传统模式下的单个应用拆分为多个独立的服务,每个都可以单独的开发,维护和部署,每个服务从设计到开发所需团队规模小,管理成本低单独架构的应用程序通常需要一个大型团队,围绕一个庞大的应用程序工作,管理成本相对较大
数据存储方式不同的微服务可以使用不同的数据存储方式单一架构的所有模块共享一个公共数据库,存储方式相对单一
部署方式微服务架构中每个服务都可以独立的部署,也可以独立于其他服务进行扩展,如果部署得当,基于微服务的架构可以帮助企业提高应用部署的效率采用单体架构的应用程序的每一次功能更改或bug修复都必须对整个应用程序进行重新部署
开发模式在采用微服务架构的应用程序中,不同的模块可以使用不同的技术或者开发,开发模式更加灵活在采用单体架构的应用中,所有模块使用的技术或语言必须相同,开发模式受限
故障隔离在微服务架构,故障被隔离在单个服务中,避免系统的整体崩溃在单体架构中,当一个组件出现故障,故障很可能会在进程中蔓延,导致系统全局不可用
项目结构微服务架构将单个应用程序拆分为多个独立的小型服务,每个服务都可以独立的开发,部署和维护,每个服务都能完成一项特定的业务需求单体架构的应用程序,所有业务逻辑都集中在同一个工程中
微服务的特点

微服务具有以下特点

  • 服务按照业务来划分,每个服务通常只专注于某一个特定的业务,所需代码量小,复杂度低,易于维护。
  • 每个微服务都可以独立开发,部署,运行,且代码量较低,启动方便快捷
  • 采用单体架构的应用程序只要有任何的修改,就需要重新部署整个应用程序,而微服务则完美的解决了这一问题,在微服务架构中,某个微服务修改后,只需要重新部署这个服务即可,不需要重新部署整个程序
  • 微服务具备良好的扩展性,随着业务的不断增加,微服务的体积和代码量都会急剧膨胀,此时我们可以根据业务将微服务再次拆分,除此之外,当用户量和并发量增加时,我们还可以将微服务集群化部署,从而增加系统的负载能力
  • 微服务能够与容器Docker配合使用,实现快速迭代,快速构建,快速部署
  • 微服务具有良好的故障隔离能力,当应用程序中的某个微服务发生故障时,该故障会被隔离在当前服务中,而不会波及到其他微服务造成整个系统的瘫痪
  • 微服务系统具有链路追踪的能力
微服务框架

微服务框架是一种系统架构的风格和思想,想要真正的搭建一套微服务系统,则需要微服务康佳的支持,随着微服务的流行,很多编程语言都相继推出了他们的微服务框架

Java微服务框架
  • SpringCloud:他能够基于REST服务来构建服务,帮助架构师建出一套完整的微服务技术生态链
  • Drropwizard:用于开发高性能和Restful的Web服务,对配置,应用程序指标,日志记录和操作工具都提供了开箱即用的支持
  • Restlet:该框架遵循RST架构风格,可以帮助Java开发人员的构建微服务
  • Spark:最好的Java微服务框架之一,该框架支持通过java8和kottlin创建微服务架构的应用程序
  • Dubbon:阿里巴巴开源的分布式服务治理框架
Go微服务框架
  • Go语言中的微服务框架较少,使用的较多的是GoMicro,他是一个RPC框架具有负载均衡,服务发现,同步通信,异步通讯和消息编码等功能
python微服务框架
  • python中的微服务框架主要有Flask,Falcon、bottle、Nameko和CherryPY

SpringCloud分析

SpringCloud是一款基于SpringBoot实现的微服务框架,SpringCloud源于Spring社区,主要是Pivotal和Netfix两大公司提供技术迭代和维护

随着微服务的火爆流行,国内各大互联网公司都相继分享了他们在微服务的框架中,针对不同场景的各种问题给出解决方法和开源框架

  • 服务治理:阿里巴巴开源的Dubbon和当当网的Dubbox、NetFix的Eureka以及Apache的Consul等
  • 分布式配置管理:百度的Disconf、Netfix的Archaius、360的QConf,携程的Apollo以及SpringCloud的Config等
  • 批量任务:当当网的Elastix-job,Linkedln的Azkaban以及SpringCloud的Task等
  • 服务跟踪:京东的Hydra、springCloud的Sleuth以及Twitter的Zipkin

SpringCloud被称为构建分布式微服务系统的全家桶,他并不是某一门技术,而是一系列微服务解决方案和框架的有序集合,他将市面上成熟的,经过验证的微服务框架整合起来,并通过SpringBoot的思想进行再封装,屏蔽掉其中复杂的配置和实现原理,最终以开发人员提供的一套简单易懂易操作和易维护的分布式系统开发工具包

SpringCloud中包含了spring-cloud-config、spring-cloud-bus等近20个子项目、提供了服务治理、服务网关、智能路由、负载均衡、断路器、跟踪监控、分布式消息队列、配置管理等领域的解决方案

SpringCloud并不是一个拿来即用的框架,他是一个微服务规范,并有以下2代实现:

  • 第一代:spring cloud nettfix
  • 第二代: spring cloud alibaba

SprngCloud 常用组件

SpringCloud 包括了Spring cloud gateway、SpringCloud Config,Spring cloud bus 等20个组件

这些组件提供了服务治理、服务网关、智能路由、负载均衡、熔断器、跟踪监控、分布式消息队列、配置管理等领域的解决方案

SpringCloud的常用组件如下

SpringCloud 组件描述
Spring Cloud Netlfix EurekaSpring Cloud NetFix中的服务治理组件,包含服务注册中心、服务注册和发现机制的实现
Spring Cloud Netfix RibbonSpring Cloud Netfix中的服务调用和客户端负载均衡组件
Spring Cloud Netfix Hystrixspring cloud netlfix的容错管理组件,为服务中出现的延迟和故障提供最强大的容错能力
springCloud Netfix Feign基于Ribbon和Hystrix的声明式服务
Spring Cloud netfix ZuulspringCloud Netfix中的网关组件,提供了智能路由,访问过滤等功能
Spring cloud netfix gateway一个基于spirng 5.0,spring boot2.0和Project Reactor等技术开发的网关框架,它使用filter链的方式提供了网关的基本功能,例如安全、监控/指标和限流等操作
spring cloud configspring cloud 的配置管理工具、支持使用git存储配置内容,实现应用配置的外部化存储,并支持在客户端对配置进行刷新,加密。解密等操作
Spring cloud busspring cloud的事件和消息总线,主要用于在集群中传播事件和状态变化,以触发后续的处理
spring cloud Streamspring cloud 的消息中间件组件,他集成了apache Kafka和Ribbitmq等消息中间件,并通过定义绑定器作为中间层,完美的实现了应用程序与消息中间件之间的隔离,通过向应用程序暴露进行统一的Channel通道,使得应用程序下不需要骄傲率各种不同的消息中间件实现,就能轻松的发送和接受消息
spring cloud steuthspring cloud 分布式链路跟踪组件,能够完美的整合Twitter的Zipkin
Spring Boot 和 Spring Cloud 的区别与联系

Spring Boot 和 Spring Cloud 都是 Spring 大家族的一员,它们在微服务开发中都扮演着十分重要的角色,两者之间既存在区别也存在联系。

1. Spring Boot 和 Spring Cloud 分工不同

Spring Boot 是一个基于 Spring 的快速开发框架,它能够帮助开发者迅速搭 Web 工程。在微服务开发中,Spring Boot 专注于快速、方便地开发单个微服务。

Spring Cloud 是微服务架构下的一站式解决方案。Spring Cloud 专注于全局微服务的协调和治理工作。换句话说,Spring Cloud 相当于微服务的大管家,负责将 Spring Boot 开发的一个个微服务管理起来,并为它们提供配置管理、服务发现、断路器、路由、微代理、事件总线、决策竞选以及分布式会话等服务。

2. Spring Cloud 是基于 Spring Boot 实现的

Spring Cloud 是基于 Spring Boot 实现的。与 Spring Boot 类似,Spring Cloud 也为提供了一系列 Starter,这些 Starter 是 Spring Cloud 使用 Spring Boot 思想对各个微服务框架进行再封装的产物。它们屏蔽了这些微服务框架中复杂的配置和实现原理,使开发人员能够快速、方便地使用 Spring Cloud 搭建一套分布式微服务系统。

3. Spring Boot 和 Spring Cloud 依赖项数量不同

Spring Boot 属于一种轻量级的框架,构建 Spring Boot 工程所需的依赖较少。

Spring Cloud 是一系列微服务框架技术的集合体,它的每个组件都需要一个独立的依赖项(Starter POM),因此想要构建一套完整的 Spring Cloud 工程往往需要大量的依赖项。

4. Spring Cloud 不能脱离 Spring Boot 单独运行

Spring Boot 不需要 Spring Cloud,就能直接创建可独立运行的工程或模块。

Spring Cloud 是基于 Spring Boot 实现的,它不能独立创建工程或模块,更不能脱离 Spring Boot 独立运行。

Spring Cloud 版本选择

在使用 Spring Boot + Spring Cloud 进行微服务开发时,我们需要根据项目中 Spring Boot 的版本来决定 Spring Cloud 版本,否则会出现许多意想不到的错误。

Spring Boot 与 Spring Cloud 的版本对应关系如下表(参考自 Spring Cloud 官网)。

Spring CloudSpring Boot
2020.0.x (Ilford)2.4.x, 2.5.x (从 Spring Cloud 2020.0.3 开始)
Hoxton2.2.x, 2.3.x (从 Spring Cloud SR5 开始)
Greenwich2.1.x
Finchley2.0.x
Edgware1.5.x
Dalston1.5.x
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值