云原生计算重塑企业IT架构 - 分布式应用架构

进入21世纪以来,我们见证了企业分布式应用架构从SOA(Service-oriented Architecture),到微服务架构,再到云原生应用架构的演化。

为了说明企业架构演化背后的思考,我们先谈一些玄学。

第一,企业IT系统的复杂性(熵)符合热力学第二定律。随着时间的推演,业务的变化,企业IT系统的复杂度会越来越高。

第二,在计算机交互设计中有一个著名的复杂性守恒定律。应用交互的复杂性不会消失,只会换一种方式存在。这个原理也同样适用于软件架构。引入新的软件架构,不会降低IT系统的整体复杂性。

听到这里,是否让生命不息、折腾不止的我们感到一丝凉凉?:-)

现代软件架构的核心任务之一就是定义基础设施与应用的边界,合理切分复杂性,减少应用开发者需要面对的复杂性。换句话说,就是让开发者专注在核心价值创新上,而把一些问题交给更合适的人和系统来解决。

我们就从下面这张图开始,探究企业分布式应用架构演进背后的逻辑。

蜕变之痛 - SOA

2004年,IBM建立SOA全球设计中心,我作为研发TL和架构师参与了一系列全球客户的pilot项目,帮助Pepboys, Office Depot等国际企业利用SOA优化企业内部和企业间的业务流程,提升业务敏捷性。

当时的大背景是,随着经济全球化逐渐深入,企业面对的竞争加剧,商业变革也开始提速。在大型企业内部的IT系统已经经过了数十年的演化。整个的技术体系变得异常复杂,并存着诸如主机系统上的CISC/COBOL交易应用,小型机AS400中的RPG业务系统,和X86/Power等分布式系统的C/JEE/.Net应用。大量应用系统由3方供应商提供,一些系统甚至已经无人维护。而且随着业务迭代,一些新的业务系统被持续构建出来,由于缺乏合理的方法论指导,系统之间缺乏有机的链接,形成了若干的孤岛,持续加剧了IT架构的复杂性,无法支撑业务的发展的诉求。这就仿佛各派高手为了帮助受伤的令狐冲,把异种真气输入体中,虽然短时间可以缓解伤势。可是多道真气无法融合,互相激荡,长时间下来会伤上加伤。

因此,企业IT所面临的首要挑战就是整合企业中大量竖桶型(silo-ed)的IT系统,支撑日益复杂的业务流程,进行高效的业务决策和支撑业务快速变化。在这种背景下,IBM等公司提出了SOA(面向服务的架构)理念,将应用系统抽象成一个个粗粒度的服务,构建松耦合服务架构,可以通过业务流程对服务进行灵活组合,提升企业IT资产复用,提高了系统的适应性、灵活性和扩展性,解决“信息孤岛”问题。

SOA提出了一系列构建分布式系统的原则,这些思考直到今天也依然适用:

  1. 首先是,服务具备明确定义的标准化的接口,通过服务定义描述,将服务消费者(Service Consumer)和服务提供者(Service Provider)的实现进行解耦。并且服务应该采用contract-first而非code-first方式进行开发。服务间通信采用面向文档的消息而非特定语言RPC协议,一方面可以解决服务与实现语言的解耦,此外可以灵活选择同步或者异步的通信实现,提升系统可用性和可伸缩性。
  2. 服务应该是松耦合的,服务之间不应存在时间、空间、技术、团队上的依赖。
  3. 服务应该是无状态的,使得服务调用与会话上下文状态实现解耦。
  4. 服务应该是自治和自包含的,服务的实现是可以独立进行部署、版本控制、自我管理和恢复。
  5. 服务是可发现、可组合的。比如可以通过Service Registry进行服务发现,实现了服务消费者和服务提供者的动态绑定。业务流程中可以对来自不同系统的的业务服务进行编排组装。

在初始构建SOA系统的时候,大多采用点对点的通信连接,服务调用和集成逻辑被内嵌在应用实现中。这种方式在服务数量比较少的时候,确实是一种简单和高效的开发方式。但其最大的问题是,随着服务规模的增长,服务之间通信愈发复杂,连接路径和复杂性会剧增,给服务治理带来巨大的挑战。

