微服务介绍

我们先了解一下系统架构的演变过程:

1.单一架构(三层结构):

表示层:用于显示数据和接收用户输入的数 据,为用户提供一种交互式操作的界面,前端页面,如html,jsp。

业务逻辑层:无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。

数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。

优点:

  • 开发简单直接,集中式管理

  • 基本不会重复开发

  • 功能都在本地,没有分布式的管理开销和调用开销

缺点:

  • 开发效率低:所有的开发在一个项目改代码,递交代码相互等待,代码冲突不断

  • 代码维护难:代码功能耦合在一起,新人不知道何从下手

  • 部署不灵活:构建时间长,任何小修改必须重新构建整个项目,这个过程往往很长

  • 稳定性不高:一个微不足道的小问题,可以导致整个应用挂掉

  • 扩展性不够:无法满足高并发情况下的业务需求

2.垂直应用架构

  • 用拆成独立的应用模块。
  • 各个应用模块独立部署,并在负载均衡通过 session 保持解决应用模块的水平扩展问题。
  • 数据库拆分成不同数据库,由对应应用访问。
  • 域名拆分。
  • 动静分离。

优点:

  • 支持大并发
  • 支持水平扩展

缺点:

  • 应用之间耦合度高,相互依赖严重。
  • 数据复制问题严重,造成大量数据不一致。
  • 系统扩展困难。
  • 各个开发团队各自为战,开发效率低下。
  • 测试工作量巨大,发布困难。

3.微服务化架构

 什么是微服务:

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

怎么架构微服务:

在微服务架构设计中,需要抽象出一些核心问题来统一解决,有如下几个问题:

1.服务注册中心:主要实现服务注册与服务发现。微服务架构由一组独立的微服务组成,这些微服务之间存在一种发现机制,目前我们通过服务注册与发现来让微服务可以感知彼此,微服务框架在启动的时候,将自己的信息注册到注册中心,同时从注册中心订阅自己需要引用的服务。

2. 统一的接入服务接口:由于把UI和后端服务分离。API Gateway是一个网关服务器,也可以说是进入系统的唯一节点。这跟面向对象设计模式中的Facade模式很像。API Gateway封装内部系统的架构,并且提供API给各个客户端。API Gateway还可能有其他功能,如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。

3. 服务的容错和负载均衡保证服务的高可用:为了保证微服务的高可用,每个微服务一般会有多个实例服务提供服务,此时需要客户端在进行服务的负载均衡;目前微服务框架中,现支持常见的负载均衡策略,如随机,轮训,hash,权重,连接数,缺省是根据连接数,连接数越少,优先级越高。

4.服务的容错可以保证核心服务的连续性:在调用服务集群的时候,如果一个微服务调用异常,如超时,或者发生连接异常,网络异常,则根据容错策略进行服务容错,如果连续失败多次,则需要直接熔断,不再发起调用,这样可以防止一个服务异常拖垮所有依赖它的服务。

5. 服务的限流和降级等措施可以保证核心服务的稳定性:随着访问量的增加,微服务架构设置了一个系统能够处理的极限阀值,超过这个阀值的请求则直接拒绝。同时,为了保证某些核心服务可用,需要对某些非核心业务进行降级。这些操作可以自动降级也可以人工降级。

6.安全控制和权限验证:保障系统的安全。微服务架构推荐采用token机制保证微服务的安全。用户在登录的时候会颁发给用户一个token,用户每次访问平台的时候,需要传递此token,后台校验此token的合法性,如果合法则可以访问,如果没有token或者token不合法,则禁止访问。

7.支持多种通讯方式:在微服务架构下,一般采用轻量级的方式进行通讯,每个微服务都统一对外暴露RESTFul服务,无论是前端调用后端服务,还是后端服务间的调用,都统一走RESTFul,这样统一了协议栈。

8. 日志和监控管理:在微服务框架中,所有的系统调用边界、请求接入接出边界,都存在统一的日志埋点,这些日志埋点和监控系统对接,可以方便的查看系统的运行各项指标,同时也可以根据日志跟踪到一个服务从前到后的整个调用链路。

9.统一配置管理:统一的配置服务器为各应用的所有环境提供了一个中心化的外部配置。这样可以简化很多开发过程中的繁琐工作。

10.CI/CD自动化:快速完成源码构建、镜像打包、应用部署,实现微服务的高效运营。

优点:

复杂度可控:在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。

独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。

技术选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,故需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。

容错:当某一组件发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

扩展:单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。

缺点:

多服务运维困难

服务间通信成本

数据一致性

性能监控困难

 

相关博客:

Spring Cloud介绍

服务注册发现-Eureka

服务调用端负载均衡——Ribbon

服务调用端代码抽象和封装——Feign

服务调用端熔断——Hystrix

服务网关-zuul

服务配置中心-spring cloud config

服务消息总线-Spring cloud bus

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haoxin963

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值