Skip to content

开篇词:实战是学习新技术的不二法门

你好,我是成富,在 Java 领域钻研 13 年有余,参与过大大小小各种类型的项目开发工作,积累了很多实际产品的开发与架构设计经验,平时乐于总结和分享。


微服务在业内的实践已经从流行走向成熟,诸多大厂(比如 Amazon、Netflix、蚂蚁金服、网易云音乐等)都已经迁移并采用了微服务架构,而随着 AWS、Google 云平台、微软 Azure、阿里云、腾讯云和华为云等云计算平台的流行,越来越多的中小型公司选择把应用迁移到云平台上运行。


微服务云原生应用,恰是结合了微服务架构和云计算平台两者的优势,成为了中小型公司开发新项目或迁移已有项目的最佳选择,微服务云原生应用开发人员的大量需求也应运而生。


但是,在这背后,我们也看到很多现实问题:

  • 人才的供给总是具有滞后性。即便是在庞大的 Java 开发者中,了解微服务架构,知道如何在云平台上实现微服务架构的开发人员数量也很有限。这主要是因为大部分 Java 开发者都熟悉单体应用开发,对于微服务架构缺乏必要的了解。

  • 学习本身需要投入大量时间和精力。单是微服务技术本身,其概念就非常繁杂。而且各种概念又相互关联,形成复杂的知识网络,让初学者不知何处下手,更别提如何利用理论知识来解决关键问题。

  • 知识的理解和应用之间,需要跨越鸿沟。如果只看概念,而不进行实际操作,很难说真正理解。


在这个专栏中,我就是想把微服务架构相关的理论与具体的实例相结合,来帮助你真正掌握云原生微服务架构的应用开发。

我是如何学习和实践微服务的?

微服务架构出现之后,我意识到了它必将引领产品开发的一次革命性潮流,而 Kubernetes 和云原生技术的出现,更为微服务架构的落地找到了最佳的平台。于是,我开始使用微服务架构和云平台来设计和实现公司的下一代产品。


在实际开干之前,我先是网上搜索阅读了大量技术资料,看了不下十本微服务图书,当然还有 Kubernetes 官方文档和其他相关的视频和文字资料,我感觉对微服务架构在云平台上的实现方式有了非常清晰的认识。


但是,当我把这些知识应用到实际的产品开发中时,还是遇到了很多现实问题。比如,如何划分微服务,一个功能到底应该放在哪个微服务;如何在一个微服务中调用另外一个微服务的 API;当数据在多个微服务中分别存储时,如何保证这些微服务之间数据的一致性。我在初学微服务云原生应用开发时,和你产生过同样的困惑,有种无的放矢的感觉。但是我把握了最重要的一点,那就是"实战永远是学习新技术的不二法门":


当你要学习一项新技术时,最有效的办法就是真正用它来开发一个实际应用。


一开始,你写的代码可能很"蠢",但是实战的过程会加深你对技术的理解和认知。当你对技术有了更深入的理解之后,完全可以再回过头来对已有代码进行重构,甚至是推倒重来。亲身经历整个过程,可以帮助你有效地掌握开发实践和积累经验。当你之后真正需要在工作中用到这项技术时,就能少走很多不必要的弯路。


但是,这些弯路,我已经代你走过很多,你不必一一重历。

我是如何设计这个课程的?

这个课程正是我在实际产品开发中的经验总结。在开发微服务架构应用的过程中,你同样会遇到和我类似的问题,而我的这些经验不仅可以帮助你少走一些弯路,还能给你一些经过验证的最佳实践,让你的开发工作走得更稳、更高效,让产品能够更快上线,同时为以后的版本维护和更新打下坚实的基础。


当我们开始学习微服务架构和云原生应用的时候,通常第一个直观印象是它很复杂。一点没错儿,这是因为微服务架构本身所带来的挑战是多方面的,除了技术层面的挑战,还包括团队组织、项目管理和运营维护等诸多方面。实际上,在微服务架构中,微服务自身的实现反而只是最基础的部分。


当一个微服务的 API 确定之后,你可以选择任何编程语言和框架来实现它,不管是 Java、Go,还是 NodeJS。微服务架构最大的难点在于:服务之间的交互、数据一致性、错误处理,以及运维方面的挑战。


