搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
运维做开发
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
02 SVN 与 Git 的优缺点_svn和git的优缺点
2
国内开源好用商城盘点—PHP_php开源电商平台
3
随机森林分类模型(python案例代码)
4
【数据结构】栈和队列的深度探索,从实现到应用详解
5
macOS Sequoia 15 beta 2 (24A5279h) ISO、IPSW、PKG 下载 (iPhone Mirroring 现已支持)_macos sequoia beta2
6
【AI大模型】如何在企业环境中部署GPT-3/GPT-4模型_企业部署gpt
7
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
8
如何利用Kali Linux进行网站渗透测试:最常用工具详解_linux漏洞扫描常用的工具以及常用命令
9
linux数据包注释,Linux网络子系统安全性模块代码详细分析之文件esp4.c中内部函数和核心代码注释...
10
STM32-ADC_stm32 adc vref
当前位置:
article
> 正文
互联网架构【服务化】
作者:运维做开发 | 2024-07-14 10:48:39
赞
踩
服务化网络架构是什么
[b]互联网高可用架构为什么要服务化?[/b]
【服务化之前高可用架构】
在服务化之前,互联网的高可用架构大致是这样一个架构:
(1)用户端是浏览器browser,APP客户端
(2)后端入口是高可用的nginx集群,用于做反向代理
(3)中间核心是高可用的web-server集群,研发工程师主要编码工作就是在这一层
(4)后端存储是高可用的db集群,数据存储在这一层
更典型的,web-server层是通过DAO/ORM等技术来访问数据库的。
可以看到,最初都是没有服务层的,此时架构会碰到一些什么痛点呢?
【架构痛点一:代码到处拷贝】
举一个最常见的业务的例子->用户数据的访问,绝大部分公司都有一个数据库存储用户数据,各个业务都有访问用户数据的需求:
在有用户服务之前,各个业务线都是自己通过DAO写SQL访问user库来存取用户数据,这无形中就导致了代码的拷贝。
【架构痛点二:复杂性扩散】
随着并发量的越来越高,用户数据的访问数据库成了瓶颈,需要加入缓存来降低数据库的读压力,于是架构中引入了缓存,由于没有统一的服务层,各个业务线都需要关注缓存的引入导致的复杂性:
对于用户数据的写请求,所有业务线都要升级代码:
(1)先淘汰cache
(2)再写数据
对于用户数据的读请求,所有业务线也都要升级代码:
(1)先读cache,命中则返回
(2)没命中则读数据库
(3)再把数据放入cache
这个复杂性是典型的“业务无关”的复杂性,业务方需要被迫升级。
随着数据量的越来越大,数据库需要进行水平拆分,于是架构中又引入了分库分表,由于没有统一的服务层,各个业务线都需要关注分库分表的引入导致的复杂性:
这个复杂性也是典型的“业务无关”的复杂性,业务方需要被迫升级。
包括bug的修改,发现一个bug,多个地方都需要修改。
【架构痛点三:库的复用与耦合】
服务化并不是唯一的解决上述两痛点的方法,抽象出统一的“库”是最先容易想到的解决:
(1)代码拷贝
(2)复杂性扩散
的方法。抽象出一个user.so,负责整个用户数据的存取,从而避免代码的拷贝。至于复杂性,也只有user.so这一个地方需要关注了。
解决了旧的问题,会引入新的问题,库的版本维护与业务线之间代码的耦合:
业务线A将user.so由版本1升级至版本2,如果不兼容业务线B的代码,会导致B业务出现问题;
业务线A如果通知了业务线B升级,则是的业务线B会无故做一些“自身业务无关”的升级,非常郁闷。当然,如果各个业务线都是拷贝了一份代码则不存在这个问题。
【架构痛点四:SQL质量得不到保障,业务相互影响】
业务线通过DAO访问数据库:
本质上SQL语句还是各个业务线拼装的,资深的工程师写出高质量的SQL没啥问题,经验没有这么丰富的工程师可能会写出一些低效的SQL,假如业务线A写了一个全表扫描的SQL,导致数据库的CPU100%,影响的不只是一个业务线,而是所有的业务线都会受影响。
【架构痛点五:疯狂的DB耦合】
业务线不至访问user数据,还会结合自己的业务访问自己的数据:
典型的,通过join数据表来实现各自业务线的一些业务逻辑。
这样的话,业务线A的table-user与table-A耦合在了一起,业务线B的table-user与table-B耦合在了一起,业务线C的table-user与table-C耦合在了一起,结果就是:table-user,table-A,table-B,table-C都耦合在了一起。
随着数据量的越来越大,业务线ABC的数据库是无法垂直拆分开的,必须使用一个大库(疯了,一个大库300多个业务表 =_=)。
[b]服务化解决什么问题?[/b]
为了解决上面的诸多问题,互联网高可用分层架构演进的过程中,引入了“服务层”。
以上文中的用户业务为例,引入了user-service,对业务线响应所用用户数据的存取。引入服务层有什么好处,解决什么问题呢?
【好处一:调用方爽】
有服务层之前:业务方访问用户数据,需要通过DAO拼装SQL访问
有服务层之后:业务方通过RPC访问用户数据,就像调用一个本地函数一样,非常之爽
User = UserService::GetUserById(uid);
传入一个uid,得到一个User实体,就像调用本地函数一样,不需要关心序列化,网络传输,后端执行,网络传输,范序列化等复杂性。
【好处二:复用性,防止代码拷贝】
这个不展开叙述,所有user数据的存取,都通过user-service来进行,代码只此一份,不存在拷贝。
升级一处升级,bug修改一处修改。
【好处三:专注性,屏蔽底层复杂度】
在没有服务层之前,所有业务线都需要关注缓存、分库分表这些细节。
在有了服务层之后,只有服务层需要专注关注底层的复杂性了,向上游屏蔽了细节。
【好处四:SQL质量得到保障】
原来是业务向上游直接拼接SQL访问数据库。
有了服务层之后,所有的SQL都是服务层提供的,业务线不能再为所欲为了。底层服务对于稳定性的要求更好的话,可以由更资深的工程师维护,而不是像原来SQL难以收口,难以控制。
【好处五:数据库解耦】
原来各个业务的数据库都混在一个大库里,相互join,难以拆分。
服务化之后,底层的数据库被隔离开了,可以很方便的拆分出来,进行扩容。
【好处六:提供有限接口,无限性能】
在服务化之前,各业务线上游想怎么操纵数据库都行,遇到了性能瓶颈,各业务线容易扯皮,相互推诿。
服务化之后,服务只提供有限的通用接口,理论上服务集群能够提供无限性能,性能出现瓶颈,服务层一处集中优化。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/运维做开发/article/detail/824448
推荐阅读
article
eco
淘客
机器人
-ECO云
返利
系统
淘客
...
eco
淘客
机器人
-ECO云
返利
系统
淘客
阿宝查券
机器人
功能升级列表:1、支持淘宝天猫购物查券及
返利
!2、支持拼多多购物查券...
赞
踩
article
数据结构
与
算法
-
C语言
实现
(上)...
以
C语言
为基础
实现
一些经典的
数据结构
和
算法
,主要体会优秀的编程思想,细节
实现
有不足之处。
数据结构
与
算法
-
C语言
实现
(上)...
赞
踩
article
lightweight
java
profiler
与
java
flame
graph
初了解...
了解
java
程序中CPU占用情况对于
java
程序开发,尤其是后台服务开发来说是一件必要且重要的事情。在分析高并发下服务性...
赞
踩
article
你想知道的
2022
年广东
PMP
考试
报名
时间
来咯!_
pmp
考试
2022
广州...
你想知道的
2022
年广东
PMP
考试
报名
时间
来咯!
考试
时间
是从9月份统一延期到了11月份,包含广东(具体日期未公布),按照...
赞
踩
article
android
手机
recovery
,
安卓
手机
recovery
是什么意思?...
原标题:
安卓
手机
recovery
是什么意思?Recovery模式指的是一种可以对
安卓
机内部的数据或系统进行修改的模式(类...
赞
踩
article
深入分析
Android
Service
(一)_
bindservice
会
有
资源
消耗吗...
提供了一个持续显示的通知,确保服务在系统
资源
紧张时不
会
被杀死。的工作机制和最佳实践,是构建高效、稳定的
Android
...
赞
踩
article
基于
单片机
的
直流电机
调速
系统
设计
_
直流电机
速度
控制
系统
设计
...
首先,直流电动机和LabVIEW是本次
设计
的两件重要组成工具。其中,直流电动机是本次
设计
的被控对象,而LabVIEW也是...
赞
踩
article
Python
numpy
.
transpose
详解...
前言看Python代码时,碰见
numpy
.
transpose
用于高维数组时挺让人费解,通过一番画图分析和代码验证,发...
赞
踩
article
Windows
环境安装及配置
git
并连接
git
ee
远程
仓库
_wsl本地
仓库
怎么链接
git
ee
远程
仓库
...
超详细教程:
Windows
环境下安装
git
版本控制软件,配置
git
邮箱及用户名,配置
git
ee
生成key,建立本地
仓库
并...
赞
踩
article
WebDriverAgent
简介...
转自:https://testerhome.com/topics/4904
WebDriverAgent
是什么去年的 S...
赞
踩
article
NLP
+VS︱深度学习数据集标注工具、
图像
语料
数据库
、实验室搜索
ing
..._
图像
处理
语料
库
...
~~因为不太会使用OpenCV、matlab工具,所以在找一些比较简单的工具。. .一、
NLP
标注工具BRATBRAT是...
赞
踩
article
HiveSQL
题——
炸裂
函数
(
explode
/pos
explode
)_
hive
explode
...
HiveSQL
题——
炸裂
函数
(
explode
/pos
explode
)_
hive
explode
hive
explode
...
赞
踩
article
C++
中
new
操作符
内幕:
new
operator
、
operator
new
、placemen...
new
和delete
操作符
是内置的,其行为不受你的控制。凡是它们调用的内存分配和释放函数则能够控制。当你想定制
new
和d...
赞
踩
article
阿里
是
如何从
单体
迈向
Serverless
架构
的?...
点击“技术领导力”关注∆每天早上8:30推送来源|
阿里
中间件用户需求和云的发展两条线推动了云原生技术的兴起、发展和大规模...
赞
踩
article
git
搭建自己
的
代码
仓库
_属于自己
的
代码
仓库
...
git
的
基本使用方法什么是
git
git
是一款分布式
的
版本控制软件类似于QQ office等安装到电脑上才可以使用
的
工具版...
赞
踩
article
jenkins
结合
gitea
私有
代码下拉
_
jenkins
gitea
...
在
jenkins
中安装
gitea
插件,设置全局凭证使用
gitea
的Access Token,生成新的唯一标识,再把唯一标...
赞
踩
article
JavaWeb
开发
的
Hadoop
网盘(1)_
hadoop
web
开发
...
文章目录一、功能需求二、
开发
环境三、安装工具1、安装mysql2、安装mysql可视化工具3、测试mysql是否安装成功...
赞
踩
article
git
ea Windows搭建
git
服务器
_搭建
windows
版
git
服务器
--
git
ea...
这里写自定义目录标题下载GIT下载Git
服务器
软件命令cmd命令如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片...
赞
踩
article
图像识别
从零写出
dnf
脚本
关键要点
_
python
dnf
...
一个
脚本
的流程,设计yolo(标注,训练,预测),opencv,驱动级键鼠操作
_
python
dnf
python
dnf
...
赞
踩
article
com
.
squareup
.
leakcanary
:
leakcanary
-
android
:
1.5
不适配A...
1.将
com
.
squareup
.
leakcanary
:
leakcanary
-
android
:
1.5
更换为
com
.squa...
赞
踩
相关标签
c语言
算法
数据结构
链表
散列表
广度优先
霍夫曼树
java
大数据
awk
职场和发展
职场发展
android手机recovery
android
service
python
git
gitee
github
版本管理
远程仓库
deep learning
数据仓库
hive