单体架构到云原生架构的演进历程
  QjisLJavkeFB 2023年11月02日 111 0

云原生是基于分布部署和统一运管的分布式云,以容器、微服务、DevOps等技术为基础建立的一套体系,云原生是云计算未来的发展方向,会逐步取代传统的本地开发应用。

单体架构到云原生架构的演进历程_软件架构

云原生与数据中心密切相关。

数据中心的发展经历了三个阶段:

      第一阶段:业务模式主要为场地出租,为客户提供服务器托管服务。在这个阶段的软件架构以单体架构软件为主

    第二阶段:业务模式为提供场地、存储、以及互联网接入服务,为客户提供服务器托管和虚拟主机出租服务。在第二阶段的软件架构主要是分布式架构

    第三阶段:业务模式为提供计算、存储、网络服务,提供可动态调度的算力服务。此阶段的软件架构发展到了微服务架构和容器化架构

单体架构到云原生架构的演进历程_分布式架构_02

数据中心各阶段的业务模式

第一阶段:提供场地与服务器托管、互联网接入服务

单体架构到云原生架构的演进历程_软件架构_03

第二阶段:提供虚拟主机出租服务,基于类似vmware workstation的虚拟化软件

单体架构到云原生架构的演进历程_微服务_04

第三阶段:提供云平台服务包括云主机,容器云等,主要服务商有亚马逊,阿里云,华为云,天翼云等

单体架构到云原生架构的演进历程_软件架构_05

软件架构

软件架构的发展过程微单体架构==>分布式架构==>微服务架构==>容器化架构

1、单体软件架构

全部功能打包在一个 WAR包里,部署在Tomcat等web运行环境中。

优点:

(1)开发简单,集中式管理

(2)功能都在本地,没有分布式的管理和调用消耗

缺点:

(1)效率低:开发都在同一个项目改代码,相互等待,冲突不断

(2)维护难:代码功能耦合在一起,新人不知道何从下手

(3)不灵活:构建时间长,任何小修改都要重构整个项目,耗时

(4)稳定性差:一个微小的问题,都可能导致整个应用挂掉

(5)扩展性不够:无法满足高并发下的业务需求

下面以电商平台为例,介绍软件架构的发展历程

   在电商的早期阶段,采用的是LAMP架构,用PHP作为网站开发语言, Linux作为操作系统,Apache作为Web服务器,MySQL为数据库,以达到快速上线的要求。

单体架构到云原生架构的演进历程_软件架构_06

当用户规模越来越大时,单机架构性能遇到瓶颈,可以通过负载均衡器部署多套单体架构服务副本,手动的实现一定程度的伸缩性,同时也会带来会话共享等类似的问题。

单体架构到云原生架构的演进历程_分布式架构_07

随着业务的快速发展,单体应用部署多套副本的方式也难以满足性能要求,需要对服务进行进一步的拆分,演变成为分布式架构。


二、分布式架构

     分布式架构对单体架构做了一定改进,它将单体中不同的业务模块进行了纵向和横向的拆分,各个模块单独部署专人维护,并可以通过网络进行通信。纵向拆分:一个大应用分成几个小应用,每个小应用单独部署横向拆分:可以复用的业务拆分出来独立部署,其他应用通过消息传递与其交互。

单体架构到云原生架构的演进历程_分布式架构_08

优点:

(1)流量分散,提高并发量

(2)伸缩性变强,比如针对A业务采用CPU密集型服务器,而针对B业务采用IO密集型的服务器

(3)可以针对某个应用单独优化,减少因为一个改动影响整个系统的可能

(4)不同的应用运行在各自的进程中,A应用内存耗尽不会导致B应用内存不足挂掉

缺点:

(1)网络跨进程通信,随着业务的发展,应用间网络调用会愈发频繁,而网络本身是不可靠的

(2)如果存在异构应用,则可能存在协议兼容问题

(3)服务之间访问,需要将地址硬编码在代码中,如果地址改变则调用方也需要手动修改

(4)应用拆分后数据是分散的,存在数据一致性问题(5)每个应用都是集群部署,负载均衡管理较难

 

面向服务的架构

随着软件架构越来越大,引出了面向服务的架构(SOA) ,将业务中可重复利用的部分拆分出来下沉到服务层,并提供对外接口,供其他业务方调用,调用方可以通过服务组合来完成业务的处理。SOA 架构有两种实现模式:

(1) 以企业服务总线(ESB)为代表的中心化模式。

(2)以RPC实现为主的去中心化模式。

单体架构到云原生架构的演进历程_微服务_09

单体架构到云原生架构的演进历程_分布式架构_10

优点

(1)服务松散耦合,屏蔽服务调用细节

(2) 服务的可重用性高

(3)轻量级通信协议

(4) 高可靠性,高可用性,高可扩展性

(5) 拥有服务治理能力

缺点

(1) 服务粒度不好掌握,易导致服务数量膨胀

(2)易产生分布式事务问题

(3) 服务调用链路变长,易产生连锁反应,造成服务不稳定

 

微服务架构

 三、微服务架构 

  由于分布式架构服务之间管理的紊乱,以spring cloud为代表的微服务架构体系解决了这一个难题。微服务是一种通过多个小型服务的组合,来构建单个应用的架构风格,这些服务会围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言、不同的数据存储技术、运行在不同的进程之中。服务会采取轻量级的通讯机制和自动化的部署机制,来实现通讯与运维。

微服务架构带来的问题

(1)微服务架构整个应用分散成多个服务,定位故障点非常困难。

(2)稳定性下降。服务数量变多导致其中一个服务出现故障的概率增大,并且一个服务故障可能导致整个系统挂掉。事实上,在大访问量的生产场景下,故障总是会出现的。

(3) 服务数量非常多,部署、管理的工作量很大。

(4)开发方面:如何保证各个服务在持续开发的情况下仍然保持协同合作。

(5) 测试方面:服务拆分后,几乎所有功能都会涉及多个服务。原本单个程序的测试变为服务间调用的测试。测试变得更加复杂。

单体架构到云原生架构的演进历程_软件架构_11

四、云原生架构

     在开发微服务项目时,会面临一些必须要考虑的问题,比如服务注册与发现,服务追踪,服务路由,负载均衡等等。之前受限于硬件资源的限制我们不得不在应用层面上想法解决,近些年得益于容器技术的发展,尤其是在Kubernetes这类容器管理系统的出现后,使得上述问题可以从软件层面剥离出来,转变成虚拟的基础设施。让软件开发只专注于业务。真正实现了,弹性伸缩扩容。云原生技术有利于各组织在云环境中,构建和运行可弹性扩展的应用。容器开发人员使用容器将微服务与其依赖打包在一起。通过容器化微服务,云原生应用程序独立于底层操作系统和硬件运行。

单体架构到云原生架构的演进历程_软件架构_12

容器化架构的弹性伸缩特性使得硬件资源利用率得到了大幅提升,以下是单体架构、分布式架构、微服务架构以及容器化架构资源利用率使用情况

单体架构到云原生架构的演进历程_软件架构_13

单体架构到云原生架构的演进历程_软件架构_14

单体架构到云原生架构的演进历程_微服务_15

基础设施与软件形态进化

单体架构到云原生架构的演进历程_分布式架构_16

更多精彩请关注微信公众号DevAiOpsClub

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

QjisLJavkeFB