首页 > 其他分享 >浅析云原生时代的服务架构演进

浅析云原生时代的服务架构演进

时间:2023-04-10 15:07:13浏览次数:36  
标签:SOA 原生 服务 演进 单体 架构 浅析 分布式

摘要:相比于传统的微服务架构,云原生和 serverless 技术更加灵活、高效,能够更好地满足用户的需求。

本文分享自华为云社区《《凤凰架构》学习和思考——云原生时代的服务架构演进史》,作者:breakDawn。

随着云原生的概念越来越火,服务的架构应该如何发展和演进,成为很多程序员关心的话题。大名鼎鼎的《深入理解java虚拟机》一书作者于21年推出了新作《凤凰架构》,从这本书中可以看到当前时下很多最新的技术或者理念。

浅析云原生时代的服务架构演进_SOA

一、服务架构演进史

1.1原始分布式时代

DCE(Distributed Computing Enviroment) 分布式运算环境。

DCE的设计主旨:“开发人员不必关心服务是远程还是本地,都能够透明地调用服务或者访问资源”

是很早由OSF指定的分布式技术体系理论,解答了很多问题,例如:

  • 远程服务在哪?——对应服务发现
  • 要部署多少个?——对应负载均衡
  • 请求超时怎么办?——对应熔断、隔离、降级
  • 方法参数和结果如何表示?——对应序列化方式
  • 信息如何传入?——对应传输协议选型
  • 服务权限?——对应认证、授权方案
  • 怎么保证不同机器间的状态最终一致?——对应分布式数据一致性

但最终发现解决这些问题的代价 远超 分布式所带来的收益,在DCE刚提出的年代(80年代),机器资源并没到那个程度, 于是暂时被搁置了。

1.2 单体系统

单体系统并不一定就代表是坏的,不好的。

单体架构的好处

如果是相同资源的前提下, 单体系统的性能是比分布式要高的。所有数据都是进程内通信,且开发、部署、测试都基于同一个对象进行处理,更加方便。单体系统中的代码一般也是做好了分层、分模块的,也是易于敏捷开发和迭代的。

单体架构的坏处

然而如果单体系统中一部分代码出现缺陷, 可能直接把进程空间耗光,或者直接打崩整个进程,也没有办法针对某个代码模块做单独的升级或者更新。因此当系统规模较小的时候,单体系统有独特的优势。系统规模越来越大, 则要求各功能模块能够自治和隔离,减少爆炸范围。
从“追求尽量不出错”到“追求出错是必然”,是微服务架构挑战并取代单体架构的底气所在。

1.3 SOA——面向服务架构

SOA(Service-Oriented-Architecture)叫做面向服务的架构,类似于各服务之间协议和通信方式高度一致性,各服务遵循完全相同的消息协议和管理机制。

终极目标是总结出一套自上而下的软件研发方法论,最后新厂家要开发系统时,八股文一般照搬SOA架构和实现即可

有一种参考的SOA架构是事件驱动架构,所有服务连接一个统一的消息管道,从管道中接收统一的事件消息和响应机制。

SOA落寞的原因:

  • 过于严格的规范定义带来了过度的复杂性;
  • 过于精密的流程和理论需要懂得复杂概念的专业人员才能驾驭。

1.4 微服务时代

微服务的九个核心业务与技术特征

  1. 围绕业务能力构建:根据业务划分细粒度的服务和团队;
  2. 分散治理: 各服务、各团队对服务质量各自负责,不受其他服务影响,可以各自演进而不用统一规化;
  3. 通过服务而不是类库来实现自治;
  4. 产品化思维:各服务开发人员关注整个微服务的全方位生命周期,大家不是为了仅仅完成某个功能,而是提供一个持续改进、提升的服务;
  5. 数据去中心化:允许不同的存储方式或者存储位置,但要考虑分布式一致性的成本;
  6. 强终端弱管道:即弱化类似SOAP的通信机制(通信管道设计很重,所有服务强制依赖,多了很多不必要的管道功能), 如果有调用需要,提供服务终端的endpoint去调用而不是强制管道使用;
  7. 容错性设计:认为各服务是可以出错的,并不会直接影响所有服务的运行;
  8. 演进式设计:不仅可以容错,也可以允许某个服务突然被淘汰;
  9. 基础设置自动化:通过CI/CD等自动化构建、发布、运维,减少人工维护成本。

