代码编织梦想

架构的演进

传统单体应用架构

十多年前主流的应用架构都是单体应用,部署形式就是一台服务器加一个数据库,在这种架构下,运维人员会小心翼翼地维护这台服务器,以保证服务的可用性。

单体应用架构面临的问题

随着业务的增长,这种最简单的单体应用架构很快就面临两个问题。首先,这里只有一台服务器,如果这台服务器出现故障,例如硬件损坏,那么整个服务就会不可用;其次,业务量变大之后,一台服务器的资源很快会无法承载所有流量。

解决这两个问题最直接的方法就是在流量入口加一个负载均衡器,使单体应用同时部署到多台服务器上,这样服务器的单点问题就解决了,与此同时,这个单体应用也具备了水平伸缩的能力。

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

Github地址

如果访问不了Github,可以访问gitee地址。

gitee地址

微服务架构

1. 微服务架构演进出通用服务

随着业务的进一步增长,更多的研发人员加入到团队中,共同在单体应用上开发特性。由于单体应用内的代码没有明确的物理边界,大家很快就会遇到各种冲突,需要人工协调,以及大量的 conflict merge 操作,研发效率直线下降。

因此大家开始把单体应用拆分成一个个可以独立开发、独立测试、独立部署的微服务应用,服务和服务之间通过 API 通讯,如 HTTP、GRPC 或者 DUBBO。基于领域驱动设计中 Bounded Context 拆分的微服务架构能够大幅提升中大型团队的研发效率。

2. 微服务架构给运维带来挑战

应用从单体架构演进到微服务架构,从物理的角度看,分布式就成了默认选项,这时应用架构师就不得不面对分布式带来的新挑战。在这个过程中,大家都会开始使用一些分布式服务和框架,例如缓存服务 Redis,配置服务 ACM,状态协调服务 ZooKeeper,消息服务 Kafka,还有通讯框架如 GRPC 或者 DUBBO,以及分布式追踪系统等。

除分布式环境带来的挑战之外,微服务架构给运维也带来新挑战。研发人员原来只需要运维一个应用,现在可能需要运维十个甚至更多的应用,这意味着安全 patch 升级、容量评估、故障诊断等事务的工作量呈现成倍增长,这时,应用分发标准、生命周期标准、观测标准、自动化弹性等能力的重要性也更加凸显。

云原生

1. 基于云产品架构

一个架构是否是云原生,就看这个架构是否是长在云上的,这是对“云原生”的简单理解。这个“长在云上”不是简单地说用云的 IaaS 层服务,比如简单的 ECS、OSS 这些基本的计算存储;而是应该理解成有没有使用云上的分布式服务,比如 Redis、Kafka 等,这些才是直接影响到业务架构的服务。微服务架构下,分布式服务是必要的,原来大家都是自己研发这样的服务,或者基于开源版本自己运维这样的服务。而到了云原生时代,业务则可以直接使用云服务。

另外两个不得不提的技术就是 Docker 和 Kubenetes,其中,前者标准化了应用分发的标准,不论是 Spring Boot 写的应用,还是 NodeJS 写的应用,都以镜像的方式分发;而后者在前者的技术上又定义了应用生命周期的标准,一个应用从启动到上线,到健康检查,再到下线,都有了统一的标准。

2. 应用生命周期托管

有了应用分发的标准和生命周期的标准,云就能提供标准化的应用托管服务。包括应用的版本管理、发布、上线后的观测、自愈等。例如对于无状态的应用来说,一个底层物理节点的故障根本不会影响到研发,因为应用托管服务基于标准化应用生命周期可以自动完成腾挪工作,在故障物理节点上将应用的容器下线,在新的物理节点上启动同等数量的应用容器。可以看出,云原生进一步释放了价值红利。

在此基础上,由于应用托管服务能够感知到应用运行期的数据,例如业务流量的并发、cpu load、内存占用等,业务就可以配置基于这些指标的伸缩规则,再由平台执行这些规则,根据业务流量的实际情况增加或者减少容器数量,这就是最基本的 auto scaling——自动伸缩。这能够帮助用户避免在业务低峰期限制资源,节省成本,提升运维效率。

本文总结

在架构的演进过程中,研发运维人员逐渐把关注点从机器上移走,希望更多地由平台系统管理机器,而不是由人去管理,这就是一个对 Serverless 的朴素理解。

