高性能架构设计总结
今天我们来总结一下高性能架构的设计
高性能架构可以分为为计算高性能和存储高性能
计算高性能架构
高性能架构设计主要集中在两方面:
- 尽量提升单服务器的性能,将单服务器的性能发挥到极致 。
- 如果单服务器无法支撑性能,考虑服务器集群方案 。
单服务器高性能
单服务器高性能的关键之一就是服务器采取的网络编程模型,网络编程模型有如下两个关键设计点 :
- 服务器如何管理连接。
- 服务器如何处理请求 。
以上两个设计点最终都和操作系统的 I/O 模型及进程模型相关 。
- 1/0 模型:阻塞、非阻塞、同步 、异步
- 进程模型:单进程、 多进程、多线程。
常用的2种模型是
Reactor I/O多路复用 复用进程/线程 非阻塞同步,高性能
Proactor 异步 非阻塞异步 操作系统主动通知
集群高性能
高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。计算本身 存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出 。 因此高性能集群设计的复杂度主要体现在任务分配这部分
任务分配主要通过负载均衡来进行
不同的任务分配算法目标是不一样的,有的基于负载考虑、有的基于性能考虑、有的基于业务考虑
负载均衡类型
- DNS负载均衡 简单成本低,更新有延迟,扩展性不高,策略简单
- 硬件负载均衡 功能强大 性能强大 稳定性高 支持安全防护 价格高 扩展性低
- 软件负载均衡 简单,便宜,扩展性好,性能一般,功能一般
负载均衡架构
- 地理级别负载均衡
- 集群级别负载均衡
- 机器级别的负载均衡
负载均衡的算法
- 任务平分类 平均分配
- 负载均衡类 根据资源分配
- 性能最优类 根据性能好的分配
- Hash 类 相同id分配到同一台
存储高性能架构
mysql
mysql的高性能架构主要为读写分离和分库分表
读写分离 主要目的为 分散读压力 但是可能导致 主从一致性问题
分库分表 主要目的为分散写压力
问题是 无法join 导致分布式事务 查询复杂度提升(count join order by)
实现形式 主要有 通过代码封装 或者中间件实现
nosql
关系数据存在一些局限性
- 无法存储数据结构
- schema扩展不方便
- I/0 性能低
- 全文搜索 性能低
我们可以通过Nosql数据库来解决
- K-V 存储 解决数据结构的问题
- 文档数据库 解决schema扩展问题(场景 属性差异较大)
- 列式数据集 解决IO问题 (场景 大数据统计)
- 全文搜索引擎 解决全文搜索问题
缓存
需要经过复杂运算后得出的数据,存储系 统无能为力 。 读多写少 的数据,存储系统有心无力
缓存就是为了弥补存储系统在这些复杂业务场景下的不足 , 缓存的基本原理就是将可能重 复使用 的数据放到内存中 ,一次生成,多次使用, 避免每次使用都去访问存储系统。
缓存可能带来的问题
- 缓存穿透
- 缓存雪崩
- 缓存热点
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
PingCAP 的 5 年远程办公实践
前言 2020 年的春节注定是一个不平凡的春节,全国都在抗击新型冠状病毒肺炎。除了不出门,勤洗手,戴口罩之类的常规操作,我们就在想,在这个大背景下,我们还能够做哪些事情?考虑到春节假期临近结束,返程的旅途中可能会加大传染的概率,延长隔离时间、远程在家办公也许是普通群众能给国家在这场战役中做的最大贡献。然而在我们国家,暂且不论别的行业,至少我们所在的高科技行业还没有普及远程办公的文化,所以我们在此将 PingCAP 实践了近五年的工程师远程办公经验介绍给大家。本文将尽量少描述理念,而更多的从实践方面讲述我们的落地经验,以期在这样的一个特殊的时刻帮助更多的朋友和公司尽快行动起来,为国家为社会贡献一份我们微薄的力量。 我们已经通过实践证明,在这个时代,至少对于类似软件工程这样的主要以脑力和创意为主的工作,已经有足够的方法论和基础设施,让远程工作的效率不比传统模式差,有时候甚至能有更好的产出(相信已经有同学想起了早上拥挤的交通对心情和思维的副作用)。下面我们聊聊一些具体落地的经验。 01 远程办公的管理哲学 远程办公在国外并不是一件新鲜的事情。在硅谷,尤其是新一代的科技公司几乎都有远程工作的基...
- 下一篇
你可能不知道的 Python 技巧
英文 | Python Tips and Trick, You Haven't Already Seen 原作 | Martin Heinz (https://martinheinz.dev) 译者 | 豌豆花下猫 声明 :本文获得原作者授权翻译,转载请保留原文出处,请勿用于商业或非法用途。 有许许多多文章写了 Python 中的许多很酷的特性,例如变量解包、偏函数、枚举可迭代对象,但是关于 Python 还有很多要讨论的话题,因此在本文中,我将尝试展示一些我知道的和在使用的,但很少在其它文章提到过的特性。那就开始吧。 1、对输入的字符串“消毒” 对用户输入的内容“消毒”,这问题几乎适用于你编写的所有程序。通常将字符转换为小写或大写就足够了,有时你还可以使用正则表达式来完成工作,但是对于复杂的情况,还有更好的方法: user_input = "This\nstring has\tsome whitespaces...\r\n" character_map = { ord('\n') : ' ', ord('\t') : ' ', ord('\r') : None } user_inpu...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址