【鹅厂摸鱼日记(一)】(工作篇)认识八大技术架构

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【鹅厂摸鱼日记(一)】(工作篇)认识八大技术架构


1. 前言

这不是前几天刚拿到鹅厂的offer嘛,由于想表达我对工作的热情,于是我主动向我上司请缨想要提前了解一下公司的业务,不问不知道,一问吓一跳,我上司也是给我抛出了一堆概念,包括RPC,gRPC,k8s,docker还有open telemetry,我心里一惊,哥们我是听都没听过啊,不知从何下手,感觉以目前的知识储备直接去学习这些东西,属于是不自量力了,于是这几天我对前面的铺垫知识进行了恶补

本章重点:

本篇文章着重讲解八大架构的演化过程,以及它们的优缺点,并且会在其中介绍负载均衡,redis,docker,以及k8s它们的定位,最后会讲解什么是分布式系统,为后面的gRPC学习打下基础


2. 架构简介&单机架构

首先第一个问题,什么是架构?

为什么要有它?

架构是指系统或应用程序的整体结构或设计,包括不同组件之间的关系、功能模块的划分、数据流程、通信协议等方面。架构设计旨在确保系统具有良好的可扩展性、可维护性、安全性和性能。在软件开发中,架构设计是非常重要的步骤,它直接影响到系统的质量和效率

现在来了解一下最简单的架构:

单机架构

即应用服务和数据库服务都在一台服务器的架构

它属于最早期,最简单的架构

现在实战中基本已经不用了

可以适合初学者来写demo

由于单机架构的缺点十分致命,所以后来又出现了许多架构,而新出现的架构又有自己的缺陷,所以技术就不断的更新迭代!


3. 应用数据分离架构&集群架构

由于单机架构的缺陷非常致命

所以将应用和数据进行分离十分重要

于是衍生出了 应用数据分离架构

一些小公司或小网站,它的并发量不大,并且预算也有限,于是选择了将应用和数据分离的做法,可以最小代价的提升系统的承载能力


显而易见,上面的架构对于少量访问量来说,是可取的,但是并发量一旦起来,这个服务器必会崩溃!所以架构又向后演进了一级

应用服务集群架构

即我无法承担大并发量,就叫上我的兄弟一起

什么是负载均衡?

一个应用对应一个服务器,而集群架构会有多个应用,即多个服务器一起运行,那么当一个请求到来时,我怎么知道哪个服务器正在运行?哪个服务器处于空闲?甚至是哪个服务器接受的任务少,就用谁这种问题,正所谓没有什么问题是加一层软件层解决不了的,所以负载均衡的作用就是一个决策层

程序员的两句真言:

  1. 我自己做不到,那就叫上我的兄弟一起抗
  2. 没有什么是加一层软件层做不到的

同理,如果一个负载均衡(比如nginx,LVS等)不足以承受百万级甚至是亿级的并发请求,那么就多用几个负载均衡,或者使用并发性更好的负载均衡


4. 读写分离&冷热分离架构

对于集群架构而言,虽然说确实解决了应用层的并发问题,但是现在新的问题出现在了数据库服务,一旦上层频繁访问数据库(读或写)就会导致整个服务变得很慢,并且一般情况下,对于服务器资源都是读多而写少,所以进化出了新的架构

读写分离架构

即将数据库的读和写放在不同服务器

将数据服务一分为二后

会出现一个主服务器和从服务器

主服务器负责写入,而从服务器负责简单读取

还是程序员两句真言,应用并不知道用户要读还是要写,所以在应用和数据间加一层软件层(例如mycat)来解决这个问题,所以实际上读写分离架构是这样的


虽然读写分离架构确实能解决数据库承载压力大的问题,但是一旦某个数据频繁的被用户读取,那么这个架构也会导致数据库的负载很高,所以推出了新的架构

冷热分离架构

即把热点数据放在缓存中

请求到来时直接去缓存中取,速度很快

把冷数据继续放在数据库磁盘

常见的缓存软件有大家熟知的redis,冷热分离架构虽然说会进一步增加服务器的成本,但是确实突破了之前的瓶颈


5. 垂直分库架构&微服务架构

由于应用层可以通过不断喊上兄弟来一起抗,所以到目前为止,整个服务的效率瓶颈都在数据库方面,而垂直分库结构就是将一个数据库分为多个库甚至多个表

分库分表:

垂直分库架构,又叫分布式数据库架构

到底什么是分布式?

系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活例子类比:为了更好的满足现实需要,一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成

并且进行了分库分表后,前面的冷热分离,以及读写分离也能套用在这个架构中


垂直分库架构的缺陷页十分明显,虽然数据库现在可无限拓展,但是代码的运维成本太高了,修改一行代码就需要整体将服务重新发布,于是又有新的架构来代替它

微服务架构

即按照业务板块来划分业务代码

使之相互之间可独立进行更新迭代

微服务架构和前面的结构的最大的区别就是,前面的架构中,每个服务器都对应用户,商品,交易三个整体的应用服务,而微服务架构则是将每个用户当作一个微服务放在一个服务器中,用户和商品要进行交互就是服务器之间进行交互


6. 容器编排架构&互联网实战

