云原生架构的发展历史1

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 云原生架构的发展历史1

1 单机小型机时代

第一个计算机网络诞生于1969年,也就是美军的阿帕网,阿帕网能够实现与其它计算机进行联机操作,但是早期仅仅是为了军事目的而服务

2000年初,中国的网民大约890万,很多人都不知道互联网为何物,因此大多数服务业务单一且简单,采用典型的单机+数据库模式,所有的功能都写在一个应用里并进行集中部署

论坛业务、聊天室业务、邮箱业务全部都耦合在一台小型机上面,所有的业务数据也都存储在一台数据库上。

2 垂直拆分

随着应用的日益复杂与多样化,开发者对系统的容灾,伸缩以及业务响应能力有了更高的要求,如果小型机和数据库中任何一个出现故障,整个系统都会崩溃,若某个板块的功能需要更新,那么整个系统都需要重新发布,显然,对于业务迅速发展的万物互联网时代是不允许的。

如何保障可用性的同时快速响应业务的变化,需要将系统进行拆分,将上面的应用拆分出多个子应用。

优点:应用跟应用解耦,系统容错提高了,也解决了独立应用发布的问题

应用垂直拆分解决了应用发布的问题,但是随着用户数量的增加,单机的计算能力依旧是杯水车薪

3 集群化负载均衡架构

用户量越来越大,就意味着需要更多的小型机,但是小型机价格昂贵,操作维护成本高。

此时更优的选择是采用多台PC机部署同一个应用的方案,但是此时就需要对这些应用做负载均衡,因为客户端不知道请求会落到哪一个后端PC应用上的。

负载均衡可以分为硬件层面和软件层面。

硬件层面:F5

软件负载层面:LVS、Nginx、Haproxy

负载均衡的思想:对外暴露一个统一的接口,根据用户的请求进行对应规则转发,同时负载均衡还可以做限流等等

有了负载均衡之后,后端的应用可以根据流量的大小进行动态扩容,我们称为"水平扩展"

阿里巴巴在2008提出去“IOE”,也就是IBM小型机、Oracle数据库,EMC存储,全部改成集群化负载均衡架构,在2013年支付宝最后一台IBM小型机下线

优点:应用跟应用解耦,系统容错提高了,也解决了独立应用发布的问题,同时可以水平扩展来提供应用的并发量

4 服务化改造架构

虽然系统经过了垂直拆分,但是拆分之后发现在论坛和聊天室中有重复的功能,比如,用户注册、发邮件等等,一旦项目大了,集群部署多了,这些重复的功能无疑会造成资源浪费,所以会把重复功能抽取出来,名字叫"XX服务(Service)"

为了解决服务跟服务如何相互调用,需要一个程序之间的通信协议,所以就有了远程过程调用(RPC),作用就是让服务之间的程序调用变得像本地调用一样的简单

优点:在前面的架构之上解决了业务重用的问题

5 服务治理

随着业务的增大,基础服务越来越多,调用网的关系由最初的几个增加到几十上百,造成了调用链路错综复杂,需要对服务进行治理。

服务治理要求:

1、当我们服务节点数几十上百的时候,需要对服务有动态的感知,引入了注册中心

2、当服务链路调用很长的时候如何实现链路的监控

3、单个服务的异常,如何能避免整条链路的异常(雪崩),需要考虑熔断、降级、限流

4、服务高可用:负载均衡

典型框架比如有:Dubbo,默认采用的是Zookeeper作为注册中心。

6 微服务时代

分布式微服务时代

微服务是在2012年提出的概念,微服务的希望的重点是一个服务只负责一个独立的功能。

拆分原则,任何一个需求不会因为发布或者维护而影响到不相关的服务,一切可以做到独立部署运维。

比如传统的“用户中心”服务,对于微服务来说,需要根据业务再次拆分,可能需要拆分成“买家服务”、“卖家服务”、“商家服务”等。

典型代表:Spring Cloud,相对于传统分布式架构,SpringCloud使用的是HTTP作为RPC远程调用,配合上注册中心Eureka和API网关Zuul,可以做到细分内部服务的同时又可以对外暴露统一的接口,让外部对系统内部架构无感,此外Spring Cloud的config组件还可以把配置统一管理。

马丁大师对微服务的定义:https://martinfowler.com/articles/microservices.html

微服务真正定义的时间是在2014年

The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing

大概意思:可独立部署服务,服务会越来越细

spring cloud地址:https://spring.io/projects/spring-cloud