微服务相比SOA的优势

微服务不是SOA的变体或者衍生品,微服务中的每一部分可以自由的选择其中的各种可选方案,例如远程调用有RMI、Dubbo、Rest;服务发现有ZK、Etcd等。也因为选择很多,对于架构师而言是一个很沉重的挑战。

1.5 后微服务时代(云原生时代)

用硬件方案替代软件方案

对于注册、跟踪治理、均衡等问题,能否脱离应用代码实现, 直接在硬件层面来实现?很早以前行不通,因为硬件基础设置跟不上软件应用的灵活性。直到docker和k8s的出现。微服务时代离不开以docker为代表的早期容器化技术,微服务框架springCloud所支持的软件级别微服务治理功能,都能够在k8s中找到硬件层面的替代:

浅析云原生时代的服务架构演进_华为云数据湖探索DLI_02

通过k8s和相关的虚拟化技术, 与业务无关的技术性问题可以从软件层面剥离,直接在硬件设置层面进行解决!

第二次进化

当涉及调用链路的切换或者变更, 单纯依靠DNS的硬件层面来做切换还是比较困难的,不如软件方案灵活。于是引入了“服务网格”的边车代理模式,类似于脱离应用代码,在容器中部署一个通信代理服务器,对于请求的熔断、变更、流量控制都可通过这个代理服务器来管控。这样微服务应用代码中无需再考虑任何和上面这些通信过程相关的逻辑了,全部通过第三方的代理服务器实现!

1.6无服务(ServerLess)时代

无服务的定义

  • 后端即服务: 数据库、存储、日志等业务无关的后端等都存储在云上;
  • 函数即服务:供使用者调用的函数/接口都是运行在云端,调用者不需要考虑容量规划和算力问题。

无服务的愿景

  1. 开发者只需要纯粹地关注业务;
  2. 不需要考虑技术组件,后端组件现成的,直接使用,不用考虑如何采购和选型;
  3. 不用操心运维,运维能力交给云计算厂商。

无服务的缺点

对于信息管理系统、网络游戏或者对后端接口响应速度较高的应用而言, 无服务并不是最佳选择, 因为无服务的函数肯定不会一直处理高活跃度状态,存在冷启动的情况,对于其响应性能会有影响。

总结和思考

在很多年前的架构或者介绍微服务的书中,基本都是从单体->SOA->微服务。但是现在,随着云原生和serverless等新概念的出现,微服务架构的发展已经越来越多元化。对于需要频繁接触云业务的开发者而言,这些新概念显得更加重要。在学习这个章节时,需要关注这些架构演进的原因和理由,比如SOA相比单体的优点和缺点,后微服务又是如何从理念上逐步领先了传统的微服务等。

而《凤凰架构》一书的后半章节内容,更多是聚焦容器、k8s等云原生的重要内容。

像基于容器、k8s的设计,云原生技术将原先软件能力中复杂的内容转移到了硬件层面进行替代,开发者能够用更集中的精力关心业务实现而非服务治理等繁杂的内容。

华为云CCE服务对于部署云业务的服务而言就是云原生时代的重要一环,CCE服务可以面向云原生2.0打造CCE Turbo容器集群,计算、网络、调度全面加速,学习 CCE 服务可以帮助开发者更深入地了解 Kubernetes 和容器技术,从而提高自己的微服务开发和容器化应用部署能力。

而无服务一般也是基于容器实现,对使用者而言基本不感知底层硬件资源,只需要调用即可,大大减少了创建和维护的学习和精力成本,即开即用的理念。 像华为云数据湖探索DLI华为云湖仓构建LakeFormation等都是基于serverless实现的云服务,云用户基于这些serverless服务并结合华为MRS等大数据底座之后,可以快速运行自己的大数据作业或者数据统一管理等能力,构建数智融合的相关能力。

