系统架构

微服务---分布式系统的延伸,如何做服务拆分和系统设计以及架构

2020-12-12  本文已影响0人  singleZhang2010

概述

微服务架构只是将一个单体应用程序拆分为多个相对独立的服务,每一个服务拥有独立的进程和数据,每一个服务都是以轻量级的通信机制进行交互的,一般为HTTP API(现今最流行的是REST风格)。
一般来说,这些服务都是围绕着业务模块来建设的,是独立的产品,因此完全可以独立地自动化部署和维护,这样更加有利于我们进行更小粒度的开发、维护和部署。这些服务可以由不同的语言编写,采用不同的数据存储,最低限度地集中管理。

微服务是一个模糊的概念,而不是一个标准,没有明确的定义。微服务它属于分布式范畴,我们可以把微服务看成是分布式系统设计和架构的理念之一,并并不是说能解决所有的分布式系统的问题,它只是寻求一个平衡点,让架构师能够更为简单、容易地构建分布式系统。

微服务设计原则

要架构并开发一个微服务系统,首先要考虑的是服务拆分方法,其次是微服务的设计和整体架构。

服务拆分

服务拆分是微服务系统开发的第一步,也是最重要的一步。
首要考虑的是按业务拆分,这就要求架构师,先分析业务需求,做好业务边界,然后再按照业务模块对系统进行拆分。
服务拆分需要考虑以下几点:

系统设计

当服务划分好之后,就能清晰得看到各个独立的服务了,接下来进入系统设计。
系统设计中需要考虑以下几点:

微服务架构

接下来开始系统架构,如图


微服务系统架构

图中,我们会用到许多组件,来帮我们组成一个微服务系统

API网关:API网关可以实现路由、限流和降级的功能
服务和实例:服务是根据服务拆分方法得到的一个独立的产品,它有明确的业务规则、边界和接口。服务是由多个实例来完成的,多个实例可以满足高可用和高性能的需求
服务调用:各个服务通过服务调用来完成企业的业务。在一般情况下,我们可以使用基于REST风格的服务调用(如Ribbon和OpenFeign),它具备更高的可读性和独立性,但是性能不高,如果需要提升性能的,还可以考虑远程调用(RPC)技术

微服务系统如何优化提高性能?

优化主要集中在以下几点:

  1. 数据库优化
    主要对索引、SQL和锁的优化,以及数据库读写分离,分库分表等
    索引:不是越多越好,数据量少的表可以不用索引,一般来说,表主要是考虑在常用的检索字段上添加索引,每表索引应该在5个以下,索引只需要满足大部分的查询即可,而不是全部查询
    SQL:SQL语句的有这里不铺开叙述
    锁:有些sql会使表锁定,比如update语句,需要优化sql语句避免表锁定。
    数据库读写分离:参考《如何搭建经典的MySQL 主从复制架构
    分库分表:参考《分布式系统中,数据库的分表、分库和分区基本概念梳理
    Springboot整合 ShardingSphere 实现分库分表
  2. 使用缓存
    缓存一般是将数据存放在内存中,而数据库的数据却存放在磁盘中,内存的速度是磁盘的几倍到几十倍,所以如果大部分的数据是从内存读取,就能够显著提升性能。一般我们会选择Redis作为缓存数据存储服务。

3.服务调用优化
对于性能要求高的服务,可以采用RPC替代REST调用

  1. 动静分离
    把常常访问的静态内容,存储于CDN服务器上

微服务系统如何保证服务高可用?

在高并发出现各种不稳定因素时,需要使用一定的技术手段,保证服务的可用性。目前流行的方法有限流和服务降级、隔离术、网关过滤和断路器。

  1. 限流和服务降级
    Spring cloud Gateway结合 Alibaba Sentinel

  2. 隔离术
    隔离术是处理高并发高的一种常用方法。隔离分为物理隔离和逻辑隔离两大类。
    机房隔离就属于物理隔离。目前主要用的是线程隔离,可采用组件有:Resilience4j(舱壁)

  3. 网关过滤
    网关过滤也是常用的处理高并发的技术之一,通过它可以区分请求的有效性。
    判断请求是否有效的办法,常见的有这么几种:验证码(如图片验证码、短信验证码和拖动验证码等)、用户黑名单、限制用户单位时间戳的请求数、实名制、区分僵尸用户和IP封禁等。
    一般,可以使用redis 存储ip黑名单,然后验证过后拒绝请求。

  4. 断路器
    因服务依赖引发的服务器雪崩现象,在高并发时,更容易产生这个现象,因此,往往还需要使用断路器,保护那些可能引发问题的服务调用。

总结

微服务作为近几年的新潮技术,席卷了整个IT行业,笔者也是因为微服务而接触了SpringBoot,开启了SpringCloud的学习。

上一篇下一篇

猜你喜欢

热点阅读