GO微服务实战第一节 为什么说云原生重构了互联网产品开发模式?

144 篇文章 30 订阅
84 篇文章 38 订阅

你好,我是一名服务端技术开发专家,已有五年多微服务开发经验,曾就职于美团等一线互联网公司,现任源图信息有限公司架构负责人。由于我很早就关注了微服务架构,对于云原生、微服务、容器化等都有过深入的研究和实践。

平时我非常乐于个人技术分享,喜欢与同行交流,所以在工作之余我经常会写一些技术性的文章,总结我的工作经验和实践。在个人微信公众号“aoho 求索”中,我一直致力于分享服务端开发技术和实践,目前已发布了近百篇文章,得到很多读者的认可。2020 年初,我和同行联合写作的《Go 语言高并发与微服务实战》一书面市,希望帮助读者在开发实践中获取一些经验和灵感,少走一些弯路,以提升开发体验和企业产品迭代效率。

为什么要学习 Go 微服务

在早期的单体应用开发时代,我们会将所有的代码和配置都封装在一个独立的 war 包中,然后再部署到 Web 服务器上。但随着开发团队的不断壮大和产品需求的不断增加,一系列连锁反应就出现了,单体应用的代码快速膨胀,模块之间交互越加复杂,代码复杂度越来越高,代码可维护性变差,维护成本变高,大大降低了开发效率。除此之外,每次改动还都要重新编译打包整个 war 包,然后到服务器上重新进行部署,毫无便捷性可言。

云原生技术的迅猛发展,彻底改变了互联网应用的开发模式。开发者可以在云上快速便捷地构建、发布和部署应用,并使用云服务商提供的各种“利器”高效地开发和维护应用。

作为云原生技术落地实践的代表技术微服务架构将原本臃肿的单体应用根据业务拆分为职责单一的微服务,其中每个微服务都可以独立部署和开发,并对外提供服务,这种“分而治之”的手段大大提升了应用的开发效率。纵观国内一线互联网公司,大多数都走在微服务落地实践的前沿,或将已有系统逐步拆分为互相协作的微服务,或使用微服务来开发新系统。

而 Go 作为当前炙手可热的高性能编译型编程语言,以其简明的语法、丰富的内置类型和极高的并发性能吸引了大量开发者的青睐,成为落地微服务架构实践的绝佳利器。正是考虑到 Go 简单易上手、静态编译、性能优越等优点,目前各大公司都在将服务端技术栈往 Go 迁移,如腾讯、字节跳动等互联网大厂,都在将原有的 Python/C/C++ 实现的系统往 Go 上迁移,或者完全采用 Go 去开发新的系统。

可以这么说,用 Go 落地践行微服务架构逐渐成为一种趋势,所以掌握相关知识和技能将大大提升你个人的就业竞争力,升职加薪不再是梦。

image (12).png
  (来源:拉勾网 Golang 开发工程师职位)

课程设置

目前业内存在大量成熟的开源微服务开发脚手架,如 Go-kit、Go-micro、Spring Cloud、Tars等,它们经受过大量线上真实业务环境的考验,能够为计划进行微服务架构实践的开发团队提供一站式服务,使得开发人员更加专注于业务开发。

微服务和 Go 的学习资料在网上一抓一大把,但是经常出现的情况是单单利用这些你很难进行系统性地学习,可能遇到的问题有:

  • 没有实战开发经验,掌握了大量微服务架构相关的知识,却没有真正在一个系统开发中实践过;

  • 案例分散,目前网上的资料大多数都是零零散散地讲解各个微服务组件的应用,没有一个完整的案例应用详尽地讲解微服务架构开发设计落地的完整过程;

  • Go 微服务实践的案例较少,目前讲解微服务架构实践大多数以 Java 为主;

  • 没有云上开发的经历,很多时候都是在本地机器上运行应用。

在本课程中,我会首先介绍云原生的相关背景知识,描述应用如何在云计算平台上开发、部署和运行,接着详细介绍微服务架构中各个基础组件的设计和原理,并使用 Go 来落地微服务架构的实践。

