Java微服务学习路线,启发学习思路,不要死磕

前言

今天讲讲大家都在搞的微服务框架,其实我们一搜都能搜到的,什么SpringCloud的五大组件,然后大家就开始埋头搭环境,最后费了半天功夫能跑了,但实际上对于微服务的理解还是浅尝辄止,今天我们就来缕一缕咱们的微服务的学习思路。
我也没学多久,如果有什么不对的地方,欢迎大家交流。

微服务发展过程

如果聊到计算机或者准确点说JAVA后端的学习路线,那扯得就大了,网上有很多的学习路线思维导图,咋一看很全面,什么计算机基础什么Linux等等。怎么说呢,对于我而言很难持续带着激情学习,学着学着就没劲了。就像等鸡吃完米,等狗舔完面,等火烧断锁表情包里面的狗,所以我们学习某个东西的话可以通过问题去深入地探究。
举个例子,学习设计模式的时候,我之前学的时候就是照着例子敲代码,虽然当时敲出来了可是过了一段时间后我就全忘了。但是呢,在工作中,有次有个需求来了,我自个写完后代码写得很不优雅,后面要改就用到了设计模式中地责任链模式,这时候我就需要去实现责任链模式,然后查资料写代码,最后我掌握了责任链模式。因为我从问题出发,有正儿八经的有思考如何具体的实现,最终解决了问题,同时我掌握了所不熟悉的东西。同理,我们学习微服务也是同样的道理,为啥就用到Feign呢?为啥要APM呢?为啥大家都追求Istio呢?带着问题去学习远比闷头搭环境来得高效。
Java微服务学习路线,启发学习思路,不要死磕_第1张图片
从单体服务到微服务,Java部署服务的思维方式发生了很大的变化,这里我们直接从微服务的开始讲起。下面的图很好的概况了微服务的发展,发展大致分为三个阶段。
Java微服务学习路线,启发学习思路,不要死磕_第2张图片

服务满足基本的功能

系统按照功能的划分,拆分成一个一个的微服务,那么从一个微服务到另一个微服务的调用我该怎么实现呢?

  • 服务调用ip+port
    我要调用另一个服务,我只需要知道服务的ip和端口就可以找到这个服务了。那么我的调用方式是什么呢?方式不外乎有http和rpc,对应的框架是有thriftdubborest
  • 服务注册与发现
    由上一步我们已经实现了最基本的服务器调用,实际上我们不会说通过ip+port的方式去调用服务,更多的是服务名➕接口的形式。那么我们需要一个注册中心统一管理服务的注册发现,那么就有zookeepereurekaconsul等等。
  • 负载均衡
    生产上的服务往往会部署多个节点,从注册中心获取是一个服务列表,我们需要选择合适的负载均衡算法,所谓的负载均衡算法无非是怎么从列表中选中一个服务,最简单的就是轮询,每次调用都是下一个服务,还有加权等等。

服务治理全家桶

从第一步开始我们就能做到最基本的微服务的实现,但是随之而来就会带来很多问题。
服务配置很多,无法统一管理 ----> 引入配置中心,例如携程的ApolloSpringCloud Config
生产环境一般是隔离的,日志如何收集,如何快速查询 ----> ELK搭建
服务越来越多,调用链越来越长,如何快速定位问题所在服务 ----> 也就是所谓APM,例如Skywalking
在生产环境上,服务的状态是未知的,请求量或者接口的TPS等等 ----> 服务监控报警,常见的是Premetheus+Granfa组合
微服务 调用链越来越长的情况下,如果某个微服务出了问题可能会导致服务的雪崩问题,那就要对服务进行降级或者熔断 ----> 熔断限流,常见的是Hystrix

容器化&服务网格

经过上面短短的两步操作,我们长舒一口气,天杀的终于搞出个无敌的微服务框架了,任何问题都不在怕了。可惜技术是不停发展的,尤其是搞计算机的。我们服务都是部署在物理机上,随着容器概念普及和Dock技术的运用,部署服务基本全部容器化了。(这个过程其实我感知不是很强,因为毕业一到公司,公司从开发环境到生产环境都是容器化了)
然后呢,大牛们又提出一个服务网格的概念。为什么会提出这个概念呢?其实我们第二步服务治理做的所有工作都是为了微服务能够正常运行的,但同时我们发现业务逻辑和服务治理逻辑过于耦合了,就像下图所展示的一样。
Java微服务学习路线,启发学习思路,不要死磕_第3张图片
下面的图就是在服务网格实现后,业务研发团队和基础架构研发团队可以分开进行。
Java微服务学习路线,启发学习思路,不要死磕_第4张图片

总结

呼呼~~终于讲完了。开始学时我就很迷茫,因为太多的要学了,微服务还没整明白,容器化K8s等等就来了。后面我才明白,这么多可能一下子学不完的,对于Java初学者而言,没必要上来整微服务全家桶,先从服务治理调用开始学起,我指的不是搭个环境,跑个demo就完事了的那种。例如注册中心采用的是zk,那么zk的集群模式你得知道把,如何注册服务到zk上,如何监听zk上节点的变化等等。所以把服务治理的某个功能吃透了,再去学其他的内容远比搭个环境有用的多。而且有些组件是运维同学去搭建的,你说你一个开发花大功夫去学这些内容其他在我看来没有太多的必要。
后面我也没有讲的太详细,因为服务治理组件每一个拉出来都是要讲很久很多内容的,把握整体学习思路才是重要的。
这里推荐几篇学习的博客,侵图必删!
服务注册发现:thrift+zk
携程配置中心Apollo
中国服务网格社区

你可能感兴趣的:(学习路线,java,微服务架构,云服务)