本文部分内容摘抄自网络

最后给大家分享一个Github仓库,上面有大彬整理的300多本经典的计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~

Github地址

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Tyson0314/article/details/129828925

grpc_uxff的博客-爱代码爱编程_grpc

gRPC分享 概述 gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得

一个恋爱小故事告诉你什么是gRPC?!-爱代码爱编程

RPC 对RPC不了解的人,或许会纠结其与TCP、HTTP等的关系。后者是网络传输中的协议,而RPC是一种设计、实现框架,通讯协议只是其中一部分,RPC不仅要解决协议通讯的问题,还有序列化与反序列化,以及消息通知。 一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,ClientOptions以及ServerOptions

Grpc概述-爱代码爱编程

前言 gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 《HTTP/2》 设计。目前提供 C、Java 和 Go 语言版本。 快速开始 主要分为以下几个步骤 引入依赖及插件 grpc对《序列化工具-Protobuf》的插件进行扩展,生成客户端,服务端的基础部份 <dependencies> <depe

SpringCloud 简介-爱代码爱编程

超详细的Java知识点路线图 微服务架构 互联网应用架构演进 ​ 随着互联网的发展,用户群体逐渐扩大,网站的流量成倍增长,常规的单体架构已无法满足请求压力和业务的快速迭代,架构的变化势在必行。下面我们就以系统网的架构演进为例,从最开始的单体架构分析,一步步的到现在的微服务架构。 单体应用架构 ​ 在诞生之初,系统的用户量、数据量规模都比较小,项目

grpc原理及四种实现方式-爱代码爱编程

文章目录 1. rpc概述1.1 rpc和http区别2. grpc介绍调用过程2.1. 使用原理2.2 服务定义2.3. 同步与异步3. rpc的种类3.1 一元 RPC3.2 服务器流 RPC3.3 客户流 RPC3.4 双向流 RPC4. 操作4.1 RPC超时4.2 RPC 终止4.3 RPC取消4.4 特性 1. rpc概述 RPC

gRPC的概念理解-爱代码爱编程

1.gRPC概述 gRPC是由Google开发的一款语言中立、平台中立、开源的远 程过程调用( RPC)技术,主要用来解决性能损失的问题。 gRPC使客户端和服务端应用程序可以透明地进行通信,并简 化了连接系统的构建。它使用HTTP/2作为通信协议,使用Protocol Buffers作为序列化协议。   2.gRPC的优势 gRPC是由Google

架构演变过程-爱代码爱编程

架构演变过程 一、架构演变过程 1、单体架构 我们工作中最先接触的单体架构,整个系统就只有一个工程,打包往往是打成了war包,然后部署到单一tomcat上面,这种就是单体架构。 这种架构适合比较小型的系统,比如以前的老系统,比如公司的内部OA系统等等,是一个典型的传统项目的结构。 单体应用架构也就是在早期所学习的JavaEE知识SSH或者SSM架

rpc 和 grpc 简介汇总_大囚长的博客-爱代码爱编程

Rpc 基本概念 RPC(Remote Procedure Call)远程过程调用是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议,简单的理解是一个节点请求另一个节点提供的服务。RPC 只是一套协议

什么是grpc_科科是超人的博客-爱代码爱编程

grpc在Java中的应用 什么是grpc?grpc相对于以往的通讯有什么优点? 什么是grpc? grpc是谷歌提供的一种服务间的通讯协议,本质上是一个高性能的、开源的、普遍通用的RPC框架. 用 gr

大数据架构演变_lg_985938339的博客-爱代码爱编程

大数据架构演变 一、传统离线大数据架构二、Lambda架构(离线处理+实时链路)-传统实时开发三、Lambda架构(离线数仓+实时数仓)四、Kappa架构五、架构选择:六、湖仓一体(流批一体)实时数仓架构七、从普通项

grpc 入门_grpc [{ "resource": "/home/hesk/levers/proxy/src/p-爱代码爱编程

RPC基本概念 RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。 RPC是一种技术思想而非一种规范或协议,常见的RPC技术和框架又: 应用及的服务框架:阿里的Dubbo\Dubbox、Google gRPC、Spring Boot/Spring Cloud、