微服务了解

1、什么是微服务

微服务就是根据业务功能模块把一个单体的应用拆分成许多个独立的项目,每个项目完成一部分的业务功能,然后独立开发和部署。这些独立的项目就成为一个微服务。进而构成一个服务集群。

微服务个人理解就是将之前的单一服务架构,拆分成各个单独的服务,各个服务都是一个独立的服务,关键就是服务拆分。

为什么要有微服务?

单体架构时,想修改某个模块功能,需要将整个服务给停掉,导致全部功能不可用。

各个模块直接相互调用,造成耦合。

单体架构:

 拆分成微服务后:

好处:降低服务之间的耦合,利于服务的维护升级。

目的:有效的拆分应用,实现敏捷开发和部署

2、什么是服务注册中心

当服务之间互相调用时,由于服务地址非常多,服务与服务之间都需要记录一套要调用的服务的ip和端口的映射,当某个服务更换地址后,就需要全部更新。这样也是耦合,也不便于维护。

这时候就需要一个注册中心,用来记录每一个服务的ip,端口,服务名称以及它能够完成的功能。这样就能够使得这些服务之间在需要互相调用的时候,不用去记录要调用服务的ip、端口,而只要到注册中心去找就可以了。

常见服务注册中心:

nacos

eureka

consul

zookeeper 等

3、微服务之间的通信

微服务之间也是需要互相调用的,那么他们之间如何通信呢?

根据通信类型可以分为两种:

1、同步通信:主要方式有HTTP REST、RPC的方式。HTTP REST方式指的是使用http协议进行数据传递,数据格式是使用json格式;RPC是一种远程过程调用,消息格式是采用二进制格式。

http rest 是属于osi七层模型中的应用层,而rpc则属于传输层,所以rpc的效率要比http rest的效率更加高效。

2、异步通信:

        异步消息传递通常有两种模式,

       一种是无代理模式:指的是C端直接将消息发送给P端即可不需要得到回复,当需要P端回复时由于是异步通信,C端也不会阻塞,P端处理完后再根据接收到的信息向C端回复处理结果。这种方式比较小众主要适用于一些异步通知场景。

         另外一种就是:使用消息代理,这里需要借助一些消息中间件,比如RocketMQ、kafka等。这种方式的使用场景比较广泛,行业内有很多成熟方案。通过使用异步消息通信的方式能够很好的实现微服务的解耦。

4、宏观微服务

其实上边所说的只是微观理解的微服务,实际上微服务包括的东西远远不止这些,借用黑马程序员的一张图。

 微服务不是SpringCloud,微服务是分布式架构的一种,SpringCloud只是给出了服务拆分时服务治理的解决方案,很多其他问题并没有解决方案包含在内。

微服务第一个就是服务拆分,一般按照功能模块进行拆分成几十甚至上千的服务,形成服务集群。

服务与服务之间相互调用,形成复杂的调用关系,如果靠人来记忆或者通过硬编码写入代码,耦合度高,且不方便。所以有了服务注册发现中心,用来记录各个微服务的ip、端口、以及能干什么事。

另外每个服务都有自己配置,配置与配置直接可能也有互相关联的关系,如果一处变更,可能需要引起多处都需要修改,这时候就需要有个配置中心,来统一管理这些配置内容,做到一处修改,各个引用地方都进行变更。当有配置更改时,可以通知相应的服务,做到配置热更新,此外配置与服务分离,配置更改可以实时进行,不用等到停机之后再更新。

当用户发起请求时,由于微服务众多,用户是无法区分到底去访问哪个微服务的,同时不同的用户是不是有权限来访问这个服务,都需要服务网关来解决。服务网关主要对用户身份进行校验,同时将用户请求路由到相应的微服务,此外服务网关还会起到负载均衡的作用。

用户请求到相应服务后,会去分布式的数据库进行数据查询或记录,如果用户请求过多,为了快速响应,还需要加入分布式缓存,用户请求先查询缓存的集群,如果查不到,再去数据库集群进行查询。此外服务中如果涉及到海量搜索,就还需要专门的分布式搜索集群。

微服务集群中,一个请求可能涉及到多个服务,服务A调用B,B,调用C。。。,这样服务调用链路可能就非常长,性能会下降,这时候就需要有异步的消息队列服务,当用户调用服务A时,A通过消息队列通知其他服务,A就可以直接结束,接着处理其他事情,其他服务收到通知后去做处理,当处理结束后,再将结果通过消息队列通知调用方A,A将结果返回,这样调用链路变短了,效率也更高。

微服务集群中,这么多的服务集群,如果出现问题,该去哪个服务的哪个集群的哪个环节去查询呢?这时候我们就需要有服务调用日志,异常日志等记录,这时需要分布式的日志服务系统,来按统一的格式记录每一次请求的调用链路信息,异常日志信息等,如有异常发出告警。同时由于服务是部署在各个物理机上的,我们还需要系统监控链路追踪服务,来记录各个物理机的cpu占用,内存,吞吐等信息,当机器出现问题时,可以进行查询和定位问题。

如此多的服务,每天可能有多次的打包部署等工作,这个也不能靠人工来完成,所以需要jenkins、kubernetes、rancher等技术来进行持续集成,自动化打包和部署

微服务的技术除了上述内容,还有各种问题都需要来进行解决,比如这一整套的微服务技术栈统称为微服务。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值