Spring Cloud 微服务项目实战

开篇词 | 跟着学,你也能成为微服务高手

姚秋辰(姚半仙)

PayPal 研发经理

你好,我是姚秋辰,网名姚半仙,欢迎和我一起进入《Spring Cloud微服务项目实战》。

我硕士毕业于复旦大学,一直从事互联网电商和支付场景的系统架构与开发,曾先后任职于SAP、阿里巴巴、eBay和PayPal。在这十余年里,我从一名Java程序员,逐渐成长为架构师和研发经理,这期间我一直在与微服务打交道,与Spring Cloud更是结下了不解之缘。

我曾经参与过一线互联网公司新零售业务从0到1的落地,并作为核心成员,负责商品中心和营销平台的微服务化建设。除此之外,在电商平台、互联网支付和互金领域,我也积累了不少大型微服务系统设计经验,负责了多个业务系统的微服务化改造、主链路高可用设计等项目。

我从早期版本开始,就一直在使用Spring Cloud。期间,经历了Spring Cloud几个重要版本的迭代,也见证了曾经的王者Spring Cloud Netflix组件库的陨落,和后起之秀Spring Cloud Alibaba组件的强势崛起。在这个过程中,我也出品过几部Spring Cloud的体系课程,并在2021年出版了《微服务从小白到专家:Spring Cloud与Kubernetes实战》一书。这些经历让我对微服务技术的发展和落地,有了更深刻的理解和体悟。

在我看来,经过多年的发布和迭代,Spring Cloud在微服务架构领域已然奠定了自己江湖一哥的地位。它丰富的组件库就像哆啦A梦的口袋一样,你在微服务架构领域碰到的任何问题,都可以从Spring Cloud中找到对应的解决方案。

如今使用Java技术栈的各个大厂(比如阿里、美团点评、拼多多等),都在全面拥抱微服务。因此,微服务技术也已经成为一个Java工程师晋升到高阶技术专家所必须掌握的知识。

学习微服务技术面临哪些问题?

也许你早就打算学习微服务技术,可是自己的公司业务规模小,接触不到先进的微服务架构技术;又或者面对五花八门的微服务开源框架,和各个大厂自研的黑科技技术,一时间不知道如何下手。

我非常理解这种心情,在我刚开始从单体应用过渡到微服务框架的时候,也面临了同样的问题。体系庞大的微服务技术栈就像伫立在渺小的我面前的一座大山,站在山脚下的你是否和我一样在心里泛着这些嘀咕呢?

乱花渐欲迷人眼:微服务技术选型太多了,我该选择什么技术和组件来学习呢?网上很多文章都在介绍微服务框架,但大多不是业界的最佳实践,而且知识非常零散,学完了并不能对自己的实战能力和认知带来太多提升。

纸上得来终觉浅:微服务充斥着各种晦涩的理论,很多教学文章都只是Hello World式的随堂小Demo,缺乏项目练手导致学完并不能学以致用,我该如何将理论应用到接地气的项目实战里呢?

路漫漫其修远兮:微服务体系庞大,框架组件就更多了,如果没有章法地去学习,无异于攀登一座很陡峭的山峰,学习效率低下不说,可能还会让你知难而退。我该从何下手,沿着什么途径学习才最有效率呢?

那怎么才能快速掌握好微服务技术呢?作为一个有十多年工作经验的老兵,我认为,与其一个猛子扎进去乱学一通,不如遵循一条由浅入深的学习路径。我们直接来看这张图就好了,简单来说,就是“三大功能,两大特性”。

三大功能是指微服务核心组件的功能维度,由浅入深层次递进;而两大特性是构建在每个服务组件之上的高可用性和高可扩展性。

别看微服务框架组件多,其实你完全可以按照这三大功能模块,给它们有简入难对号入座,就像图中展示的那样:

  • 服务间通信,包括服务治理、负载均衡、服务间调用;
  • 服务容错和异常排查,包括流量整形、降级熔断、调用链追踪;
  • 分布式能力建设,包括微服务网关、分布式事务、消息驱动、分布式配置中心。