为了解决上述挑战,企业服务总线(Enterprise Service Bus,ESB)开始被引入。企业服务总线提供了服务之间的连接(connection),转换(transformantion), 以及中介处理(mediation)的能力。可以将企业内部和各种服务连接到服务总线上,实现信息系统之间的松耦合架构,屏蔽了系统集成的复杂性,提高了IT系统架构的灵活性,降低企业内部信息共享的成本。

SOA方法论的目标就像易筋经可以帮助梳理、归聚不同的真气,融会贯通,为我所用。然而修炼过程却绝非易事。大量雄心勃勃的SOA项目并未取得预期的效果,其背后的原因是什么?

任何IT架构的成功,都离不开与业务目标、技术基础和组织能力的相互配合。

在业务上,当时SOA重点解决的是企业IT的存量市场的问题。这使得SOA方法论很大程度被窄化为 Enterprise Application Integration (EAI 企业应用集成)。在SOA理念中,打通信息系统间的经络只是第一步。还需要勤修内功,持续重构迭代企业IT架构,这样才能保持企业IT架构的敏捷、柔性,持续支撑业务的发展和变化。

在组织结构上,由于当时在大部分企业的IT部门仍然是成本中心,是业务的附属支撑部门。大多数企业缺乏长远的IT战略规划,IT团队也缺乏成长认同,SOA沦为项目制运作而没有组织化保障和持续投入。即使当时成功的项目也会在复杂性日积月累的侵蚀下,逐渐失去活力。去年在美国生活的朋友发过来照片,15年前我们为客户构建的业务系统还在支撑其现有全国门店的业务。这是技术项目的成功,却反应了企业技术战略的缺失。

在技术上,ESB架构虽然实现了业务逻辑与服务集成的解耦,可以更好地进行中央化的服务治理。也暴露出一些严肃问题

  1. 由于过度强调业务系统的可复用性,而不是对企业IT架构的治理和重构。大量服务集成的实现逻辑被下沉到ESB内部(如上图最右侧所示),这些逻辑非常难以维护,难以移植和扩展,成为ESB不可承受之重。我们必须在合适的地点合理地处理复杂性,而非将其简单转移。
  2. ESB基于一个中心化的消息处理系统,但随着互联网的高速发展,ESB已经无法应对企业IT规模化成长的挑战。
  3. ESB这样的Smart Pipes, Dumb endpoints的系统架构是一个无法适应快速变化和大众创新的一个架构。类比一下,电信运营商曾经希望将视频通信,电话会议等复杂功能纳入电信基础设施,只需一个Dummy电话终端就可以享受丰富的通信服务。然而随着智能电话的普及,微信和钉钉这样的分布式协同工具创新彻底颠覆了人们沟通交流的方式,而电信网络重回管道的宿命。

羽化之美 - 微服务

随着互联网的发展,尤其是移动互联时代的到来,整个世界的经济形态发生了巨大的变化改变。企业IT的重点从传统的System of Record(交易系统,如ERP, SCM等)演化到System of Engagement(互动系统,如全渠道营销)。这些系统需要能够应对互联网规模的快速增长,并且能够快速迭代,低成本试错。企业IT已经成为创新驱动的引擎之一,技术拓展商业边界的理想也帮助IT团队更有使命感,进一步加速推动了企业IT的进化。

以Netflix,阿里为首的一系列互联网公司主导了企业架构新的变革 - 微服务架构。Apache Dubbo, Spring Cloud等微服务框架得到了广泛应用。

微服务的核心思想便是应用功能拆分与解耦,降低业务系统实现复杂性。微服务强调将应用功能拆解为一组松耦合服务,每个服务遵守单一责任原则(Single Responsibility Principle)。微服务架构解决了传统单体式架构存在的几个固有问题:每个服务可以独立部署和交付,大大提升了业务敏捷性;每个服务可以独立横向扩展/收缩,应对互联网规模的挑战。

当然,将大型的单体应用拆解为多个微服务,也一定会增加IT系统研发协同、交付、运维的复杂性。这时候微服务架构与DevOps和容器自然走到了一起,构成了云原生应用架构的雏形。

