生产环境评估机器的方法

        学习了kafka的原理知识后,还要学会如何评估生产环境集群,如果是一个大数据架构师,这个是必须要会的,比如kafka集群、Hbase集群、hadoop集群,评估集群的方式差不多,现在以kafka为例。

场景

        电商平台,需要支持每天10亿请求发送到kafka集群。

        场景拆解:采用二八原则,一般评估出来问题都不大。10亿请求->24小时过来的,一般情况下,每天晚上12:00到早上8:00这段时间其实是没有多大数据量的,80%的请求是用的另外16个小时处理的。

qps评估

        16个小时处理->8亿请求

        16*0.2=3个小时处理->8亿请求的80%的数据=6亿

        也就是说3个小时处理6亿数据

        我们简单算一下高峰期的qps:

                6亿/3小时=5.5万/s   qps=5.5万

数据量评估

        10亿请求*50kb(假设消息大小)=46T,每天要存储46T数据

        一般情况下,我们都会设置两个副本 46T*2=92T

        kafka里面的数据是有保存的时间周期的,假设保留最近3天的数据

        92T * 3天 = 276T

机器评估

        场景总结:搞定10亿请求,高峰期5.5万qps,276T的数据。需要多少台服务器?

        如果是公司架构师或者项目负责人,做一个项目可能需要采购机器。

        1)首先分析一下是需要虚拟机还是物理机

        像kafka mysql hadoop这些集群搭建的时候,我们生产里面都是使用物理机。

        2)高峰期需要处理的请求每秒5.5万个,其实一两台物理机绝对是可以抗住的。一般情况下,我们评估机器的时候,是按照高峰期的4倍去评估。如果是4倍的话,大概我们集群的能力要准备到20万qps。这样子的集群才是比较安全的集群,大概就需要5台物理机,每台承受4万请求。

磁盘评估

场景总结:搞定10亿请求,高峰期5.5万的qps,276T的数据,需要5台物理机。

1)使用SSD固态硬盘?还是普通的机械硬盘?

        SSD硬盘:性能比较好,但是价格贵

        SAS盘:某方面性能不是很好,但是比较便宜

        SSD硬盘性能比较好,指的是它随机读写的性能比较好。适合MySQL这样的集群,但是其实它顺序写的性能跟SAS盘差不多。

        kafka的理解:就是用的顺序写,所以用普通的机械硬盘就可以了。

2)评估每台服务器需要多少块磁盘

        5台服务器,一共需要276T,大约每台服务器需要存储60T的数据。我们公司里面服务器的配置用的是11块硬盘,每个硬盘7T

        11 * 7T = 77T

        77T * 5 台服务器 = 385T

内存评估

场景总结:搞定10亿请求,需要5台物理机,11(SAS) * 7T,一共需要多少内存?

我们发现kafka读写数据的流程都是基于os cache,换句话说假如咱们的os cache无限大,那么整个kafka是不是相当于就是基于内存去操作,如果是基于内存去操作,性能肯定很好。

内存是有限的

1)尽可能多的内存资源给os cache

2)kafka的核心代码是scala写的,客户端是java写的,都是基于jvm,所以我们还要给一部分内存给jvm。kafka的设计,没有把很多数据结构都放在jvm里,所以我们不用给太大内存给jvm。根据经验,给个10G就可以了。

        NameNode:

                jvm里面还放了元数据(几十G),JVM一定要给得很大。比如给个100G

假设我们这个10亿请求的项目,一共会有100个topic

100 topic * 5 partition * 2 = 1000 partition

一共partition其实就是物理机上面的一个目录,这个目录下面会有很多个.log文件。.log就是存储数据文件,默认情况下一个.log文件大小是1G。

我们如果要保证1000个partition的最新.log文件的数据都在内存里,这时候性能就是最好,1000 * 1G = 1000G内存。

我们只需要吧当前最新的这个log保证里面的25%的最新数据在内存里面:

0.25G * 1000 = 250G的内存

250G内存 / 5台机器 = 50G

50G + 10G(jvm)= 60G

64G的内存,另外的4G,操作系统本身也需要内存

其实kafka的jvm也可以不用给到10G这么多

评估出来64G是可以的

当然如果能给到128G的内存服务器是最好的。

上面评估的时候用的是一个topic 5个分区,如果数据量比较大的topic可能会有10个分区。

CPU评估

