Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【云原生-白皮书】简章2:深入理解DevOps+微服务

【云原生-白皮书】简章2:深入理解DevOps+微服务

作者头像
程序员洲洲
发布于 2024-06-07 03:00:04
发布于 2024-06-07 03:00:04
2300
举报
文章被收录于专栏:项目文章项目文章

单体架构

单体架构是什么

在搞懂DevOps和微服务之前,需要先搞懂什么是单体应用/单体架构。简单来说,就跟在校的一些小项目一样,项目的Demo写好了,找一台服务器安装环境,然后把jar包远程上服务器,然后跑起来服务就可以了。这个时候进行简单的服务监控也不难,如果项目出了问题,查看一下运行日志,就可以知道哪一步出问题了。如果懂一些脚本,也可以写一些脚本分析日志,解放双手监控服务器。这种单体架构就是采用瀑布流方式开发的,服务的流程就是:设计 -> 开发 -> 测试 -> 部署 。

单体B/S架构

在还没有微服务和DevOps之前,一个Web应用的上线,一般都是将所有的功能都打包在一起,也就是都在一个项目包里面,然后将项目打包到一个服务器上跑起来就可以了,那个时候的B/S应用架构就是单体架构,结构图如下:

单体B/S+负载均衡

如果当用户访问量变大导致一台服务器无法支撑时,就需要加服务器进行负载均衡,这个时候架构的形式就是:单体B/S+负载均衡

单体B/S+前后端分离(CDN)

用了一段时间负载均衡之后,发现通过CDN手段,把静态文件独立,可以加速服务,提升应用速度,所以单体架构就进一步演变成了:B/S+前后端分离(CDN)

单体架构总结

上面所说的架构都是单体应用,只是某方面的部署形式进行了优化与改动,所以最终都避免不了单体应用的普遍缺陷:

单体

1、代码量大,应用启动时间较长。 2、测试周期长,更改Bug需要对全部业务进行回归测试。 3、应用容错性差,当某个程序出错后,导致整个项目业务宕机。 4、伸缩性困难,只能整个应用进行扩展,浪费资源。 5、开发协作性困难,项目人员都在维护一套代码,协作周期长、难度大。

DevOps

DevOps是什么

DevOps:Development和Operations的组合词,是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

分布式架构+敏捷开发模式

随着上述说的单体架构时,业务流量越来越大,那么肯定几台服务器是不够用的,这个时候就会加很多服务器机器,也会加入Nignx、CDN、缓存、消息队列等技术栈,同时开发人员也会变多,这个时候就是 多人多机协同开发问题。

多人协同开发的问题

这个时候,大多会将项目进行拆分,每个人负责专注于开发一部分业务,敏捷开发的核心理念就是既然无法充分了解超高业务流量下的用户的真实需求是怎样的,就将一个大的目标不断拆解,把它变成一个个可交付的小目标、小项目,然后通过不断迭代,以小步快跑的方式持续开发 。

此外,这个时候项目是非常大的,为保证项目质量,测试环节不可减少,为了加快速度增大开发效率,测试的工作最好是和开发同步交替进行的,需要将测试环节从后面注入到整个开发环节当中,每次可交付的都是一个可用的功能集合,对开发交付的内容进行持续验证。这样开发产品的可控性也更强,可以阶段性的检验一下项目成果。

多机器问题

之前机器很少架构简单的时候,开发就可以干运维的活,就算加了几台服务器,那也是脚本将 jar包 发布到这些机器上,好像也挺简单,但是会有两个人同时上线部署被覆盖的问题,但这些都不是问题,只要约定好错开时间进行上线部署就可以了。

但你如果是几千台服务器起步,那就需要专门的运维人员进行维护项目了,因为开发分工每个人都专注于自己的事情,不会那么用心进行维护,另一方面是运维的学习成本确实变高了,开发人质量参差不齐,如果服务器出问题那就不是小事。

但是这个时候也不是 DevOps,而是 Dev+Ops,还没有融合在一起。这时 Ops 的主要职责就是:硬件维护、网络设备维护、DBA 、基础服务维护、数据监控等,运维们擅长写各种部署,监控脚本,减少机械的重复工作,开发模式变成了敏捷开发模式。

这个时候,开发设计流程大致是这样。

到这里了,还没有引入到DevOps,还要先再插入讲讲微服务,才能更好的说明DevOps到底怎么理解。

微服务

微服务是什么

微服务(Microservices)是一种软件架构,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic)的API集相互通信。

微服务的出现就是因为原来单体应用架构已经无法满足当前互联网产品的技术需求。

