基础架构组件选型及服务化
常见的分布式基础架构组件
- 分布式服务化框架,业界开源产品比如 Dubbo、Spring Cloud 这样的框架;
- 分布式缓存及框架,业界如 Redis、Memcached,框架如 Codis 和 Redis Cluster;
- 数据库及分布式数据库框架,这两者是密不可分的,数据库如 MySQL、MariaDB 等,中间件如淘宝 TDDL(现在叫 DRDS)、Sharding-JDBC 等。当前非常火热的 TiDB,就直接实现了分布式数据库的功能,不再额外选择中间件框架;
- 分布式的消息中间件,业界如 Kafka、RabbitMQ、ActiveMQ 以及 RocketMQ 等;
- 前端接入层部分,如四层负载 LVS,七层负载 Nginx 或 Apache,再比如硬件负载 F5 等。
上面是几类主要的基础架构组件,为了便于理解以开源产品举例。但在实际场景中,很多公司为了满足业务上的个性化需求,会自己研发一些基础组件,比如服务化框架、消息中间件等,这个情况在有一定技术实力的公司里比较常见。不过大部分情况下,会基于这些开源产品做一些封装或局部的改造,以适应我们的业务。
基础架构组件的选型问题
大概都会遇到同样的问题,是自研还是选择开源产品?有这么多的开源产品到底该选哪一个?
从单纯的技术选型上来看,选择什么语言并没有严格的标准。而且在技术团队中,也应该鼓励技术多样性和尝试新技术。不过这里要有个度,假设没有统一标准的约束会带来什么问题。
1.开发层面
业务开发同学将大量的精力投入到基础组件和开源产品的研究、研发以及规模化之后的运维上,再加上产品形态的不统一,导致需要在技术层面的协作上做大量适配工作,而且经验还无法互通。
好不容易在一个产品上摸索了很长时间,踩了很多坑,积累了宝贵的经验,结果发现另外一个产品也要经历同样的一个过程,积累的经验依然不能互通和传递。
2.运维层面
当我们考虑建设一个统一的效率和稳定体系时,发现基础组件不统一,这个时候就需要做大量的针对不同组件的适配工作。
比如我们要在发布系统中做服务上下线处理,就要针对多个微服务化框架做适配。再举个稳定性上全链路跟踪的例子,为了在分布式复杂调用场景下的链路跟踪和问题定位,我们会在服务化框架中统一做打点功能,这样才不需要侵入业务逻辑。
就这样一个工作,如果服务化框架不统一,就需要到每个框架里都去开发一遍。不过现实中遇到的实际问题是,整个链路就是会有这样那样的情况而串联不起来。
同时还会出现维护投入不足,那就必然导致故障频发等一系列问题,团队内部也会因为问题定位不清楚而形成扯皮推诿的不良氛围。
所以,这个时候我们需要做的,就是对基础架构有统一的规划和建设。原则上,每种基础组件只允许一种选型,至少就能满足 90% 甚至更多的应用场景。
基础架构的服务化
对基础架构组件做了统一标准之后,下一步要做的就是服务化。因为这些组件都只提供了简单的维护功能,还有很多都是命令行层面的维护,这时要做的就是把这些组件提供的维护 API 进行封装,以提供更加便捷的运维能力。
以 Redis 缓存为例。
- 创建和容量申请;
- 容量的扩容和缩容,新增分片的服务发现及访问路由配置;
- 运行指标监控,如 QPS、TPS、存储数据数量等等;
- 主备切换能力等等。
以上这些,假设都依赖 Redis 提供的原生能力来做,基本是不可维护的。所以必须要基于这些原生能力进行封装,结合运维场景,将能力服务化,这样就大大提升了使用方的便利性。
要做的事情,可以归纳为两步:第一步是基础架构标准化,第二步是基础架构服务化。
运维必须要有意识去做的两件事情。
- 参与制定基础架构标准,并强势地约束。在这里运维作为线上稳定的 Owner,发挥约束作用有可能会比业务架构师这样的角色更为有效。另外,由于历史原因或其他种种因素造成的已有架构标准不统一的问题,是需要开发和运维共同合作去改造的。这里面如何保持良好的协作,制定统一的路线图也是非常重要的。所以这里强制约束是一方面,同时也要提供工具化的手段来支持开发的改造,也就是下面这个动作。
- 基础架构的服务化平台开发,目标是平台自助化,让开发依赖平台的能力自助完成对基础组件的需求,而不是依赖运维的人。这个事情是驱动运维转型和改进的动力,也是运维能够深入了解架构组件细节的有效途径。同时,要注意到,如果不朝着服务化方向发展,运维将始终被拖累在这些基础组件的运维操作上。
此文章为2月Day21 学习笔记,内容来源于极客时间《赵成的运维体系管理课》,推荐该课程。
相关文章:
基础架构组件选型及服务化
常见的分布式基础架构组件 分布式服务化框架,业界开源产品比如 Dubbo、Spring Cloud 这样的框架;分布式缓存及框架,业界如 Redis、Memcached,框架如 Codis 和 Redis Cluster;数据库及分布式数据库框架,这两…...
leetcode-每日一题-1247(中等,数学逻辑)
这道题当理解清了意思之后,只要是s1和s2的某位置的字母一样时我们就可以忽视比如s1"xxxxxxyyyy"; 就可以看成s1"xxxyyyy";s2"xxxyyyxxxx"; s2"yyyxxxx";其次就是只有当x和y位置差异产生的数量同奇偶的时候才可以构成相等字…...
前端面试题 —— 计算机网络(一)
目录 一、常见的HTTP请求头和响应头 二、HTTP状态码304是多好还是少好? 三、OPTIONS请求方法及使用场景 四、对keep-alive的理解 五、HTTP协议的优点和缺点 六、URL有哪些组成部分? 七、HTTPS通信(握手)过程 八、HTTPS的特…...
分布式-分布式缓存笔记
分布式系统缓存 缓存分类 前端缓存 前端缓存包括页面和浏览器缓存,如果是 App,那么在 App 端也会有缓存。当你打开商品详情页,除了首次打开以外,后面重复刷新时,页面上加载的信息来自多种缓存。 页面缓存属于客户端…...
【反序列化漏洞-01】为什么要序列化
为什么要序列化百度百科上关于序列化的定义是,将对象的状态信息转换为可以存储或传输的形式(字符串)的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区(非关系型键值对形式的数据库Redis,与数组类似)。以后,可以通过…...
用c语言模拟实现常用字符串函数
目录 一.常用字符串函数介绍 1.strlen 2. strcpy 3.strcmp 4.strcat 5.strstr 二.模拟实现常用字符串函数 1.strlen 2.strcpy 3.strcmp 4.strcat 5.strstr 一.常用字符串函数介绍 1.strlen 字符串strlen是用来求字符串长度的,我们可以打开cpp网站查看有关…...
在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理
大家好,我是 17。 Flutter WebView 一共写了四篇文章 在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理在 Flutter 中使用 webview_flutter 4.0 | js 交互Flutter WebView 性能优化,让 h5 像原生页面一样优秀,已入选 掘金一周 …...
JavaWeb--Servlet
Servlet1 简介2 快速入门3 执行流程4 生命周期5 方法介绍6 体系结构7 urlPattern配置8 XML配置目标: 理解Servlet的执行流程和生命周期掌握Servlet的使用和相关配置 1 简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。 使…...
Linux启动过程
theme: channing-cyan 两种启动方式 传统启动方式(LEGACYMBR) 指传统BIOS启动方式,存在一些不足:比如最大只支持2TB磁盘,磁盘最多四个分区,且不支持图形操作 UEFIGPT方式 是新式的启动方式,…...
面试资料整理——C++
C/C难题的高赞回答「中文版」 https://mp.weixin.qq.com/s/KBEnrRVb1T6LfwHgaB4jiQ C/C难题的高赞回答「中文版」,帮你整理好了 https://mp.weixin.qq.com/s/o9MdENiasolVT-Fllag2_Q C语言与C面试知识总结 https://mp.weixin.qq.com/s/MGSoPqPv_OzyWBS5ZdnZgw 程…...
【ArcGIS Pro二次开发】(9):GeoProcessing工具和自定义工具的调用
ArcGIS Pro自带了1000种以上的GeoProcessing工具,几乎可以实现所有你想要做的事。 ArcGIS Pro的二次开发并不需要我们从底层做起,很多功能只要学会调用工具并组合使用,就完全可以实现。 下面介绍如何调用系统自带的GeoProcessing工具&#x…...
皕杰报表斜线单元格、图表里或导出pdf的中文显示小方块解决方案
在皕杰报表中,如果含有斜线的单元格、统计图的报表、或导出pdf时,汉字变成小方框,这往往是服务器端操作系统的中文安装包没有装全,导致报表里用到的字体在服务器端的操作系统里找不到,因此成了小方块。因为斜线单元格里…...
python读写hdfs文件的实用解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...
RK3399+FPGA+MIPI 方案细节之subLVDS to MIPI处理
#CROSSLINK系列 #CROSSLINK vs XO3L 总的来说XO3L的灵活性更强,更近似于一片通用的CPLD;CROSSLINK专用性更强。 针对subLVDS转换到MIPI的需求,CROSSLINK比较有优势,因为集成度更高,所以稳定性也更高。 #要点 #crossl…...
Vue组件是怎样挂载的
我们先来关注一下$mount是实现什么功能的吧: 我们打开源码路径core/instance/init.js: export function initMixin (Vue: Class<Component>) {......initLifecycle(vm)// 事件监听初始化initEvents(vm)initRender(vm)callHook(vm, beforeCreate)initInject…...
gcc: 编译选项:-fdelete-null-pointer-checks、-fno-delete-null-pointer-checks
文章目录 说明实例:Linux 里的使用chatGPT说明 这个说明写的有些理解不了,可能还是不太理解(有未知的东西在里面?)。但是从这个编译选项的命名上来看还是非常明确,就是删除不必要的空指针检查。使用时要小心了,这个优化超出了编译的界限! -fdelete-null-pointer-check…...
周赛334(前缀和、贪心+双指针、Dijkstra求最短路径、二分答案)
文章目录[6369. 左右元素和的差值](https://leetcode.cn/problems/left-and-right-sum-differences/)前缀和[6368. 找出字符串的可整除数组](https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/)超长整数如何取余?[6367. 求出最多标记下标](ht…...
imx6ull——I2C驱动
I2C基本介绍 SCL 为高电平,SDA 出现下降沿:起始位 SCL 位高电平,SDA出现上升沿:停止位 主机——从机地址(ack)——寄存器地址(ack)——数据(ack) 重点:先是写,…...
Spring Cache的基本使用与分析
概述 使用 Spring Cache 可以极大的简化我们对数据的缓存,并且它封装了多种缓存,本文基于 redis 来说明。 基本使用 1、所需依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…...
【安全知识】——端口复用隐藏后门
作者名:白昼安全主页面链接: 主页传送门创作初心: 以后赚大钱座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日鸡汤: 精彩的人生是在有限的生命中实现无限价值端口复用是…...
Tina_Linux量产测试使用指南_new
OpenRemoved_Tina_Linux_量产测试_使用指南_new 1 概述 文档主要描述如何配置tinatest 并搭建量产测试环境。 1.1 编写目的 • 介绍量产配置方法; • 介绍量产测试环境搭建流程; • 介绍如何使用dragonMAT 软件; • 方便开发人员按照说明…...
STC32单片机 普通 I/O 口中断功能介绍和使用
STC32单片机 普通 I/O 口中断功能和使用✨STC32单片机普通 I/O 口中断,不是传统外部中断. 🔖手册上描述:STC32G 系列支持所有的 I/O 中断,且支持 4 种中断模式:下降沿中断、上升沿中断、低电平中断、高电平中断。每组 …...
计算机学生如何找到第一份实习?
作为一名计算机专业的学生,找到第一份实习是非常重要的一步,它不仅可以帮助你更好地了解行业,增加实践经验,还可以为即将到来的校招提供有力支持。计算机专业的校招,每年都在变得越来越卷。5年前,可能你只要…...
《Python机器学习》基础代码
1,要学习Python机器学习,第一步就是读入数据,这里我们以读入excel的数据为例,利用jupyter notebook来编码,具体教程看这个视频 推荐先上传到jupyter notebook,再用名字.xlsx来导入 Jupyter notebook导入Excel数据的两种方法介绍_哔哩哔哩_bilibili 2,…...
【前端】JS异步加载
文章目录为什么要异步加载如何实现异步加载参考为什么要异步加载 两个原因其实是一个意思。 原因1: JS是单线程的语言,它会同步的执行代码,从上往下执行 但是,一旦网络不好,或要加载的js文件过大的话,会…...
【MySQL】SQL语言的五个部分
DQL 数据查询语言(Data Query Language,DQL):DQL主要用于数据的查询,其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据。 DML 数据操作语言(Data Manipulation La…...
详细的IO面试题汇总
IO 流简介 IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在…...
在Linux终端管理你的密码!
大家好,我是良许。 现在是互联网时代,我们每天都要跟各种 APP 、网站打交道,而这些东西基本上都需要注册才可以使用。 但是账号一多,我们自己都经常记不清对应的密码了。有些小伙伴就一把梭,所有的账号密码都是一样。…...
【设计模式】策略模式在Java工程中应用
在之前的文章中,曾经给大家介绍过策略模式:【设计模式】策略模式,在该篇文章中,我们曾很清楚的说到,策略模式主要解决的问题是:在有多种算法相似的情况下,解决使用 if...else 所带来的复杂和难以…...
Linux驱动开发工程师需要掌握哪些技能?
一、前言 Linux驱动开发是一项高度技术性的工作,需要深厚的编程技能和对计算机硬件的深入理解。随着物联网、人工智能等领域的快速发展,Linux驱动开发工程师的需求日益增加。在这篇文章中,我将为您介绍一条Linux驱动开发工程师的学习路线&am…...
学生做兼职的网站/宝塔建站系统
这几日,看了一些博客。发现在一些博客的底部添加了一些版权信息,很新颖。如下图: 写信给博客园的客服,问如何做出来的。回复是添加自己的“签名”。无语了,只能自己研究了。 在分析了别人的页面后,终于摸索…...
东莞营销网站建设/百度搜索推广采取
与非网 7 月 2 日讯,据外媒报道,根据显示屏分析师罗斯 . 杨(Ross Young)的说法,苹果公司尚未发布的产品 iPhone12不会配置 120Hz 动态刷新的屏幕。Young 之前就曾表示,苹果将不采用高刷技术,除非 LTPO 技术能够被量产。…...
网站集约化建设意见和建议/免费推广工具
1、 清空iptables 设置。iptables -F iptables -X iptables -Z2、配置允许(自己)22登录端口进入iptables -t filter -A INPUT -p tcp --dport 22 -s 10.10.70.103 -j ACCEPT3、设置允许本机lo通信。iptables -t filter -A INPUT -i lo -j ACCEPTiptables -t filter -…...
web网站双语切换怎么做/搜索引擎谷歌
0882reachableSubNodes 细分图中的可到达结点 1 题目 https://leetcode.cn/problems/reachable-nodes-in-subdivided-graph/ 2 解题思路 1 解题思路:类似的题目:https://leetcode.cn/problems/partition-array-into-two-arrays-to-minimize-sum-diff…...
一个网站拿到手里想做优化第一步怎么做/seo研究协会网
2019独角兽企业重金招聘Python工程师标准>>> 11行代码就写出了一个配置文件的解析器。 def loadUserInfo(fileName):userinfo {}file open(fileName, "r")while file:line file.readline()if len(line) 0:breakif line.startswith(#):continuekey, va…...
政府网站建设重点突出/还有哪些平台能免费营销产品
(1)汇聚和接入之间运行ospf并且是以太网链路,如何加快收敛,请举例? a)修改网络类型为P2P,将OSPF的网络类型修改为P2P可以减少DR/BDR选举的时间,直接建立邻接关系,加快收敛速度; b)OSPF开启BFD,双向转发检测BFD是一种用于检测转发引擎之间通信故障的检测机制。BFD对…...