总而言之,相比于传统的微服务架构,云原生和 serverless 技术更加灵活、高效,能够更好地满足用户的需求。


点击关注,第一时间了解华为云新鲜技术~

标签:SOA,原生,服务,演进,单体,架构,浅析,分布式
From: https://blog.51cto.com/u_15214399/6180899

相关文章

  • 浅析云原生时代的服务架构演进
    摘要:相比于传统的微服务架构,云原生和serverless技术更加灵活、高效,能够更好地满足用户的需求。本文分享自华为云社区《《凤凰架构》学习和思考——云原生时代的服务架构演进史》,作者:breakDawn。随着云原生的概念越来越火,服务的架构应该如何发展和演进,成为很多程序员关心的话题......
  • 2 01 | 是什么推动了单体应用到微服务架构的演进?
    你好,我是姚秋辰。“微服务”是近些年在大型应用架构领域的一个热门话题,从实践领域来看,我们身边的一二线大厂也纷纷选择全面拥抱微服务。就拿国内Java系的一线大厂来说,如阿里系、美团点评、PDD等,它们都将自己的核心业务系统构建在微服务架构之上。即便你是刚参加工作的萌新,也一......
  • 秒杀架构设计
    今天我们从7个不同的维度,讲讲秒杀系统的架构设计,主要知识点如下:Nginx+前后端分离+CDN缓存+网关(限流+熔断)集群的路由层+Redis(缓存热点数据、分布式锁)MQ集群业务处理层数据库层(读写分离、热点隔离)1.秒杀业务的特点  瞬间大量的刷新页面的操作瞬间大......
  • 分布式存储技术(下):宽表存储与全文搜索引擎的架构原理、特性、优缺点解析
    对于写密集型应用,每天写入量巨大,数据增长量无法预估,且对性能和可靠性要求非常高,普通关系型数据库无法满足其需求。对于全文搜索和数据分析这类对查询性能要求极高的场景也是如此。为了进一步满足上面两类场景的需求,有了宽表存储和搜索引擎技术,本文将对他们的架构、原理、优缺点做......
  • MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
    MQTT(EMQX)-LinuxCentOSDocker安装MQTT概述MQTT(MessageQueueTelemetryTransport)是一个轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息协议,在物联网......
  • 大数据经典论文解读 - Kafka - 流批一体架构
    Kafka大数据系统架构是什么样?为什么需要Kafka这样的桥梁作为连接?Kafka的系统设计与传统MQ有什么不同?如何实现分布式?如何动态添加Broker并通知上下游?有了Kafka和Storm后如何搭建流式处理系统?如何处理故障带来地数据不准确?RealtimeDataProcessingatFacebook从应用......
  • K8S架构原理详解
    Kubernetes是什么,为什么上手这么难? Kubernetes是一个基于容器技术的分布式集群管理系统。它是谷歌在大规模应用容器技术方面数十年经验的实际成果。因此,支持大规模的集群管理承载着非常多的组件,分布式本身的复杂度非常高。 Kubernetes到底有什么? 接下来我们一步步来看看K......
  • Taro架构构析(1):多端框架分析,Taro WePY uni-app对比
    多端框架分类全包型这类框架最大的特点就是从底层的渲染引擎、布局引擎,到中层的DSL,再到上层的框架全部由自己开发,代表框架是 Qt和Flutter。这类框架优点非常明显:性能(的上限)高;各平台渲染结果一致。缺点也非常明显:需要完全重新学习DSL(QML/Dart),以及难以适配中国特色的端:小程序......
  • Weex原理及架构剖析
    早期H5和Hybrid方案的本质是,利用客户端App的内置浏览器(也就是webview)功能,通过开发前端的H5页面满足跨平台需求。比如PhoneGapcordovaionic……该方案提升开发效率,同时也满足了跨端的需求。但有一个问题就是,前端H5的性能和客户端的性能相差甚远。Facebook推出ReactNative关于......
  • Docker架构
    概念理解镜像(image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。架构Docker是一个CS架构的程序,由两部分组成:服务端(server):Docker守护......