那么,到底什么样的服务才能算是微服务? 1、单一职责的。一个微服务应该都是单一职责的,这才是“微”的体现,一个微服务解决一个业务问题(注意是一个业务问题而不是一个接口)。 2、面向服务的。将自己的业务能力封装并对外提供服务,这是继承SOA的核心思想,一个微服务本身也可能使用到其它微服务的能力。 (有点像SOA的演进)

微服务架构

微服务架构,核心是为了解决应用微服务化之后的服务治理问题。

应用微服务化之后,首先遇到的第一个问题就是服务发现问题,一个微服务如何发现其他微服务呢?最简单的方式就是每个微服务里面配置其他微服务的地址,但是当微服务数量众多的时候,这样做明显不现实。所以需要使用到微服务架构中的一个最重要的组件:服务注册中心,所有服务都注册到服务注册中心,同时也可以从服务注册中心获取当前可用的服务清单:

解决服务发现问题后,接着需要解决微服务分布式部署带来的第二个问题:服务配置管理的问题。当服务数量超过一定程度之后,如果需要在每个服务里面分别维护每一个服务的配置文件,运维人员估计要哭了。那么,就需要用到微服务架构里面第二个重要的组件:配置中心,微服务架构就变成下面这样了:

以上应用内部的服务治理,当客户端或外部应用调用服务的时候怎么处理呢?服务A可能有多个节点,服务A、服务B和服务C的服务地址都不同,服务授权验证在哪里做?这时,就需要使用到服务网关提供统一的服务入口,最终形成典型微服务架构:

上面是一个典型的微服务架构,当然微服务的服务治理还涉及很多内容,比如:

1、通过熔断、限流等机制保证高可用; 2、微服务之间调用的负载均衡; 3、分布式事务(2PC、3PC、TCC、LCN等); 4、服务调用链跟踪等等。

主流的微服务框架

目前国内企业使用的微服务框架主要是Spring Cloud和Dubbo(或者DubboX),Spring Cloud已经逐渐成为主流,比较两个框架的优劣势的文章在网上有很多,这里就不重复了,选择什么框架还是按业务需求来吧,业务框架决定技术框架。

Spring Cloud全家桶提供了各种各样的组件,基本可以覆盖微服务的服务治理的方方面面,以下列出了Spring Cloud一些常用组件:

DevOps+微服务:拆分解耦

了解完上述全部之后,假设当原本是单体架构的公司发展到非常大规模的时候,会有很多程序员、服务器等等,所以一个项目里面,什么语言、技术栈都会有,Java、Go、Python肯定是数不胜数的,所以,这个时候需要协调技术栈,并且项目后期肯定会变得非常大,全部都兑到一个项目里,最直接的后果就是项目变得很大,上线项目启动时间变长,一个BUG可能导致整个业务全线崩溃,最终的后果就是项目变得越来越难以维护,加一个改一个东西几乎搞不动,而且还越来越难重构。

所以,拆分解耦是最终的出路,将项目拆成一个个小的服务单独部署,以电商项目为例,将整个项目拆分为用户服务、商品服务、订单服务,积分服务、支付服务每个服务单独部署,之间通过互相调用的方式来交互,而且可以将一些基础服务例如上传图片,发送短信等很多服务都需要的基础服务,抽象到一个单独的整合服务,也就是之前所谓的中台服务

拆分解耦演化催生DevOps

按照上述说的微服务架构进行开发DevOps的话,运维需要做的上线工作,主要就是将代码部署到对应的机器里面,微服务有那么多的服务,每个大点的公司几百个服务不算多,而且还可能随时搞一个服务出来,如果还按照原始的脚本部署方式,可能最后连是哪个脚本都找不到。而且,如果每个服务上线都需要运维来同意,开发会非常难受,需要天天找运维同意发布,运维也会增加繁琐的工作量。

所以,开始演化出远程部署一些机器,专门用来管理代码,进行上线工作,由运维事先把上线的规则都给定义好了,开发只要按照他的规则都访问这台服务器进行各自的代码合成和发布,自己上线呢,能用代码自动完成的事情就绝不要手动解决,这是每个开发人员都在想的东西。运维需要做的事情,慢慢的都沉淀到了各个平台上面,例如监控,有专门的监控组件和可视化,基础服务例如服务器,CDN,负载均衡等基础服务可以外包到云服务厂商,日志也有专门的日志工具,链路追踪也有专门的组件和可视化,还有网关等,渐渐的,只要这些都配置好了,开发也可以做运维的部分工作,毕竟开发才是最了解代码的人,哪里出了问题看看监控日志,可以最快速度定位到问题,于是DevOps开发模式诞生了,开发也是运维。

早期的DevOps,大部分指的都是“开发运维一体化”。

而现在的DevOps,概念上已经扩大到端到端的概念了。