另外,为了加深你对知识的理解和应用,也为了让你在实践中少走弯路,我会以一个货运平台的业务案例为主线,阐述一个业务需求是如何经过划分后,被设计为多个微服务,并采用 Go 进行开发,然后如何在云计算平台上部署、上线和运行的。本课程主要由 4 部分组成:

  • 第一部分(模块 1),主要介绍云原生诞生的背景及其概念、微服务的组成和发展趋势,并讲解如何使用 DDD(领域驱动设计)来划分微服务,以及介绍下一代微服务架构 Service Mesh。这部分知识能够帮助你充分理解云原生和微服务的基础概念,以及云原生应用开发的流程和方法论,为你接下来学习各微服务组件的原理和应用打下坚实的理论基础。

  • 第二部分(模块 2),主要介绍 Go 开发的基础知识,包括 Go 语法和流程控制、Go 并发和 Go Web 应用开发等,并阐述如何采用 DDD 对货运平台的业务进行划分,以及相关案例应用实战(微服务部署、容器编排、持续集成和自动化测试等)。这部分主要是补充 Go 语言开发基础,帮助没有了解过 Go 的同学快速掌握 Go 开发的基本要领,也方便接下来讲解如何使用 Go 搭建微服务应用。

  • 第三部分(模块 3 ~ 模块 9),主要讲解微服务架构中基础组件的原理和 Go 业务案例的实战,包括服务注册与发现、RPC 调用、网关、容错处理、负载均衡、统一认证与授权,以及分布式链路追踪等。我们会重点关注各个组件背后的实现原理和使用 Go 开源或者自实现的方式为案例微服务添加组件能力。最后,我还会介绍如何通过 Service Mesh 来整合这些组件提供的能力。

  • 第四部分(模块 10),主要分享 Go 微服务开发中的相关经验和要点,包括日志采集、Go 错误处理、并发陷阱和系统监控等。通过我多年在 Go 微服务开发中积累的相关实践经验,进而避免你在未来的开发中“踩坑”。

作者寄语

当前,微服务架构已经成为服务端开发的主流,使用 Go 进行微服务开发也越来越受到开发者的青睐。我希望能够通过该课程帮助你深入理解微服务架构,以及使用 Go 语言快速加入微服务开发队列中,这样无论在将来的面试还是开发中,你都能切中微服务应用开发的要点,将原理和应用结合起来,充分体现个人的核心竞争力,从而在激励竞争中脱颖而出,充分实现自己的个人价值。

在课程的开始,我建议你给自己定个目标,然后将目标进行拆分,每天进步一点点,整个课程跟下来你的成长绝对是指数级的。也欢迎你在留言区介绍你的工作和学习情况,分享你的成长经验和心得,倾诉你的学习痛点,不仅方便我后续有针对性地讲解,也增进我们彼此的了解。

最后,我希望你能和我一起坚持下来,我们一起学习、一起交流,共同成长。期待你的蜕变!加油!


云原生(Cloud Native)这个概念最早是由 Pivotal 公司的 Matt Stine 提出的。发展至今,云原生架构已然成为互联网行业的技术热点,并在很大程度上推动了 IT 成本的降低和企业的发展。不过为便于你更好地理解和学习这部分内容,在本节课的开始,我们就先来快速了解下相关的架构演进及其设计思想。

在云原生架构之前(即传统非云原生应用),底层平台负责向上层应用服务提供基本运行资源,而应用则需要满足业务需求和非业务需求,比如 PHP 开发中是采用 Openstack 或者 VMware vSphere 等虚拟化技术为 LMAP(Linux+MySQL+ Apache+PHP)应用提供硬件资源。

在 SOA、微服务时代,部分功能会以后端服务的方式存在,在应用中被简化为面向客户端的调用代码,然后应用将这些功能连同自身的业务实现代码一起打包,比如 Java 的 jar 包。而云的出现,不但提供了各种资源,还提供了基础设施、中间件等各种能力,从而使得应用专注于业务需求的实现。