容器编排架构是目前比较成熟的架构,由于微服务拆分巨细,服务多部署时工作量大,并且容易出错,所以容器编排架构本质就是借助容器化技术(比如docker)将应用或服务打包成为镜像,然后通过容器编排工具(比如k8s)来快速的发布和部署镜像

可以将这个架构类比于发快递,你分别向北京和上海寄一件衣服一件裤子一双鞋子,一共是六件物品,那么在寄东西前你肯定需要将这六件物品两两分组,每组都有衣服裤子鞋子,然后再用顺丰发送到不同的地点,这里的分组就类似于docker,而发送快递就类似于k8s

一台服务器可以部署多个容器,而这些容器可相互交流数据,并且又相互不影响


在实际的互联网实战中,情况可能比我们学习的架构要复杂的多,但是万变不离其宗,掌握了基本的架构原理后,它再怎么拓展应用,再怎样细分数据库服务,我们都能快速掌握它的核心,下面是一些公司常用的服务,大家可以了解一下:

显而易见,统一数据服务层出现的原因就是因为下层的数据库服务很多,并且每个服务都有自己的API接口,要是程序员自己要去了解所有的数据库服务就十分的麻烦,所以增加了一层来辅助完成这一个工作


7. 总结

其实我发现,做C/C++开发的话,并不是单纯的了解语言和操作系统就可以稳住脚跟,掌握不同的架构思想以及像redis,docker,k8s,protobuf这种工具也十分重要,毕竟只是单纯写代码完成任务的时代早就过去了,公司的整个架构和业务才是重心啊



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
设计模式 SpringCloudAlibaba 负载均衡
每天打卡,跟冰河肝这些项目,技术能力嗖嗖往上提升
前几天,就有不少小伙伴问我,冰河,你星球有哪些项目呢?我想肝你星球的项目,可以吗?今天,我就给大家简单聊聊我星球里有哪些系统性的项目吧。其实,每一个项目的价值都会远超门票。
153 0
每天打卡,跟冰河肝这些项目,技术能力嗖嗖往上提升
|
6月前
|
运维 前端开发 大数据
大数据必知必会系列——面试官一问就懵:你们做过的项目技术是如何选型的?[新星计划]
大数据必知必会系列——面试官一问就懵:你们做过的项目技术是如何选型的?[新星计划]
77 0
|
6月前
|
设计模式 算法 网络协议
励志!一年时间,从小白到进入阿里核心部门,“他”的逆袭之路
注明:这是一个励志老哥给我分享的个人经历,发本文的目的是为了让大家可以参考他的学习经历,提高自己的能力!当然人外有人天外有天,大神也别打我!再次说明,我只是为了能够帮助迷茫的兄弟们!接下来以他的第一视角为大家讲述他的经历。
|
消息中间件 分布式计算 Kubernetes
爆款阿里P5到P7晋升之路,九大源码文档助我超神果然努力幸运并存
前言 相信有许多的程序员,工作了这么多年;但是依然不知道自己掌握的技术栈+项目,究竟达到了阿里的什么职级,还有薪资水平是什么样的;
|
运维 算法 架构师
又爆新作!阿里甩出架构师进阶必备神仙笔记,底层知识全梳理
据有关数据表明,目前Java程序员这个群体的数量不减反增,行业内的竞争也是越来越严重。在同一时间入行的人,经过一段时间的学习后,差距就会显示出来。其实出现这样的原因大多数都是因为学习的方向出了问题。大多数人学Java刚开始只是为了快速就业,但是在工作了之后却没有一个好的学习路线,那些其实很重要的东西只是因为工作上用不到从而忽略掉了,慢慢的才发现自己与别人之间已经存在很大差距了!
|
搜索推荐 Java 程序员
只有一个程序员开发和运营,BuiltWith网站年入1400万美元是怎么做到的?
国外有一位程序员叫 Gary Brewer,他一人撑起了一个公司,这个公司还年入 1400 万美元,约人民币 1 亿元。对此,你是啥想法?
177 0
|
设计模式 程序员 开发者
干货!攻城狮的交流分享!聊一聊开发人员快速提升自己的方式
本文分享了作为开发人员,快速提升自己的几种方式。主要包括建立一个实质性的项目,向开源项目作出自己个人的奉献,阅读高级的代码,在阅读高级的代码过程中,要考虑到应该阅读什么样的代码以及如何阅读高级代码。最后,也是很重要的是,要主要了解更多的编程设计模式和编程原理。
173 0
干货!攻城狮的交流分享!聊一聊开发人员快速提升自己的方式
|
消息中间件 缓存 中间件
来自一个阿里工作的朋友经验之谈!
第一点:就是阿里的技术。
185 0
|
人工智能 运维 监控
倒计时6天 | 运维界的绝世秘笈被我们发现了!听阿里小哥用rap为你一一道来...
运维汪:数据库四大单身神兽之一,全年无休,24小时待命,喜数据,恶bug,专注背锅数十载。
1054 0
倒计时6天 | 运维界的绝世秘笈被我们发现了!听阿里小哥用rap为你一一道来...
经验分享:5个可以轻松实践的高效工作秘诀
工作产出 = 单位时间产能 × 有效工作时间,本篇文章介绍了如何提高工作效率,希望每个人都能找到属于自己的高效之路。
1123 0
经验分享:5个可以轻松实践的高效工作秘诀