实现DevOps:DevOps搭建工具

综上所示:DevOps 的三大支柱之中,即人(People)、流程(Process)和平台(Platform)。

项目管理(PM):Jira。运营可以上去提问题,可以看到各个问题的完整的工作流,待解决未解决等; 代码管理:Gitlab。jenkins或者K8S都可以集成gitlab,进行代码管理,上线,回滚等; 持续集成CI(Continuous Integration):gitlab ci。开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。 持续交付CD(Continuous Delivery):gitlab cd。完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。 镜像仓库:VMware Harbor,私服nexus。 容器:Docker。 编排:K8S。 服务治理:Consul。 脚本语言:Python。 日志管理:Cat+Sentry,还有种常用的是ELK。 系统监控:Prometheus。 负载均衡:Nginx。 网关:Kong,zuul。 链路追踪:Zipkin。 产品和UI图:蓝湖。

参考文章: 1、知乎:什么是DevOps? 作者:小龙飞 2、知乎:微服务入门 作者:未知

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文弄懂什么是DevOps,妈妈语气讲解
以电商系统为例,单体应用架构为 LNMP,这个时候只有 DEV 没有 OPS,DEV 就是全栈,就跟我们上大学玩的 demo 一样,项目开发好,找台服务器安装好环境,把 jar 包 scp 到远程服务器,放上去开启服务就可以。
阿甘的码路
2021/03/15
5.3K0
云原生之微服务架构
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
1K0
云原生之微服务架构
初学者学习微服务 需要了解哪些知识?该如何入门微服务?有哪些优质的教程可以学习?
前面一章节,我们学习了常用的网络通信协议,以及各自的优缺点,并做了一个较为全面的总结。这一章节,我们就来对微服务入门基础做一个准备,学习微服务,我们应该从哪些方面去学习。终于有人把tcp、http、rpc和grpc总结完整了
兔云小新LM
2023/04/27
1.3K0
初学者学习微服务 需要了解哪些知识?该如何入门微服务?有哪些优质的教程可以学习?
微服务之基础知识
微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作。 被拆分成的每一个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建, 并且每个服务都维护着自身的数据存储、 业务开发、自动化测试案例以及独立部署机制。 由千有了轻量级的通信协作基础, 所以这些微服务可以使用不同的语言来编写。
Jacob丶
2020/08/05
4430
云原生最佳实践之二-37手游云原生落地实践
37手游成立于2013年6月,是三七互娱旗下运营子公司,致力于手机游戏发行业务。其中,在中国大陆地区,37手游以近10%的市场占有率仅次于腾讯和网易、牢牢占据TOP3位置;在非中国大陆地区,也成功进入“月收入过亿”俱乐部。迄今为止,37手游成功发行《永恒纪元》《斗罗大陆:魂师对决》《云上城之歌》《小小蚁国》《谜题大陆》等二十余款优秀作品,累计为超过4亿游戏玩家提供服务。37手游追求卓越,秉承“创新点亮梦想,分享成就未来”和“相信创造奇迹”的文化理念,追求创新、进取、分享、尊重,与梦想同行、不断开创新篇章。
37手游后端技术团队
2023/02/24
1.7K0
云原生最佳实践之二-37手游云原生落地实践
微服务架构的核心关键点
当我们架构微服务应用时首先遇到的一个问题是,作为消费者如何访问并调用服务提供者所提供的服务,作为服务提供者如何能让服务消费者知道并进行消费。在传统应用开发时,通常是在开发语言层面上解决这个问题,可能我们从来也没有考虑过这个问题,甚至可以说这个问题在传统开发时根本不存在。但在微服务架构下,同一个微服务可能同时存在多个实例,并且这些微服务实例还在不停上线、下线,那么它们如何相知、相识并进行通信呢?使用物理地址显然不行,因为不知道服务提供者到底在哪台服务器,服务当前是否仍然在线,如果服务不在线还进行调用岂不是造成调用失败?
玄姐谈AGI
2020/08/04
8530
微服务架构的核心关键点
云原生架构的核心技术(微服务、DevOps、容器云、Service Mesh、Serverless、声明式API)
读完本文,你将对云原生下的核心概念微服务、DevOps、容器云、Service Mesh、Serverless、Immutable Infrastructure、Declarative-API等有一个详细的了解,帮助你快速掌握云原生的核心和要点。
鱼找水需要时间
2023/02/16
12.4K0
云原生架构的核心技术(微服务、DevOps、容器云、Service Mesh、Serverless、声明式API)
Go进阶训练营 – 微服务概览与治理一:微服务概览
业务场景各有不同,分享内容时不要太具体到哪个业务场景,应该找到变化中不变的部分。万变不离其宗,先把本质学好。
Yuyy
2022/09/21
5020
Go进阶训练营 – 微服务概览与治理一:微服务概览
微服务治理-云原生下的IT治理和传统SOA治理方法融合
今天我准备再谈下微服务治理方面的内容,在前面我写过一篇微服务治理框架重构的文章,里面给出了一个完整的覆盖微服务全生命周期管理和后期治理管控的框架体系。今天的重点则是对里面的一些内容进行细化说明。
人月聊IT
2025/06/24
760
微服务治理-云原生下的IT治理和传统SOA治理方法融合
都2023了,还有人不了解微服务吗
当前互联网界,不管是做 2B 端【面向企业】,还是 2C 端【面向个人用户】产品,微服务开发已经是遍地开花,单体结构的系统大多只存在于传统软件和中大型国企架构里。
xin猿意码
2023/10/18
4280
都2023了,还有人不了解微服务吗
分布式微服务架构概述初探
微服务架构(MSA)的起源应该要追溯到国外著名架构师Martinfowler于2014年编写的一篇博文中,其中阐述了微服务架构的整体设想。他用这样一句话概述了对微服务架构的评价:"今天在软件架构方面,除了微服务这个名称没有什么新的了"。
IMWeb前端团队
2019/12/03
1.1K0
分布式微服务架构概述初探
信创微服务平台的九大关键内容与实施建议
倪坚:在关乎企业生存的必选项“数字化转型”以及国家信创战略的共同冲击下,企业需要改变现有业务和IT的架构,更快速地应对挑战、响应变化,增强自身的竞争力。
yuanyi928
2022/04/19
9970
信创微服务平台的九大关键内容与实施建议
云原生之微服务
单体架构是最简单的架构,常见于常见于传统的web开发,将前端代码和所有业务代码放在一个系统里,统一打包并运行,比如传统的J2EE应用,将代码打包成war, 部署在Jboos或tomcat容器中运行。
Check King
2022/12/10
6370
云原生之微服务
七米老师Go语言微服务与云原生
云原生(Cloud Native)是面向云环境设计、构建和运行应用程序的一套方法论和技术体系,其核心目标是通过充分利用云计算的优势(如弹性、可扩展性、自动化等),实现应用的快速交付、高效运维和持续创新。以下是云原生的核心概念、技术栈和价值体现:
地球itkf2015
2025/09/02
1930
为什么选择微服务架构? 微服务架构的10个核心优势 总结
微服务架构我们没有一个明确的定义,但简单来说微服务架构是: 采用一组服务的方式来构建一个应用,服务独立部署在不同的进程中,不同服务通过一些轻量级交互机制来通信,例如 RPC、HTTP 等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立的团队来维护。
猫头虎
2024/04/08
3K0
为什么选择微服务架构? 微服务架构的10个核心优势 总结
阿里前P8高级架构师讲述微服务架构
微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成,NetFlix有大约600个服务。国内方面,阿里巴巴、腾讯、360、京东、58同城等很多互联网公司都进行了微服务化实践。当前微服务的开发框架也非常多,比较著名的有Dubbo、SpringCloud、thrift 、grpc等。
用户1667431
2018/07/26
1.2K0
阿里前P8高级架构师讲述微服务架构
什么是微服务?
维基百科:2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等组件实现。
武培轩
2019/10/09
1.1K0
什么是微服务?
微服务探索与实践—总述
软件开发是一个不断发展的过程,从当初的面向过程为主到如今的面向对象的开发,软件开发者不断探索与实践更加符合时代发展要求的开发模式与架构思想,而这,也在极大程度上提高了软件开发的效率。
AI.NET 极客圈
2019/07/19
4860
一文带你盘点“微服务”中的技术点
互联网的快速发展,越来越多的公司开始由单体架构转向微服务架构。因此,微服务的学习需要被我们这些奋斗者们所掌握,在学习微服务之前,我们有必要盘点下所谓的微服务是什么,包含什么,解决了什么样的业务场景。
Simon郎
2021/10/10
8340
一文带你盘点“微服务”中的技术点
日均服务调用超65万亿!腾讯是怎么做云原生微服务治理的?
云原生时代,越来越多的企业借助于微服务与容器化,来提升业务弹性与研发效率。在服务治理的道路上,我们也吸取各家之所长打磨了相关的产品。本次分享以腾讯微服务架构建设为主,介绍了 TCS/TSF、北极星(PolarisMesh)和微服务治理方面的实践经验,以及在企业的相关落地案例。
腾讯云开发者
2024/12/03
1.1K0
日均服务调用超65万亿!腾讯是怎么做云原生微服务治理的?
推荐阅读
相关推荐
一文弄懂什么是DevOps,妈妈语气讲解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档