这个课程最大的优势在于,以一个完备的、贴近实战的应用做主线,真正带你走完一个产品从想法到上线的全部过程。我将借助一个类似优步、滴滴的打车应用的后台服务,带你了解微服务架构在云平台上落地的方方面面,从最初的构想到最后在阿里云部署上线,带你一步一步实践一个微服务云原生应用的开发、部署和上线。


  • 项目初始的时候,我们将利用领域驱动设计的思想来帮助拆分微服务。微服务的划分看似简单,实则是非常重要的一部分。因为微服务一旦划分完以后,再想把某个功能从一个微服务迁移到另外一个微服务会变得很困难,通常会需要改动多个微服务的公开 API,这是你不希望看到的情况。因此,在微服务划分阶段就要仔细考虑。

  • 接着,对于每个微服务采用最适合的技术来实现,比如有的使用数据库驱动的方式来实现,有的使用事件源技术来实现。这是因为一旦微服务的 API 确定之后,对于微服务本身的实现并没有太多的限制,我们可以根据每个服务的特征选择最适合的技术栈。

  • 此外,除了微服务实现,安全、日志管理、性能指标、调用追踪和异常处理等非功能性需求相关的内容也涵盖在这个课程之中。这些非功能性需求可能相对于实际的业务逻辑来说并不那么重要,但却是一个健壮的应用所不可或缺的。对于一个微服务架构的应用来说,上线只是第一步,应用的运行离不开实时监控、错误追踪、故障处理和系统维护的支持。

  • 最后,我们会通过持续集成和持续部署服务,把应用部署到阿里云平台的 Kubernetes 上。在实际产品开发中,你无法想象没有自动化单元测试和集成测试,以及自动化的持续集成和部署;在一个成熟的产品中,你不可能不考虑到服务的版本更新。和其他往往集中于过度简化的用户场景,离实际的产品开发太远的课程不同,这些容易被忽略的内容都包含在这个课程中。


此外,我在课程中还为你提供了大量贴近实际的进阶内容,如微服务之间的异步消息传递、使用 Saga 模式进行跨服务的协作和基于 Istio 的服务网格实现,这些都是在实际项目开发中会用到的技术。在介绍相关的技术时,我还会着重讲解背后的原理,真正做到让你"知其然"的同时,也能"知其所以然"。


当然,**除了了解微服务架构云原生应用开发的全过程,**你还将得到完整的示例代码。我在课程中,对于重要功能的实现都给出了详细的示例代码,你可以把这个示例应用作为你自己的微服务应用的基础。完整的示例代码,我会发布在 GitHubhttps://github.com/alexcheng1982/happyride)上并提供更新。


希望这样一个完整的过程,能让你细致而且系统地掌握微服务云原生应用开发的全貌与细节,帮你把各种散碎的知识与概念串联起来,通过贴近实际场景的应用示例,了解真实业务的开发过程、最佳实践,真正将脑中的想法变成可运行的业务代码。


写在最后

我在实际开发和应用微服务架构时,最大的感受是:理论知识与实际的产品开发之间不可避免地存在一些差异。这是因为抽象的理论知识需要与具体的实践相结合,从中获取到实际的开发经验。


要真正了解微服务架构和云原生应用,最好的做法就是实际完成一个项目的开发。在这个过程中,你会把遇到的问题都解决一遍,把可能踩的坑都踩一遍。第一个项目的开发过程是痛苦的,一开始你认为正确的做法,可能被实践证明是不合理的,会有反复验证的过程。但只有在不断地试错过程中,才能积累到真实的经验,并可以用来指导以后的开发。


这样当你开始做第二个,第三个项目时,就会有得心应手的感觉。你已经有一整套成熟的从架构、设计、实现、测试到部署的完整流程,可以直接快速地复制。


这个课程所要提供给你的,就是这样一整套经过实际开发验证的流程,一套完备的、真实的,贴近实际的产品开发过程。除了让你快速上手,即便是遇到课程中没有提过的内容,你也可以按照同样的方式来进行实践,积累属于自己的经验。


微服务架构的云原生应用开发是一个巨大的挑战,同时也带来了机遇。可以预期的是,在未来的三到五年内,会有越来越多的公司迁移到微服务架构和云平台。这个趋势已经在国内外的大公司中得到了验证,中小企业也会逐步跟上这个趋势。学会微服务和云原生相关的技术,可以确保你能跟上这一波的技术热潮。


希望你在每次机遇来临前,都能够把握住时机。