微服务架构继承了SOA的架构原则,但是在实现层面,它倾向于通过构造智能端点和哑管道的去中心化分布式架构风格来替代ESB。@邱小侠 在微服务(Microservice)那点事文中详细分析了这些问题,我也不再赘述。

微服务架构首先要面对分布式架构的内生复杂性,请参考 分布式计算的误区。微服务框架需要能够解决服务通信和服务治理的复杂性,比如服务发现、熔断、限流、全链路追踪等挑战。微服务框架,如HSF/Dubbo或Spring Cloud以代码库的方式来封装这些能力。这些代码库被构建在应用程序本身中,随着应用一起发布和维护。

服务通信和治理本质是横向的系统级关注,是与业务逻辑正交的。但在微服务架构中,其实现方式和生命周期与业务逻辑耦合在一起的。微服务框架的升级会导致整个服务应用的重新构建和部署。此外由于代码库通常与特定语言所绑定,难以支持企业应用的多语言(polyglot)实现。

进化之光 - 云原生

SOA采用中心化的服务总线架构,解耦了业务逻辑和服务治理逻辑;微服务架构回归了去中心化的点对点调用方式,在提升敏捷性和可伸缩性的同时,也牺牲了业务逻辑和服务治理逻辑解耦所带来的灵活性。

为了解决上述挑战,社区提出了Service Mesh(服务网格)架构。它重新将服务治理能力下沉到基础设施,在服务的消费者和提供者两侧以独立进程的方式部署。这样既达到了去中心化的目的,保障了系统的可伸缩性;也实现了服务治理和业务逻辑的解耦,二者可以独立演进不相互干扰,提升了整体架构演进的灵活性;同时服务网格架构减少了对业务逻辑的侵入性,降低了多语言支持的复杂性。

Google, IBM,Lyft主导发起的Istio项目就是服务网格架构的一个典型的实现,也成为了新的现象级“网红”项目。

上图是Istio的架构,逻辑上分为数据平面和控制平面。数据平面由一组以 sidecar 方式部署的智能代理组成,负责截获应用网络流量,收集遥测数据并且执行服务治理策略。控制平面中,Galley负责配置管理,Pilot负责下发配置,Mixer负责策略检查和遥测数据聚合,Citadel负责通信中安全证书管理。

Istio提供了一系列高阶的服务治理能力,比如:服务发现和负载均衡,渐进式交付(灰度发布),混沌注入与分析,全链路追踪,零信任网络安全等。可以供上层业务系统将其编排到自己的IT架构和发布系统之中。

但是Service Mesh不是银弹,其架构选择是通过增加部署复杂性(sidecar)和损失性能(增加两跳),来换取架构的灵活性和系统的可演化性。

为了解决部署复杂性的挑战,社区和云服务商都在共同进行努力,一方面提升服务网格自动化运维水平(比如阿里云通过operator大大简化了Istio的升级运维和跨K8s集群部署的复杂度),一方面提供托管的服务网格服务,帮助用户关注在业务层面的服务治理而非基础架构实现。

关于性能问题,一方面Service Mesh需要降低自身控制平面和服务平面的性能开销,比如尽可能offload mixer负载,将治理策略执行下沉到数据平面完成。还要需要重新思考整个通信栈中应用与网络基础设施的边界。为了实现容器应用之间的互联互通,Kubernetes社区提出CNI网络模型,将容器网络连通性与底层网络实现的进行解耦。同时K8s提供了Service, Ingress, Network policy等基本元语来支持应用层的服务通信和访问控制,但是这些能力远不能满足应用对服务治理的需求。服务网格在L4/L7增加了流量管理、全链路可观测性、安全互联等新功能,这些是通过引入运行在用户空间的Envoy代理实现的。在提升灵活性的同时也不可避免地增加了性能开销。为了系统化解决这个问题,社区在进行有趣的探索。比如在Cillium容器网络中,可以利用eBPF/XDP等操作系统和底层网络能力,将应用层的服务控制能力(如Kube-Proxy提供的service, network policy)下沉到操作系统内核和网络层解决,并优化了Service Mesh数据链路,减少上下文切换和数据拷贝,有效地减少了性能开销。