随着云原生技术理念在行业内进一步实践发展,云原生架构完成了 IT 架构在云计算时代的进化升级。对企业而言,新旧 IT 架构的转型与企业数字化的迫切需求也为云原生技术提供了很好的契机,使得云原生技术在行业内的应用持续深化。

云计算的前世今生

云原生和云计算有着千丝万缕的联系,因此在介绍云原生之前,我们先看看过去几十年间云计算的发展演进历程,它大致分为三个阶段:虚拟化的出现虚拟化在云计算中的应用以及容器化的出现

图片1.png

阶段1:虚拟化技术

云计算与计算机相伴而生,起源可以追溯到 60 多年前,但直到 2000 年前后,云计算的基础——虚拟化技术才逐渐发展成熟。

那什么是虚拟化技术呢?具体来说,就是表示将计算机资源划分成逻辑组的技术。注意,由此生成的仅仅是一个逻辑的视图。通过虚拟化技术,我们就可以在同一台物理机器上运行多个虚拟机,进而发挥物理硬件的最大效用。

阶段2:虚拟机的市场化应用

在虚拟化技术成熟之后,云计算市场才真正出现。2006 年,亚马逊 AWS 公开发布 S3 存储服务、SQS 消息队列及 EC2 虚拟机服务,正式宣告了现代云计算的到来。针对云服务消费者的不同需求,主要有三种云服务模型: IaaS、PaaS 和 SaaS(如下图)。

图片2.png

  • IaaS(Infrastructure-as-a-Service,基础设施即服务),是云服务的最底层,主要提供一些基础资源。

  • PaaS(Platform-as-a-service,平台即服务),提供软件部署平台,其抽象了硬件和操作系统细节,使得应用可以无缝地扩展。开发者只需要关注自己的业务逻辑,不需要关注底层。

  • SaaS(Software-as-a-service,软件即服务),是指软件的开发、管理、部署都交给第三方,提供商会为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台。企业不需要关心技术问题,拿来即用。

阶段3:容器化和容器编排的兴起

容器化本质上就是虚拟化的改进版本,这种技术允许多个应用程序驻留在同一个服务器中。不过这二者之间也是有区别的,虚拟化是在硬件级别分离应用程序,而容器化则是在操作系统级别分离硬件程序。

我们知道Docker 对云计算领域产生了深远的影响,从虚拟机到容器,整个云计算市场发生了一次重大变革。后续随着 Kubernetes 的成熟,以及它和 Docker 的融合,云计算进入 Kubernetes 时代。PaaS 技术的主流路线也逐渐过渡到 “Kubernetes + Docker”,并于 2018 年左右开始占据统治地位。

图片3.png

总体来说,在这过去的二十年间,云计算几乎重新定义了整个行业的格局。越来越多的企业开始降低对 IT 基础设施的直接资本投入,不再倾向于维护自建的数据中心,而是开始通过上云的方式来获取更强大的计算和存储能力,这使得公司(尤其是初创公司)可以更快地实践业务想法并迅速推送到市场。

云原生到底是什么

你可以对比篮球比赛来理解,篮球比赛分为上半场和下半场,在这里云原生就是云计算的 “下半场”。在这“下半场”中,是否上云已经很少被提及了,因为云的概念已经渗入到各行各业了,特别是 2017 年以后,云计算技术已然成为企业发展“战术”的一部分了。

近几年,云原生不仅火而且还有点被过度消费,很多软件都打着云原生的旗号。但究其本质,云原生本身并不能称为是一种架构,它首先是一种基础设施,运行在其上的应用称作云原生应用,只有符合云原生设计哲学的应用架构才叫云原生应用架构。

鉴于云原生的重要性,在讲解云原生的具体定义之前,我们首先介绍下云原生出现的背景以及它背后的诉求,这样你才能知其然并知其所以然。