场景总结:搞定10亿请求,需要5台物理机,11(SAS)* 7T,需要64G的内存(128G更好)

评估一下每台服务器需要多少cpu core(资源很有限)

我们评估需要多少个cpu,依据就是看我们的服务里面有多少线程去跑。

线程就是依托cpu去运行的。如果我们的线程比较多,但是cpu core比较少,这样的话,我们的机器负载就会很高,性能就不好。

1)评估一下,kafka的一台服务器启动以后会有多少线程?

       Accept线程       默认1

       processor线程  默认3     可设置6~9个线程 

       requestHandler线程  默认8   可设置32个线程        

        定时清理的线程,拉取数据的线程,定时检查ISR列表的线程,等等。

所以大概一个kafka的服务器启动起来后,会有一百多个线程。

cpu core = 4个,一般来说,几十个线程,就肯定把cpu打满了。

cpu core = 8个,应该能很轻松的支持几十个线程。

如果我们的线程有100多个,或者差不多200个,那么8个线程是搞不定的。

所以我们这儿建议:

cpu core = 16个。如果可以的话,能给到32 cpu core那就更好。

2 cpu * 8 = 16 cpu core

4 cpu * 8 = 32 cpu core

网卡评估

场景总结:搞定10亿请求,需要5台物理机,11(SAS) * 7T,需要64G内存(128G更好),需要16个cpu core(32个更好)

评估我们需要什么样的网卡?

        一般要么是千兆网卡(1G/s), 还有就是万兆网卡(10G/s)

高峰期每秒会有5.5万请求涌入,5.5万/5 = 大约每台服务器会有1万请求涌入。

我们之前说过:

10000 * 50kb(消息大小) = 488M,也就是每台服务器每秒要接收488M的数据,数据还要有副本,副本之间的同步也是走的网络请求,488 * 2 = 976M/s

说明一下:

        很多公司的数据,一个请求里面是没有50kb这么大的,我们公司是因为主机在生产端封装了数据,然后多条数据合并在一起了,所以我们的一个请求才会有这么大。

        一般情况下,网卡的带宽是达不到极限的,如果是千兆网卡,我们能用的一般是700M左右,所以最好情况这里的场景建议使用万兆网卡,如果是万兆网卡就很轻松。

评估结论

搞定10亿请求,需要:

1)5台物理机,11(SAS) * 7T

2)每台机器64G内存(128G更好)

3)每台机器16个cpu core(32个更好)

4)万兆网卡

from 洱海老师

源码:01-源码阅读准备之基础知识准备_哔哩哔哩_bilibili

深入浅出:Kafka 深入浅出_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32F412RET6的智能桶硬件设计

一、智能桶功能需求: 智能桶是一直采用Cortex-M4 嵌入式平台,搭载NB-IotTO通讯模组、智能称重采集、智能门锁监控以及温度监测等装置。主要功能如下: ▲ 具有GPS定位功能,可以通过后台APP实时定位智能桶的位置。 ▲ 具有温度监测功…

模仿看门狗写个简单的分布式锁demo