从微服务组件的功能维度来讲,服务间通信是最基础的功能特性,这个功能模块是最适合作为初学者学习微服务技术的切入点。当我们构建起基础的通信能力之后,接下来就要考虑如何构建服务容错能力,提高服务调用的稳定性了。在这之后,我们就可以从全局的角度构建一些分布式支持特性。这样,你就有了一条难度平缓上升的学习曲线,再也不会从入门到放弃了。

除了功能特性以外,在学习每个微服务组件的时候,我们还会从高可用性和可扩展性两个维度来做扩展。

高可用性是系统设计的第一要素,它就像人的健康一样。健康好比数字1,能赚多少钱都是后面的0来决定,甭管你多能赚钱,没有了健康一切归零。系统设计也一样,你的系统功能再厉害,都要构建在可用性之上才能发挥作用。所以,我们还需要了解各个微服务组件是如何保证高可用性的。

说到可扩展性,这就要考验你对框架原理的理解了。授人以鱼不如授人以渔,学会用一个组件顶多算是吃到了鱼,而学会“魔改”组件才算是会钓鱼。所以,了解组件的底层原理,学会如何基于开源项目的扩展点实现一些定制功能,才能真正用好微服务技术。

总之,抓住微服务的“三大功能,两大特性”,可以让你从庞杂的知识点中抽身出来,把握其中的关键。这样,我们的学习才是高效的。

这个专栏是如何设计的?

我们这个专栏会围绕Spring Cloud框架展开。我刚才提到过,Spring Cloud在微服务领域中具有不可撼动的地位,它自孵化后就保持着极其旺盛的生命力和快节奏的更新迭代速度。Spring Cloud内置了丰富的组件库,可谓是“十八般兵器”在手,像服务发现、流量整形、服务容错、分布式事务等等,你都可以在Spring Cloud组件库中找到对应的解决方案。

此外,它里面还囊括了一线大厂针对微服务各类问题的解决方案,比如注册中心加分布式配置中心二合一的Nacos、在超高并发量下的高可用性神器Sentinel、分布式事务一站式解决方案Seata等,大厂的最佳实践尽在其中。

当然,学好一门技术的最好方式就是动手实践。在这个专栏里,我会围绕一个可部署、可运行的“优惠券平台”实战项目,带你从0到1实践微服务改造的全过程,帮你快速掌握Spring Cloud微服务技术。同时,我会兼顾底层原理和源码部分的讲解,让你知其然而又知其所以然,学了就可以应用在实际项目中。

除此之外,专栏中的每个部分我都会尽可能朝着“最佳实践”的方向去设计。例如,我会使用目前业界主流的最新版Spring Cloud组件,抛弃Spring Cloud Netflix组件库的过时组件。更重要的是,我会把自己在一线开发和架构领域积累的经验、学习技术的建议等融合到专栏中,不光可以让你开拓视野,还可以在未来的工作中学以致用。

为了让你通过一条最为平坦的路径学习Spring Cloud技术,我把整个专栏划分为了5个模块:

第一个模块:课前必学

我将用四节课为你铺垫微服务和Spring Cloud的前置知识,帮助你平稳过渡到后面的项目实战阶段。具体来讲,我会介绍微服务架构在构建大型分布式应用中的优势,以及我们这个专栏的主角“Spring Cloud”框架的发展背景以及核心组件库。我还会带你深入了解实战项目的功能模块和背后的技术选型依据,并手把手带你安装实战环节所需要用到开发工具和中间件。

第二个模块:Spring Boot急速落地篇

为了帮助你顺利过渡到Spring Cloud课程,我会手把手先带你搭建起这个Spring Boot实战项目,即便你是Java的初学者也不必担心门槛问题。在这个过程中,我会重点针对Spring Boot的数据库操作和RESTFul API开发做详细介绍。

第三个模块:Spring Cloud基础篇

