点击▲关注 “数据和云”   给公众号标星置顶

更多精彩 第一时间直达

系统架构中,为什么会存在单点?

(1)存在设计缺陷,出现了单点;

(2)能大大简化系统设计,有意为之,设置单点;

典型互联网高可用架构,哪些地方可能存在潜在单点?


典型互联网高可用架构:

(1),通过DNS,由域名拿到nginx的外网IP;

(2)反向代理,nginx是后端入口;

(3)站点应用,典型的是tomcat或者apache;

(4)服务,典型的是dubbo提供RPC服务调用;

(5)数据层,典型的是读写分离的db架构;

在这个互联网架构中,站点、服务、数据库的从库都容易通过冗余的方式来保证高可用,但:

(1)nginx是一个潜在的单点;

(2)数据库写库也是一个潜在的单点;

哪些例子,因为设计需要,有意设置的单点?

先看GFS(Google File System)架构的例子:


GFS的系统架构里主要有这么几种角色:

(1)client,就是发起文件读写的调用端;

(2)master,这是一个单点服务,它有全局视野,掌握文件元信息;

(3)chunk-server,实际存储文件的服务器;

在GFS系统里,master是一个单点服务。

Map-reduce系统里也有类似的角色,协调全局的master就是单点,它的存在,能够大大的简化系统架构设计。

不管是设计缺陷,还是有意为之,像nginx,db-master,GFS-master这样的单点服务,会存在什么问题呢?

两个大问题:

(1)高可用问题:单点一旦发生故障,服务就会受到影响;

(2)性能瓶颈:单点不具备良好的扩展性,单点的性能上限往往就是整个系统的性能上限;

“高可用”问题通常怎么优化?

shadow-master是一种很常见的解决单点高可用问题的技术方案。

shadow-master,顾名思义,它只是单点master的一个shadow(影子):

(1)master工作时,shadow-master只备份;

(2)master出现故障时,shadow-master会自动变成master,继续提供服务;

shadow-master它能够解决高可用的问题,并且故障的转移是自动的,不需要人工介入,但不足是它使资源的利用率降为了50%,业内经常使用keepalived+vip的方式实现这类单点的高可用。


以GFS的master为例,master正常时:

(1)client会连接正常的master,shadow-master不对外提供服务;

(2)master与shadow-master之间有一种存活探测机制;

(3)master与shadow-master有相同的虚IP;


当发现master异常时:

shadow-master会自动顶上成为master,虚IP机制可以保证这个过程对调用方是透明的。

除了GFS与MapReduce系统中的主控master,nginx和数据库的主库master亦可用类似的方式来保证高可用:


(1)两个主库设置相互同步的双主模式;

(2)平时只有一个主库提供服务;

(3)异常时,虚IP漂移到另一个主库,shadow-master变成主库继续提供服务;

关于高可用,更多详细的内容,可参考《究竟啥才是互联网架构“高可用”》。

“性能瓶颈”问题通常怎么优化?

有时候,单点设计是有意为之,此时单点的性能(例如GFS中的master)有可能成为系统的瓶颈,那么,减少与单点的交互,便成了存在单点的系统优化的核心方向。

如何来减少与单点的交互,有两种常见的方法:

(1)批量写;

(2)客户端缓存;

如何利用“批量写”减少与单点的交互,提升整体性能?

举一个单点“ID生成器”的例子,很多公司会利用数据库的auto-inc-id,来作为一个严格递增的ID生成工具。


其交互流程是:

(1)调用方需要ID;

(2)插入记录,利用auto-inc-id来生成和返回ID;

此时,ID生成的并发上限,取决于单点数据库的插入性能上限。

如何利用“批量写”提升性能呢?

优化如下:

(1)增加一个服务,每次从DB拿出100个id;

(2)调用方需要ID;

(3)服务直接返回100个id中的1个,100个分配完,再访问DB;

这样一来,每分配100个才会写数据库一次,分配id的性能提升了100倍。

如何利用“客户端缓存”减少与单点的交互,提升整体性能?

还是举GFS文件系统的栗子。


GFS文件读取的流程如下:

(1)GFS的调用客户端client要访问shenjian.txt,先查询本地缓存,miss了;

(2)client访问master问说文件在哪里,master告诉client在chunk3上;

(3)client把shenjian.txt存放在chunk3上记录到本地的缓存,然后进行文件的读写操作;

(4)未来client要访问文件,从本地缓存中查找到对应的记录,就不用再请求master了,可以直接访问chunk-server;

这类缓存的命中非常非常高,在99%以上(因为文件的自动迁移是小概率事件),这样与master的交互次数就降低了100倍。

批量写,客户端缓存,对性能的提升也有极限,单点性能优化还有没有其他方法?

无论怎么批量写,客户端缓存,单点毕竟是单机,还是有性能上限的。

水平扩展,才能够无限的提升系统性能。

以nginx为例,如何来进行水平扩展呢?


第一步的DNS解析,只能返回一个nginx外网IP么?


通过DNS轮询,在DNS-server,一个域名可以配置多个IP,每次DNS解析请求,轮询返回不同的IP,就能实现nginx的水平扩展,扩充负载均衡层的整体性能。

数据库单点写库也是同样的道理,在数据量很大的情况下,可以通过水平拆分,来提升写入性能。

关于性能扩展,更多详细的内容,可参考《究竟啥才是互联网架构“可扩展”》。

总结

今天的内容很多,希望行文有逻辑:

(1)单点系统存在的问题:可用性问题,性能瓶颈问题;

(2)shadow-master是一种常见高可用方案;

(3)减少与单点的交互,是单点系统优化的核心方向,常见方法有:批量写客户端缓存

(4)水平扩展,才能做到理论上的无限性能;

思路比结论重要。