云原生出现的背景

移动互联网时代是业务高速发展的时期,不同于传统的应用,移动互联网提供了新的用户体验,即以移动端为中心,通过软件对各行各业进行渗透。在巨大的用户基数下,快速变更和不断创新的需求给软件开发方式带来巨大推动力,传统软件开发方式受到巨大挑战。面对业务的快速迭代以及团队规模的不断扩大,降低沟通协作成本并加快产品的交付速度、为用户呈现更好的体验是各个互联网公司都在努力的方向。

在这样的背景下,微服务和云原生的概念开始流行。系统架构与团队的组织架构密切相关(如下图所示),其实半个世纪前提出的康威定律——组织内人与人的沟通方式决定了他们如何参与系统设计——也早就说明了这一点,这奠定了微服务架构的理论基础。通过服务的拆分,每个小团队对应一个服务,增加了内聚性,减少了开会的频次,提高了沟通效率。快速交付意味着更新的频次也高了,更新也容易造成服务的故障问题,这时更新与高可用之间需要权衡。而云原生架构的基础设施和工具可以减少更新导致的故障问题,保证服务的高可用。

图片4.png
  几大互联网巨头的团队组织架构

云原生解决了哪些问题

企业在数字化转型中普遍面临 IT 系统架构缺乏弹性、业务交付周期长、运维效率低、高可靠性低等痛点和挑战。具体来说,主要有以下的诉求:

  • 产品快速迭代,更快的上线速度;

  • 系统的高可用,故障时能够自动恢复与回滚;

  • 快速解决问题,细致的故障探测和发现;

  • 避免雪崩,故障时能自动隔离;

  • 系统的弹性伸缩,简便快速的水平扩容。

将软件迁移到云上是应对这些挑战的自然演化方式,在过去二十年间,IaaS 、PaaS 和 SaaS 让应用的构建和部署越来越轻、越来越快,而底层基础设施和平台则越来越强大,以不同形态的云对上层应用提供强力支撑。云计算的第一个浪潮是关于成本和业务敏捷性,这使得云计算的基础设施更加廉价。

很多企业倾向于使用微服务架构来开发应用。微服务开发快速,职责单一,能够更快速地被客户所采纳。同时,这些应用能够通过快速迭代的方式得到进化,并赢得客户的认可。而云原生可以打通微服务开发、测试、部署、发布的整个流程环节,所以企业可以通过云原生的一系列技术,如基于容器的敏捷基础设施、微服务架构、DevOps 等解决企业面临的那些 IT 痛点,满足其背后的诉求。

不断更新的云原生定义

自从云原生被提出以来,云原生的定义就一直在持续地更新,这也说明了云原生的概念随着技术的发展而不断地被深刻认知。

作为云原生应用的提出者,Matt Stine 于 2015 年在其《迁移到云原生应用架构》一书中探讨了云原生应用架构的几个主要特征:符合 12 因素应用、面向微服务架构、敏捷架构、基于 API 的协作和抗脆弱性

Pivotal公司推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中的先驱者和探路者。在 Pivotal 的官方网站上,对云原生的介绍主要包括 4 个要点:DevOps、持续集成、微服务架构和容器化(如下图所示)。

图片5.png

云原生计算基金会(CNCF)最开始(2015 年成立之初)对云原生的定义则包含应用容器化、面向微服务架构和应用支持容器的编排调度这三个方面。

发展到 2018 年,云原生生态不断壮大, Cloud Native Landscape 中的云原生项目涉及领域也不断变大,同时 CNCF 基金会中的会员以及容纳的项目越来越多。

显然之前的定义已经和当前的景观图不符,为了实现云原生生态的发展,CNCF 于 2018 年 6 月通过了对云原生重新定义的提案,v1.0 版本定义如下:

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

这个定义不同于以往的严谨定义,并未深挖云原生的实质。CNCF 是一个厂商中立的组织,因此 CNCF 主要目的在于形成云原生工具生态,更加侧重工程实践。