7 服务网格新时期 (service mesh)

7.1 背景

早期

我们最开始用Spring+SpringMVC+Mybatis写业务代码

微服务时代

微服务时代有了Spring Cloud就完美了吗?不妨想一想会有哪些问题?

(1)最初是为了业务而写代码,比如登录功能、支付功能等,到后面会发现要解决网络通信的问题,虽然有 Spring Cloud里面的组件帮我们解决了,但是细想一下它是怎么解决的?在业务代码里面加上spring cloud maven依赖,加上spring cloud组件注解,写配置,打成jar的时候还必须要把非业务的代码也要融合在一起,称为“侵入式框架”;

(2)微服务中的服务支持不同语言开发,也需要维护不同语言和非业务代码的成本;

(3)业务代码开发者应该把更多的精力投入到业务熟悉度上,而不应该是非业务上,Spring Cloud虽然能解决微服务领域的很多问题,但是学习成本还是较大的;

(4)互联网公司产品的版本升级是非常频繁的,为了维护各个版本的兼容性、权限、流量等,因为Spring

Cloud是“代码侵入式的框架”,这时候版本的升级就注定要让非业务代码一起,一旦出现问题,再加上多语言之间的调用,工程师会非常痛苦;

(5)其实我们到目前为止应该感觉到了,服务拆分的越细,只是感觉上轻量级解耦了,但是维护成本却越高了,那么怎么 办呢?

我们不是说spring cloud不好,只是为了引出service mesh, 目前spring cloud微服务还是比较主流的, 我们指出spring cloud的不好也只是为了突出service mesh的优点

问题解决思路

  • 本质上是要解决服务之间通信的问题,不应该将非业务的代码融合到业务代码中
  • 也就是从客户端发出的请求,要能够顺利到达对应的服务,这中间的网络通信的过程要和业务代码尽量无关
服务通信无非就是服务发现、负载均衡、版本控制等等
  • 在很早之前的单体架构中,其实通信问题也是需要写在业务代码中的,那时候怎么解决的呢?

解决方案:把网络通信,流量转发等问题放到了计算机网络模型中的TCP/UDP层,也就是非业务功能代码下沉,把这些网络的问题下沉到计算机网络模型当中,也就是网络七层模型
网络七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

思考:

我们是否也可以把每个服务配置一个代理,所有通信的问题都交给这个代理去做,就好比大家熟悉的nginx,haproxy其实它们做反向代理把请求转发给其他服务器,也就为 Service Mesh的诞生和功能实现提供了一个解决思路

7.2 SideCar

它降低了与微服务架构相关的复杂性,并且提供了负载平衡、服务发现、流量管理、电路中断、遥测、故障注入等功能特性。

Sidecar模式是一种将应用功能从应用本身剥离出来作为单独进程的方式。该模式允许我们向应用无侵入添加多种功能,避免了为满足第三方组件需求而向应用添加额外的配置代码。

很多公司借鉴了Proxy模式,推出了Sidecar的产品,比如像Netflix的Prana,蚂蚁金服的SofaMesh

服务业务代码与Sidecar绑定在一起,每个服务都配置了一个Sidecar代理,每个服务所有的流量都经过sidecar,sidecar帮我们屏蔽了通信

总结:可以理解成是代理,控制了服务的流量的进出,sidecar是为了通用基础设施而设计,可以做到与公司框架技术无侵入性

SideCar的探索之路还在继续