接着,我会详细介绍Spring Cloud如何实现服务治理、负载均衡和服务间调用,带你构建起跨服务之间的通信:

  • 服务治理:掌握如何基于Nacos搭建注册中心集群,并实现微服务的服务注册、服务发现、服务下线、环境隔离等,深入了解Nacos自动装配机制是如何工作的;
  • 负载均衡:学会如何使用Loadbalancer实现负载均衡,并通过自定义负载均衡策略实现金丝雀测试;
  • 服务间调用:掌握如何使用openfeign组件在不同微服务间发起服务调用。

第四个模块:Spring Cloud进阶篇

我会介绍微服务如何实现异常处理、调用链路追踪和远程配置管理,构建分布式环境下的配置管理和容错机制:

  • 服务容错:了解微服务常见的服务容错手段,使用Spring Cloud Sentinel实现服务降级熔断和流量整形;
  • 链路追踪:了解链路追踪的使用场景和实现原理,使用Sleuth完成链路打标,并集成Zipkin和ELK实现链路追踪和日志查询;
  • 分布式配置中心:了解配置中心的使用场景,使用Nacos实现配置项管理、动态刷新参数和环境隔离。

第五个模块:Spring Cloud高级篇

在最后这个模块,我会带你深入了解微服务网关、消息事件驱动和分布式事务的使用场景和原理,将微服务集群接入网关组件和消息组件,并实现分布式数据一致性方案:

  • 服务网关:了解微服务网关的用途,使用Spring Cloud Gateway搭建微服务网关;
  • 事件驱动:了解事件驱动在微服务中的应用场景,使用Stream集成消息组件,并实现异常容错、死信队列和延迟消息等场景;
  • 分布式事务:了解分布式事务的主流方案,使用Spring Cloud Seata的AT模式和TCC模式实现分布式事务,并深入了解Seata的底层原理。

开启这个专栏的正确姿势

最后,关于怎么学习这个专栏,我还想给你一些建议。

第一,多动手!学习技术只靠眼看口读是掌握不了真功夫的,书读百遍其义自见这句话在技术领域行不通。所以呢,这个专栏不是一部看完就忘的“爽文”,而是一部需要你亲手实操去搭建项目的实战专栏。

第二,先尝试自己解决问题!碰到问题可不能先想着去搜索引擎上找答案,或者到处求医问药,这样并不能提高自己解决问题的能力。当你碰到问题时,我建议你先从报错日志和源码开始,尝试自己解决问题。毕竟大部分问题的表象体现在Error日志中,而底层解法就藏在源码里。在解决问题的过程中,你既能锻炼troubleshoot的能力,又能理解源码的底层逻辑,你解决的问题越多,你收获的成长也会越多。

第三,不要在一个问题上死磕太久!当你在一个问题上尝试过各种解法,可又不得要领的时候,就不用钻牛角尖死磕了,毕竟这不是搞科研,我们也要提高学习效率和学习体验。你不妨在课程的评论区和我、还有其他小伙伴一起来探讨碰到的难题,有时候轻轻一点拨就能让你走出迷雾。但是,别忘了在这之后做复盘,思考一下自己排查问题的方向还可以做哪些优化。大牛都是在一次次跌倒和一次次总结中成长起来的。

好啦,从现在开始,跟我一起开启这趟充满挑战的Spring Cloud项目实战之旅吧!If not now, when? If not you, who?此时此刻,非你莫属!

教程推荐

DBUtils在线教程

Redis在线教程

Python3在线教程

函数式 PHP在线教程

Python 渗透测试实战在线教程

Python 物联网编程在线教程

随机推荐

SANWA SUPPLYMA-ERG9使用舒适度如何?真实评测体验曝光!

狮王小狮王儿童氟防蛀牙膏 20g好不好?购买前必看的评测报告!

雀巢超启能恩奶粉3段760g*4罐用户体验如何?独家评测揭秘内幕!

蒙牛纯甄草莓果粒常温酸奶200g×10使用感受如何?老用户评测,值...

佳沃云南蓝莓14mm 12盒原箱生鲜使用怎么样?老司机评测分享?

滋源 无患子控油洗头水 200ml应该注意哪些方面细节?购买前必看...