上面定义所述的五个代表技术,基本都和 k8s 有关联。k8s 是云原生基金会的第一个孵化项目,事实上是在围绕 k8s 建立云原生生态。其中,容器是 k8s 的底层引擎;服务网格则是建立在 k8s 上的针对请求的扩展功能;不可变基础设施是现代运维的基石;声明式 API 是 k8s 的编码方式;微服务是一种软件架构,云原生中的微服务扩大了云原生的版图。

小结

云原生,并不是一种具体的技术或者框架,而是一类思想的集合,其中的技术要点包括服务网格、微服务和容器化(如容器化 Docker)等;管理要点则包括 DevOps、康威定律等。因此,可以说云原生在一定层面上重构了互联网产品的开发模式

本节课我们主要从云原生的发展史开始介绍云计算、虚拟化、容器化等技术,随后又结合云原生出现的背景介绍了云原生的定义。云原生应用可充分利用云平台服务优势,平台提供了简单快捷的扩展能力并与硬件解耦,这就提供了更大的灵活性、弹性和跨云环境的可移植性。

那学习完本节课,你可以用自己的语言描述云原生的概念吗?欢迎你在留言区分享你的想法。


精选评论

**富:

加不了群啊

    编辑回复:

    已购用户请点击课程页的“互动”,保存二维码,通过微信识别,申请添加运营小姐姐微信,因为申请的好友太多,需要耐心等待一会儿~

**伟:

云原生解决了企业IT维护的成本,上云方便自动构建和部署扩展伸缩的应用,建立高可用快速迭代的产品服务。

    讲师回复:

    棒棒哒~

**兴:

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。

云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

*鉴:

云原生, 并不是一种具体的技术或者框架, 而是一类思想的集合, 其中的技术要点包括微服务网格, 微服务和容器化(如容器化Docker)等; 管理要点则包括DevOps, 康威定律, 因此, 可以说云院士在一定层面上重构了互联网产品的开发模式.

**5935:

这个理解咋样: 云原生重新定义了在云计算模式下现代软件开发实践,旨在帮助组织更快交付实现业务敏捷性。

**玉:
1、云原生
->技术要点:服务网格(持续集成)、微服务、容器化;
->管理要点:Devops、康威定律
2、云原生重构了传统开发模式,该模式下的应用能弹性扩展,容错良好,松耦合,自动化,可移植性
**兴:

云原生的理解:对应用中与业务逻辑无关的基础中间件,数据存储剥离出来,作为服务提供出来,便于敏捷开发。

taoza:

总结的不错。

**那么可爱:

云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API

**那么可爱:

三种云服务模式:SaaS 、PaaS、 IaaS

xianyuLuo:

nice

*伟:

云计算 (云计算) 主要是提供平台,更快速的项目部署,更方便的交付,更自动化的运维。我认为以后的发展路线是  微服务 → 大数据 → 人工智能/区块链,而云计算是贯穿的。


加油吧,各位

*程:

从这篇文章可以看出,作者挺有水平的

**3756:

终于看到把云原生解释清楚的文章了 这一章就值回学费了

    编辑回复:

    感谢你的肯定,你也继续加油哦~

**3341:

加油,我可以的。

**磊:

云原生主要是指服务网格,微服务,容器化等,不是具体指某一种架构或者技术,指的是一种思想

**5143:

云原生是一种抽象的、面向微服务与容器化的设计思维集合。

**亚:

总结的很到位

AllenXu:

产品规模化,大型化,受制于单体服务的拓展局限,拆分单体服务,就不可避免的导致结构复杂度变大和不可控因素变多。云原生,是对于这种情况的一种非常好的解决方案。将一些和复杂业务弱相关的交给专业的服务处理,不用非要让一个写业务的成为数据库治理专家。

**用户6142:

云原生约等于CNCF了

**龙:

我也来看看😂😂😂

**星:

good job


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

办公模板库 素材蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值