目前Service Mesh技术还处技术成熟度曲线的初期,除了在L4/L7层提供灵活的服务通信功能,社区也在探索通过网络Service Mesh实现灵活的L2/L3组网能力。我们相信其会成为未来企业分布式应用通信基础设施。

 

在这个过程中会有一些新的理念和项目被持续创造出来,我们需要能够理性地分析其业务价值和技术局限性。我们要避免将Service Mesh作为万灵药,不要将应用集成、应用侧安全等业务逻辑下沉到服务网格中,避免我们重蹈复杂性覆辙。

回望历史

天下大势,分久必合,合久必分。企业分布式应用架构也走过一条分分合合的进化道路。在新技术迭起的今天,我们既要拥抱新技术带来的架构变化,更要加关注其背后的演进逻辑和核心价值,系统化地控制复杂性。

本文从企业分布式应用架构层面介绍了云原生计算架构带来的变化,后面我们陆续会分享在研发过程,集成架构等方面的思考。

 SOA微服务云原生
研发过程CMM/RUPAgileAgile
交付流程手工/自动化DevSecOpsGitOps/AIOps/NoOps
服务通信Web ServiceREST/专有RPC协议REST/gRPC等开放协议
服务治理ESB微服务/API网关服务网格
应用运行环境物理机/虚拟机虚拟机/容器Kubernetes/Serverless
基础设施IDC公共云/私有云无边界的云(多云/混合云, 云边端)


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

首发!《长安十二时辰背后的技术秘籍》正式公开,速来下载

一名死囚如何在十二时辰内利用“唐代黑科技”,拯救长安百姓于水火中? 这就是《长安十二时辰》的故事,剧中有恢弘的长安美景、让人流口水的水晶柿子/水盆羊肉,还有张小敬和檀棋“在一起”呼声……然而,最让人刮目相看的…

ETL异构数据源Datax_MySQL同步Oracle(全量)_07