转载自:架构师之路


资源下载

关注公众号:数据和云(OraNews)回复关键字获取

2018DTCC , 数据库大会PPT

2018DTC,2018 DTC 大会 PPT

ENMOBK,《Oracle性能优化与诊断案例》

DBALIFE ,“DBA 的一天”海报

DBA04 ,DBA 手记4 电子书

122ARCH ,Oracle 12.2体系结构图

2018OOW ,Oracle OpenWorld 资料

产品推荐

云和恩墨Bethune Pro企业版,集监控,巡检,安全于一身,你的专属数据库实时监控和智能巡检平台,漂亮的不像实力派,你值得拥有!

云和恩墨zData一体机现已发布超融合版本和精简版,支持各种简化场景部署,零数据丢失备份一体机ZDBM也已发布,欢迎关注。

消除单点,一篇搞定 | 架构设计篇相关推荐

  1. 1对多业务,数据库水平切分架构一次搞定 | 架构师之路

    1对多业务,数据库水平切分架构一次搞定 | 架构师之路 原创 2017-07-10 58沈剑 架构师之路 架构师之路 架构师之路 微信号 road5858 功能介绍 架构师之路,坚持撰写接地气的架构文 ...

  2. htpc电脑方案_用xbmcbuntu系统一台电脑搞定HTPC+NAS 篇一:基础篇

    用xbmcbuntu系统一台电脑搞定HTPC+NAS 篇一:基础篇 2014-11-06 13:23:26 493点赞 2826收藏 194评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就 ...

  3. html百度首页制作视频,韩顺平 轻松搞定网页设计 html+css+js

    韩顺平老师的教程影响着一代又一代的学子们,他的视频教程确实做的很经典,不论是java.php还是网页设计,都有出彩的地方.这里,小编给大家分享韩顺平老师的轻松搞定网页设计教程,绝对完整,全部存于百度网 ...

  4. APP设计师拿到APP产品原型开始,七步搞定APP设计

    转载:http://www.25xt.com/appdesign/9670.html 任何一款成功的APP都需要以坚实的产品概念作为基础,因为概念决定了产品最终完成的潜力. 一般情况下,交到app设计 ...

  5. 韩顺平轻松搞定网页设计(html+css+js),韩顺平轻松搞定网页设计方案(html+css+js)之javascript现场授课笔记(完整版).doc...

    2011韩顺平轻松搞定网页设计(html+css+js)之 javascript现场授课笔记(完整版) 视频18整和19的前半部分不用看 Javascript的基本介绍 JS是用于WEB开发的脚本语言 ...

  6. 一篇搞定 SpringBoot+Mybatis+Shiro 实现多角色权限管理

    初衷:我在网上想找整合springboot+mybatis+shiro并且多角色认证的博客,发现找了好久也没有找到想到的,现在自己会了,就打算写个博客分享出去,希望能帮到你. 原创不易,请点赞支持! ...

  7. vlan配置实例详解_网工知识角|MUXVLAN技术详解,基本原理一篇搞定

    学网络,就在IE-LAB 国内高端网络工程师培养基地 MUX VLAN(Multiplex VLAN )提供了一种通过VLAN进行网络资源控制的机制.通过MUX VLAN提供的二层流量隔离的机制可以实 ...

  8. CentOS7搭建LNMP+WordPress一篇搞定

    零.关于本文 本文首次完成于2019年5月12日,经历多次修改.本文所有的参考文献,均以超链接的形式给出.考虑到网上的部分教程不够完整,有的已经过时,我将我搭建环境的方法记录下来. 这篇文章适合: 希 ...

  9. 3D引擎架构设计篇-姜雪伟-专题视频课程

    3D引擎架构设计篇-169人已学习 课程介绍         本课程是针对3D引擎架构设计,涵盖引擎的基础模块,多线程基础框架,大场景加载,地形多纹理优化技术,GPU优化渲染,物理引擎,AI算法以及A ...

最新文章

  1. C语言基本入门 - 1
  2. Chrome OS 0.4.220 Beta下载已发布
  3. Web使用热敏打印小票(IE环境)
  4. [译]试用新的System.Text.Json API
  5. 华为弹性云服务器ECS使用学习0
  6. 2017-2018-2 20155203《网络对抗技术》 Exp7:网络欺诈防范
  7. android秋招面试题及答案,阿里巴巴2019秋招客户端开发工程师在线笔试题和面试题答案...
  8. 计算机网络 第五章 运输层
  9. 解决office2003无法卸载的问题
  10. G20:奥巴马称美国拥有全球最大最好的网络武器库
  11. 使用 FFT 进行频谱分析
  12. 根据两点经纬度计算距离和角度——java实现
  13. iphone GCDAsyncSocket 详解
  14. 关于达梦监视器dmmonitor的一些知识
  15. 图形化开发(九)01-Three.js之案例——王者荣耀demo制作
  16. C语言中删除重复字母,删除C ++中的重复字母
  17. EI会议论文被检索难度评定
  18. 【无标题】这个怎么写
  19. Layui 重载后表格内容重复 更换提交方式已解决
  20. 基于Android新能源电动汽车充电服务导航

热门文章

  1. eclipse物联网_Eclipse如何推动物联网发展
  2. spark运行pi_如何使用甜蜜的橙色Pi起床并运行
  3. html标记语言图像标记_为什么我喜欢这些标记语言
  4. 树 | 突然间,看了这篇文章,树我懂了!
  5. Java一年,面试总结
  6. Bootstrap进度条的颜色
  7. Bootstrap 列平移
  8. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践
  9. 云服务器如何实现装虚拟机_如何在服务器上安装虚拟机呢?服务器虚拟机安装教程...
  10. 全连接神经网络_二十九.全连接神经网络原理