微服务技术栈

认识微服务

  • 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构,这些架构之间有怎样的差别呢?

导学:了解微服务的优缺点

单体架构

**单体架构:**将业务的所有功能都集中在一个项目中开发,打成一个包部署。
单体架构

单体架构的优缺点如下:

优点:

  • 架构简单
  • 部署成本低

缺点:

  • 耦合度高(维护困难、升级困难)

分布式架构

分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务
分布式架构

分布式架构的优缺点:

优点:

  • 降低服务耦合
  • 有利于服务升级和拓展

缺点:

  • 服务调用关系错综复杂

什么是微服务?

  • 微服务它一种其实是分布式架构的一种,所谓分布式架构就是要把服务做拆分,而拆分的过程中其实会产生各种各样的问题需要去解决,而Spring Cloud其实仅仅是解决了服务拆分时的服务治理问题,至于其它的一些分布式的更复杂的一些问题,并没有给出解决方案,所以一个完整的微服务技术,要包含的不仅仅是Spring Cloud。
  • 微服务要做的第一件事情就是拆分,因为传统的单体结构,所有的业务功能全部写在一起,随着业务越来越复杂,代码也变得耦合的越来越多,将来你想升级、维护就会很困难,所以像一些大型的互联网项目,就必须去做拆分,微服务在做拆分的时候,会根据业务功能模块把一个单体的项目拆分成许多个独立的项目,每个项目完成一部分业务功能,将来独立开发和部署,我们把这一个独立的项目称为一个服务,一个大型的互联网项目往往会包含数百甚至上千的服务,最终形成一个服务集群,而一个业务往往需要有多个服务共同来完成,比如说一个请求来了,它可能先去调了服务A,而服务A可能又调了服务B,然后又去调了服务C,当业务越来越多,越来越复杂的时候,这些服务之间的调用关系就会越来越复杂,这么复杂的一个调用关系想靠人去记录和维护,这是不可能的,所以在微服务里,一定会有一个组件,叫做注册中心:它可以去记录微服务中每一个服务的IP、端口以及它能干什么事这些信息,当有一个服务需要调用另外的服务时,它不需要自己去记录对方的IP,只需要去找注册中心就行了,去注册中心去拉取对应的服务信息,同时随着服务越来越多,每一个服务都有自己的配置文件,将来如果要更改配置,难道我们逐一去修改吗?这就太麻烦了,所以在微服务里还会有一个配置中心, 它可以去统一的管理整个服务群体成千上百的这个配置,如果以后有配置需要变更,只需要去找到配置中心就可以了,它会去通知相关的微服务,实现配置的热更新,当我们的微服务运行起来以后,用户就可以来访问我们了,但这个时候,还需要有一个网关组件,因为你这里有这么多的微服务,用户怎么知道该访问哪一个呢?而且也不是说你随便什么人都能来访问我们的服务吧,所以我们的服务网关一方面就是对用户身份对校验,另一方面可以把用户的请求路由到我们的具体的服务,当然在路由过程中,也可以去做一些负载均衡,而这时候呢,服务进入到你的请求去处理业务,该访问数据库的时候就去访问数据库,最后再把查询到的数据返回给用户。将来数据库肯定要做集群,但是你集群再庞大,也不可能有用户多把,所以数据库将来肯定无法抗住高并发的场景,因此还会加入缓存,缓存就是把数据库数据放入到内存当中,内存查询效率肯定要比数据库快很多,而且这种缓存还不能是单体缓存,为了应对高并发,还要做成分布式缓存,也是一个集群,用户请求先到缓存,缓存未命中,再去查询数据库。以后我们的业务中还会有一些复杂的搜索功能,简单查询可以走缓存,一些海量数据的复杂的搜索、统计和分析,缓存也做不了,这个时候就需要用到分布式搜索功能,数据库将来主要的职责其实就是做一种数据的写操作,还有一些事务类型、对数据安全要求较高的一些数据存储,最后在微服务里边,还需要一种异步通信的消息队列组件,因为对于这种分布式的服务或者微服务里面,它的业务往往会跨越多个服务,一个请求来了,先调的服务A,A再调B,B再去调C,整个业务的链路就很长,调用时长就会等于每个服务的执行时长之和,所以其实性能是有一定的下降的,而异步通信的意思就是,请求来了,我调了服务A,服务A我不是去调你服务B和C,而是通知你们,发一条消息,你们两个赶紧干活去,于是,那两个哥们去干了,而服务A直接结束了,所以它的业务链路就会变短了,响应时间也缩短了,自然吞吐能力也就变强了,所以异步通信可以提高我们服务的并发,在一些类似于秒杀这样的高并发场景下就可以去利用了。
  • 当然,我们如此庞大和复杂的一个服务,在运行的过程当中,如果出现了什么问题,就不太好排查,所以在微服务运行过程中,我们还会引入两个新的组件来去解决服务的异常定位,第一个是分布式日志服务,它可以去统计整个集群当中成千上百的这些服务,它们的运行日志,统一的去做一个存储、统计和分析,将来如果出现问题,就比较好定位了。
  • 而且还有第二个东西,叫做系统监控和链路追踪,它可以去实时监控我们整个群体中每一个服务节点的一个运行状态、CPU的负载、内存的占用等等的情况,一旦出现任何的问题,直接可以定位到具体的某一个方法(栈信息),那么你就能够很快速的定位到异常所在了。
  • 那么如此庞大、复杂的一个微服务集群,
相关推荐
网络安全(king)2 小时前
网络安全知识:网络安全网格架构
安全·web安全·架构
东风微鸣4 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
落落落sss5 小时前
MongoDB
数据库·windows·redis·mongodb·微服务·wpf
Smile_Gently6 小时前
Docker
云原生·eureka
黄名富7 小时前
Spring Cloud — 深入了解Eureka、Ribbon及Feign
分布式·spring·spring cloud·微服务·eureka·ribbon
Diligent_lvan7 小时前
聊聊istio服务网格
云原生·istio
小丑西瓜6667 小时前
分布式简单理解
linux·redis·分布式·架构·架构演变
企鹅侠客7 小时前
kube-proxy怎么修改ipvs规则?
云原生·kubernetes·kubelet
仇辉攻防8 小时前
【云安全】云原生- K8S 污点横移
web安全·网络安全·云原生·容器·kubernetes·k8s·安全威胁分析
LUCIAZZZ8 小时前
SkyWalking快速入门
java·后端·spring·spring cloud·微服务·springboot·skywalking