文章目录1. 清除Oracle数据库中OTBS1表的数据2. 构建json3. 执行脚本4. 同步验证5. 同步分析7. 同步结果1. 清除Oracle数据库中OTBS1表的数据 Truncate TABLE OTBS1;2. 构建json {"core": {"transport": {"channel": {"speed": {&qu…

左手代码右手滑板 支付宝这个程序员有些酷

走在杭州支付宝z空间的园区,常常可以看到一个脚踩滑板,脑后扎个发髻的男青年。 他叫边柳。来蚂蚁金服三年,除了是一名前端码农,也是一位斜杠青年。捧着程序员的“饭碗”,兼顾着滑板和摇滚的爱好,可以说他过…

2019阿里云910会员节大促主会场全攻略

2019阿里云910会员大促活动已经于8月28日正式开启,从已开放的活动页面来看,整场大促活动由阿里云10年有礼时光机、爆款产品推荐、七大分会场组成。 在910这个秋季大幅度优惠促销日,怎样才能花最少的钱配置最特惠的云服务?云栖社区…

浪潮商用机器与腾讯TDSQL完成互认证 共同拓展Power行业生态

日前,浪潮商用机器有限公司宣布,旗下K1 Power服务器系列产品经过几十项基础功能和高可用功能用例的专业测试,与腾讯新兴国产分布式数据库TDSQL完美兼容,且性能优异,可进行顺利的部署、平稳的运行及对外提供服务。此次互…

历时五天用 SwiftUI 做了一款 APP,阿里工程师如何做的?

作者|姜沂(倾寒) 出品|阿里巴巴新零售淘系技术部 导读:自 2014 年苹果发布会发布 Swift 之后, Swift 经过多年迭代,终于达到了 ABI 稳定版本,也意味着 Swift 做为稳定的得语言,值得用在大型 APP, 用来生产环境中。 2…

Istio从懵圈到熟练 – 二分之一活的微服务

Istio is the future!基本上,我相信对云原生技术趋势有些微判断的同学,都会有这个觉悟。其背后的逻辑其实是比较简单的:当容器集群,特别是K8S成为事实上的标准之后,应用必然会不断的复杂化,服务…

数据结构与算法、讲解、动态规划一脸懵?看完之后轻松掌握!

来源 | 昊天码字责编 | Carol封图 | CSDN 付费下载于视觉中国碰到动态规划问题摸不着头脑?总结不出动态规划的类型?有多少人曾经历过这种迷茫与无助?看完本文,让你一脚迈进动态规划的大门。我们在用递归求解问题的过程中&#xff…

搜索场景下的智能推荐演变之路

摘要:传统的推荐手段主要还是深度挖掘用户行为和内容本身相似性的价值,包括但不限于协同过滤,内容表征向量召回,以及各式各样的点击率预估模型,然后这样的推荐行为缺乏内在的逻辑性和可解释性,有一种知其然…

调查了 17,000 多位程序员,当前的云原生开发现状究竟如何?

整理 | 弯月,责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN(ID:CSDNnews)容器的标准化使用改变了软件的开发方式,我们迎来了开发运维的时代,基于云原生的开发能够帮助我们构建更灵活、更强大的应用程序。…

阿里研究员:测试稳定性三板斧,我怎么用?

阿里妹导读:如何治理测试稳定性问题?很多人会说:环境、流程管控、监控、工具化、加机器、专人负责、等等。这些都是对的。不过这些都是解决方案层面的,而不是方法论和理论体系层面的。今天,阿里研究员郑子颖来说说测试…

阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏!

本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛,关于中台架构的几次分享内容,将业务中台形态、中台全局架构、业务中台化、中台架构图、中台建设方法论、中台组织架构、企业中台建设实施步骤等总共…

Redis 6.0 的客户端缓存是怎么肥事?一文带你了解!

来源 | 程序员历小冰责编 | Carol封图 | CSDN 付费下载于视觉中国近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Client side caching)、ACL、Threaded I/O 和 Redis Cluster Proxy 等诸多更新。我们今天就依次聊…

AI时代,你的职业会是?99%的人都无法直面!

在我10岁的时候,算命先生曾对说我30岁时我会每天与八阿哥玩在一起。 当时懵懂的我一脸茫然,想着谁是我的八阿哥,却在30岁的这一年意识到自己确实日以继夜的与八阿哥在一起。 曾经,我们也担心自己未来的工作岗位是否会被人工智能给…

Java 12 新特性概述

Java 12 已如期于 3 月 19 日正式发布,此次更新是 Java 11 这一长期支持版本发布之后的一次常规更新,截至目前,Java 半年为发布周期,并且不会跳票承诺的发布模式,已经成功运行一年多了。通过这样的方式,Jav…

5G +边缘计算,优酷如何做云渲染?

作者| 阿里文娱高级技术专家 伊耆责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)当5G来了,视频还是平面的影像吗,只能静静观看吗?一定不是!现在,你可以像玩游戏一样…

不做会死!互联网时代的企业必定都要实现中台

AI 前线导读: 自 2018 年底以来,伴随着阿里、腾讯、百度、京东等一众互联网巨头的大规模组织架构调整,“中台”的热度陡然攀升。一时间,各大互联网公司纷纷开始跟随建设中台。中台的概念是被阿里带火的,2015 年&#x…

包机制。。

包机制 为了更好的组织类,java提供了包机制,用于区别类的命名空间//本质就是文件夹 包语法格式 package pkj[.pkg[.pkg3...]];一般利用公司域名倒置作为包名:com.boss.xxx 导入包语法 import package1[.package2...].(classname|*);尽量不要…

ETL异构数据源Datax_使用querySql_08

使用说明 当用户配置了这一项之后,DataX系统就会忽略table,column 这些配置型,直接使用这个配置项的内容对数据进行筛选,例 如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id t…

我被“非结构化数据包围了”,请求支援!

阿里妹导读:非结构化数据的内容占据了当前数据海洋的80%。换句话来说,就是我们都被“非结构化数据”包围了。由于非结构化数据的信息量和信息的重要程度很难被界定,因此对非结构化数据的使用成为了难点。如果说结构化数据用详实的方式记录了企…