文档章节

高性能架构设计总结

12叔
 12叔
发布于 01/28 19:48
字数 1117
阅读 2.4W
收藏 114

今天我们来总结一下高性能架构的设计

高性能架构可以分为为计算高性能和存储高性能

计算高性能架构

高性能架构设计主要集中在两方面:

  1. 尽量提升单服务器的性能,将单服务器的性能发挥到极致 。
  2. 如果单服务器无法支撑性能,考虑服务器集群方案 。

单服务器高性能

单服务器高性能的关键之一就是服务器采取的网络编程模型,网络编程模型有如下两个关键设计点 :

  1. 服务器如何管理连接。
  2. 服务器如何处理请求 。

以上两个设计点最终都和操作系统的 I/O 模型及进程模型相关 。

  1. 1/0 模型:阻塞、非阻塞、同步 、异步
  2. 进程模型:单进程、 多进程、多线程。

常用的2种模型是

Reactor I/O多路复用 复用进程/线程 非阻塞同步,高性能

Proactor 异步 非阻塞异步 操作系统主动通知

集群高性能

高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。计算本身 存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出 。 因此高性能集群设计的复杂度主要体现在任务分配这部分

任务分配主要通过负载均衡来进行

不同的任务分配算法目标是不一样的,有的基于负载考虑、有的基于性能考虑、有的基于业务考虑

负载均衡类型

  • DNS负载均衡 简单成本低,更新有延迟,扩展性不高,策略简单
  • 硬件负载均衡 功能强大 性能强大 稳定性高 支持安全防护 价格高 扩展性低
  • 软件负载均衡 简单,便宜,扩展性好,性能一般,功能一般

负载均衡架构

  • 地理级别负载均衡
  • 集群级别负载均衡
  • 机器级别的负载均衡

负载均衡的算法

  • 任务平分类 平均分配
  • 负载均衡类 根据资源分配
  • 性能最优类 根据性能好的分配
  • Hash 类 相同id分配到同一台

存储高性能架构

mysql

mysql的高性能架构主要为读写分离和分库分表

读写分离 主要目的为 分散读压力 但是可能导致 主从一致性问题

分库分表 主要目的为分散写压力

问题是 无法join 导致分布式事务 查询复杂度提升(count join order by)

实现形式 主要有 通过代码封装 或者中间件实现

nosql

关系数据存在一些局限性

  • 无法存储数据结构
  • schema扩展不方便
  • I/0 性能低
  • 全文搜索 性能低

我们可以通过Nosql数据库来解决

  • K-V 存储 解决数据结构的问题
  • 文档数据库 解决schema扩展问题(场景 属性差异较大)
  • 列式数据集 解决IO问题 (场景 大数据统计)
  • 全文搜索引擎 解决全文搜索问题

缓存

需要经过复杂运算后得出的数据,存储系 统无能为力 。 读多写少 的数据,存储系统有心无力

缓存就是为了弥补存储系统在这些复杂业务场景下的不足 , 缓存的基本原理就是将可能重 复使用 的数据放到内存中 ,一次生成,多次使用, 避免每次使用都去访问存储系统。

缓存可能带来的问题

  • 缓存穿透
  • 缓存雪崩
  • 缓存热点

参考资料

<亿级流量网站架构核心技术> <从零开始学架构> <大型网站技术架构>

架构系列合辑

架构设计流程

高性能架构设计

高可用架构设计

可扩展架构设计

© 著作权归作者所有

12叔

12叔

粉丝 168
博文 43
码字总数 87275
作品 3
杭州
架构师
私信 提问
加载中

评论(5)

一个昵称而已
一个昵称而已
缓存带来的3个问题,好多地方都提到,但是解决方案呢?好像没有见人提出来
12叔
12叔 博主
缓存穿透 一般是指查询不存在的数据导致的,可以通过缓存空对象或者过滤不合法的key解决 缓存雪崩 一般是缓存同时失效导致DB数据压力, 设置缓存时间的时候添加一些随机数来解决,或加载时进行并发控制 缓存热点 针对高频访问的key 可能导致的性能问题, 可以使用本地缓存+ 分布式缓存集群 对热点key进行负载均衡
rushA
rushA
就这???
愚者00
愚者00
不错,加油
_aron_
_aron_
加油
高性能服务器开发 2018 年原创汇总

版权声明:欢迎关注我的微信公众号:「easyserverdev」,中文名:『高性能服务器开发』。 https://blog.csdn.net/analogous_love/article/details/86483266 2018 年就这样过去了,总结一下 ...

analogous_love
2019/01/14
0
0
架构学习资料汇总

知名网站架构分析 探索Google App Engine背后的奥秘(1)–Google的核心技术 探索Google App Engine背后的奥秘(2)–Google的整体架构猜想 探索Google App Engine背后的奥秘(3)- Google App Eng...

peter8015
2016/04/22
340
0
互联网技术栈 『Contents Catalog』

image.png 编程语言 Java书单——由入门到上天 UML-类间关系 Java解读-ThreadLocal详解与应用 并发编程-Concurrent用户指南 Java并发编程-原子性变量 Java 并发工具包-常用线程池 基于事件驱...

高广超
2017/11/03
0
0
浅谈高性能数据库集群——分库分表

最近学习了阿里资深技术专家李运华的架构设计关于分库分表的教程,颇有收获,总结一下。 本文主要介绍高性能数据库集群分库分表相关理论,基本架构,涉及的复杂度问题以及常见解决方案。 分库...

caison
2018/07/02
0
0
阿里架构设计之初体验,送给准备进阶架构的朋友(个人总结)

1 基本概念和目的 架构设计的目的是为了解决系统复杂度带来的问题,并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出实际业务实际情况的复杂点,然后有有...

Java小铺
2018/09/15
119
0

没有更多内容

加载失败,请刷新页面

加载更多

金三银四——离大厂offer你就只差一张路线图

很多人做Java开发4,5年后,都会感觉自己遇到瓶颈。什么都会又什么都不会,如何改变困境,为什么很多人写了7,8年还是一个码农,工作中太多被动是因为不懂底层原理。公司的工作节奏又比较快,...

Java天天
26分钟前
32
0
用Java递归删除目录

有没有办法用Java递归删除整个目录? 在正常情况下,可以删除一个空目录。 但是,要删除带有目录的整个目录,就不再那么简单了。 如何用Java删除包含目录的整个目录? #1楼 具有堆栈且没有递...

javail
27分钟前
95
0
在hbuilderx中vue-cli脚手架配置router文件夹

配置router文件 新建一个文件夹router,再在新建的router文件夹里新建一个index.js文件 index.js import Vue from 'vue' import Router from 'vue-router' import Home from '../components......

软件开发小白
35分钟前
57
0
高并发软件层面解决思路-从前端到后端

1、页面缓存、前后端分离、CDN、静态页面(减少后台接口请求,需要CMS系统支持)、代码等优化(百度关键词“雅虎前端优化”) 2、nginx或其它配置合理的负载均衡策略,按主机性能设置合理的权...

无名氏的程序员
50分钟前
69
0
Maven项目使用打包时使用本地jar包库

在使用maven管理项目时,有时候我们可能会使用一些第三方的jar包依赖库,但是这些jar包依赖库又没有在共有的maven仓库。 通常只能下来放到本项目的lib目录下。但是我们打包时如果不做处理,那...

上官胡闹
今天
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部