很多公司借鉴了Proxy模式,推出了Sidecar的产品,比如像Netflix的Prana,蚂蚁金服的SofaMesh
2014年 Netflix发布的Prana
2015年 唯品会发布local proxy
2016年 Twitter的基础设施工程师发布了第一款Service Mesh项目:Linkerd (所以下面介绍Linkerd)


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
4天前
|
运维 Cloud Native 云计算
云原生之旅:从容器化到微服务架构的演进之路
在数字化浪潮中,云原生技术如同星辰大海中的灯塔,为航船指引方向。本文将带你穿梭于云计算的世界,探索从容器化技术到微服务架构的变革旅程。我们将一窥云原生如何助力企业灵活应对快速变化的市场需求,以及在这一过程中,开发者和运维人员是如何成为时代变革的弄潮儿。让我们一同启航,驶向云原生的广阔天地。
|
1天前
|
运维 Cloud Native 云计算
云原生之旅:从容器化到微服务架构
【9月更文挑战第9天】在数字化转型的浪潮中,云原生技术成为推动企业IT革新的关键力量。本文将通过浅显易懂的语言和生动的比喻,带领读者探索云原生的核心概念、关键技术及实践路径,揭示如何在云计算时代构建灵活、高效、可靠的应用系统。你将了解到,正如甘地所言“你必须成为你希望在世界上看到的改变”,在云原生的世界里,每一位开发者和技术决策者都扮演着塑造未来的角色。
|
2天前
|
资源调度 Cloud Native 安全
云原生时代的微服务架构演进之路
【9月更文挑战第9天】在云计算技术不断演进的今天,云原生成为了推动现代软件开发的关键力量。本文将通过浅显易懂的语言和生动的比喻,带领读者一探云原生时代下微服务架构的发展脉络,揭示如何在云平台上构建、部署和管理微服务应用。我们将从微服务的诞生谈起,逐步深入到容器化、服务网格等高级话题,并以代码示例为引导,展示云原生微服务的实践之道。
|
3天前
|
Cloud Native 持续交付 云计算
云原生技术在现代IT架构中的革新角色
随着数字化转型的浪潮席卷全球,企业对信息技术的需求日益增长。本文将探讨云原生技术如何推动现代IT架构的创新和优化,包括容器化、微服务架构、持续集成与持续部署(CI/CD)等核心概念。通过实际案例分析,我们将了解这些技术是如何帮助企业提升灵活性、加速产品上市时间并降低运营成本的。文章旨在为读者提供云原生技术的全面视角,揭示其在现代IT战略中不可或缺的地位。
|
6天前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构实践
【9月更文挑战第5天】随着云计算技术的飞速发展,云原生已成为现代软件开发的重要趋势。本文将深入探讨在云原生环境下,如何有效实施微服务架构,包括服务拆分、容器化部署、持续集成与交付等关键环节。通过具体案例,我们将展示如何在云平台上构建弹性、可扩展的微服务应用,并讨论在此过程中可能遇到的挑战及解决策略。
|
4天前
|
监控 Cloud Native 安全
云原生时代的微服务架构实践
【9月更文挑战第6天】在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性成为企业架构升级的首选。本文将通过浅显易懂的语言和生动的比喻,带你一探微服务架构的世界,从理论到实践,逐步揭示如何利用云原生技术构建高效、可靠的微服务系统,同时穿插代码示例,为有志于云原生领域发展的技术人员提供一份实操指南。
20 2
|
5天前
|
运维 Cloud Native 持续交付
云原生时代下的微服务架构实践
在数字化转型的浪潮中,云原生技术以其高效、灵活的特性成为企业IT架构升级的首选。本文将通过深入浅出的方式,探讨云原生环境下微服务架构的设计原则、关键技术及实施策略,旨在为读者提供一条清晰的技术路线图,帮助理解和掌握在云平台上构建和管理微服务的实用方法。
|
7天前
|
Kubernetes Cloud Native Docker
云原生技术:容器化与微服务架构的融合之道
【9月更文挑战第4天】在数字化时代的浪潮下,企业追求敏捷、高效、可扩展的IT架构成为共识。云原生技术作为现代软件部署的黄金标准,其核心理念在于推动应用的快速迭代与无缝迁移。本文将深入探讨云原生技术的精髓——容器化与微服务架构如何相互促进,共同构建起适应云计算环境的应用生态系统。我们将通过实际案例,揭示如何在云平台上利用这些技术实现服务的解耦、弹性伸缩及自动化管理,进而提升企业的竞争力。
|
11天前
|
Kubernetes Cloud Native 调度
云原生技术实践:构建高效、可扩展的微服务架构
本文深入探讨了云原生技术在现代软件架构中的应用,特别是如何利用这些技术构建高效、可扩展的微服务架构。文章首先介绍了云原生的基本概念和优势,然后通过一个实际案例,展示了如何使用Kubernetes和Docker等工具来部署和管理微服务。最后,文章还讨论了云原生技术面临的挑战和未来的发展趋势。 【8月更文挑战第31天】
|
11天前
|
Kubernetes Cloud Native Docker
探索云原生技术:从容器化到微服务架构
【8月更文挑战第31天】云原生技术正改变着软件开发和运维的方式,它让应用更加灵活、可扩展且易于管理。本文将深入探讨容器化如何助力应用快速部署,以及微服务架构在提升系统弹性和可维护性方面的作用。我们将一起学习Docker和Kubernetes的基础使用,并通过实际代码演示如何构建一个简单的微服务应用。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供宝贵的知识和技能。