public void tryLock() { // 判断key是否存在,存在则返回 用户信息 // 不存在则生成key,将信息(用户名,用户id,线程名)放入TYuanGong pcCurrentUser TisUtils.getPcCurrentUser();String name Thread.currentThread().getName();//// redis redis.c…

14、SpringCloud -- WebSocket 实时通知用户

目录 实时通知用户需求:代码:前端:后端:WebSocket创建 websocket-server 服务添加依赖:配置 yml 和 启动类:前端:后端代码:注意:测试:总结:实时通知用户 需求: 用户订单秒杀成功之后,对用户进行秒杀成功通知。 弹出个提示框来提示。 代码: 前端:

【设计模式】第11节:结构型模式之“装饰器模式”

一、简介 装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。…

第5天:基础入门-资产架构amp;端口amp;应用amp;CDNamp;WAFamp;站库分离amp;负载均衡

第5天:基础入门-资产架构&端口&应用&CDN&WAF&站库分离&负载均衡 #知识点:1. 资产架构-端口&目录&插件接口&多站点&多应用 2. 番外安全-域名&服务器本身&服务厂商&管理人员 3. 考虑阻碍-站库分离&am…

Redis-使用java代码操作Redis

🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这…

go语言 | grpc原理介绍(一)

参考 https://www.nowcoder.com/discuss/389810396381683712?sourceSSRsearch 这里是b站对应的csdn博客,比较详细的介绍grpc相关原理说明,首先是大概的一个流程图说明。 什么是 RPC ? 远程过程调用(RPC)是计算机科…

[推荐]SpringBoot java实现文件/附件上传下载 服务器 数据库 拿来就用,简单实用

推荐一个思路非常简单又很实用的文件上传下载方式,代码十分简练,可以开箱即用,下面是使用到的一些工具类和业务代码; 1.文件上传实现 判断文件类型的工具类,一些使用到的实体类我会凡在文末,需要可以的自…

吴恩达《机器学习》4-1->4-5:多变量线性回归

一、引入多维特征 在多维特征中,我们考虑的不再是单一的特征,而是一组特征,例如房价模型中可能包括房间数、楼层等多个特征。这些特征将组成一个向量,表示为(𝑥₁, 𝑥₂, . . . , 𝑥ₙ)&#x…

nodelist 与 HTMLCollection 的区别

原地址 https://cloud.tencent.com/developer/article/2013289 节点与元素 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点: 整个文档是一个文档节点每个 HTML 元素是元素节点HTML 元素内的文本是文本节点每个 HTML 属性是属性节点注释是注…

ts 简易封装 axios,统一 API

文章目录 为什么要封装目标文件结构封装通用请求方法获得类型提示http 方法文件上传使用示例实例化post 请求类型提示文件上传 总结完整代码: 为什么要封装 axios 本身已经很好用了,看似多次一举的封装则是为了让 axios 与项目解耦。比如想要将网络请求…

视频增强和修复工具 Topaz Video AI mac中文版功能

Topaz Video AI mac是一款使用人工智能技术对视频进行增强和修复的软件。它可以自动降噪、去除锐化、减少压缩失真、提高清晰度等等。Topaz Video AI可以处理各种类型的视频,包括低分辨率视频、老旧影片、手机录制的视频等。 使用Topaz Video AI非常简单&#xff0c…

突破防火墙的一种方法

当Linux防火墙阻止来自某个ip的数据时,它应该是根据ip数据报里“源IP地址”字段取得的对方ip吧,那对方就不能通过篡改“源IP地址”来绕过防火墙吗?NAT模式下的路由器就修改了这个字段。 但这样的话,攻击者是收不到服务器返回的数…

PHP获取域名地址,$_SERVER[]用法

一、PHP获取域名地址 $host $_SERVER[HTTP_HOST];二、PHP获取域名后面的所有字符 $host $_SERVER[REQUEST_URI];//https://www.baidu.com/md/?articleId134157878//输出 /md/?articleId134157878三、PHP获取服务器的IP $serverIP $_SERVER[SERVER_ADDR]; echo "服务…

学 Java 怎么进外企?

作者:**苍何,CSDN 2023 年 实力新星,前大厂高级 Java 工程师,阿里云专家博主,土木转码,现任部门技术 leader,专注于互联网技术分享,职场经验分享。 🔥热门文章推荐&#…

麒麟KYLINIOS软件仓库搭建01-新创建软件仓库服务器

原文链接:麒麟KYLINIOS软件仓库搭建01-新创建软件仓库服务器 hello,大家好啊,今天给大家带来麒麟桌面操作系统软件仓库搭建的文章01-新创建软件仓库服务器,本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版本上搭建内网…

docker 下安装mysql8.0

在docker中查询mysql镜像 PS C:\Users\admin> docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation……

使用java代码操作Redis

一、Java连接Redis 二、Java操作Redis的常见类型数据存储 三、Redis中的项目应用

YOLOV8最简图像分类检测推理代码

安装YOLOV8 首先要去YOLOV8的官网安装库 YOLOV8官方网站 # Install the ultralytics package from PyPI pip install ultralytics安装opencv pip install opencv-pythonimport cv2 from ultralytics import YOLO# Load the YOLOv8 model model YOLO(yolov8n.pt)# Open the …

【Python_GraphicsView 学习笔记(一)】Graphics View框架的基本介绍

【Python_GraphicsView 学习笔记(一)】Graphics View框架的基本介绍 前言正文1、Graphics View框架简介2、Graphics View框架与QPainter类的区别3、Graphics View框架的三个组成部分4、场景QGraphicsScene类5、视图QGraphicsView类6、图形项QGraphicsIte…