百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

云平台如何支持百万千万或者上亿的在线用户?

haoteby 2025-05-08 18:31 61 浏览

在云计算发展飞速的时代,传统通讯正在与互联网、IT等各大领域融合发展,无论是IM、视频、VoIP、还是呼叫中心,企业都需要根据自身业务形态开发和部署属于自己的通讯平台。那么,在用户群体不断壮大之时,云平台如何该支持百万千万或者上亿的在线用户?日前, 容联云通讯CTO(首席技术官)许志强为程序员们带来了一场主题为“云通讯PaaS平台的挑战和应对之道”的在线培训。

一个云平台怎么支持百万千万或者上亿的在线用户?许志强认为这里有几个关键点:

1、操作系统调优

第一步是操作系统的调优,因为操作系统的缺省设置并不是适合这种大规模的系统访问的,包括打开文件数、TCP接收发送缓冲等,你需要根据你的业务请将操作系统各项的参数设置进行一个调优。

2、采用异步接口

第二步,因为现在大多数的网络协议都是基于TCPIP协议的,客户端在很多情况下是非活跃的,那么要单台机器处理几十万或者上百万以上的连接需要采用异步的接口。在Linux上使用的是epoll,在windows上就是I/O Completion Port. 十年前,我们会讨论一台Web服务器怎么支撑一万个用户(著名的C10K问题),现在这个问题已经随着操作系统的完善已经非常轻易的解决了,关键是怎么使用操作系统提供的这些接口。现在如果采用长连接,目前的技术水平达到几十万甚至上百万(依赖实际的吞吐量)的长连接单台服务器是没有任何问题的。

3、内存数据库缓存、减少数据库操作

第三点,我们知道数据库的操作是比较重的,像内存数据有可能用(Memcache、Redis)或者各种内存数据库缓存一些数据,减少数据库的操作,衡量哪些数据放内存数据库中的一个重要原则就是: 如果数据访问比较频繁,可以通过key访问,业务逻辑上不需要强一致的数据适合放内存数据库。

4、内部模块交换采用长连接、Protocol Buffer等

系统内部尽可能采用长连接,因为系统的每一次连接都是一个开销,可能在低负载情况下没有关系,每次请求一个连接,看上去也挺快,一秒钟几百个请求,一千多请求也行,但是一旦系统负荷增大,这部分开销在整个系统开销就会非常大了。另外在协议编码的尽可能采用像Protocol Buffer的协议,这是谷歌开源的协议,具有很好的编解码效率和传输流量优化。

5、节点可并行扩展、Cluster集群

设计的时候需要考虑各个模块、节点是否可并行扩展的?是不是增加一个模块、节点就能够提供服务扩展系统容量?将每个节点尽可能做成无状态的,只有做到这点,系统才能可扩展、才能做集群、才能采用Cluster集群来做负载均衡服务。

6、自动部署新业务节点支持服务的自动化扩容

云服务的用户可能突然业务量大增,系统能不能通过自动部署解决弹性自动扩容?这是云通讯现在正在做的。我们跟运营商的线路不是可以通过动态增加的,那是物理接口没有办法增加的。但是针对IP端的设备我们是可以做自动部署的,像阿里云、亚马逊,可以提供API让你自动地创建虚拟的主机,你可以提前做好相应的磁盘映像, 当检测到某个类型的设备负责过高后,可以通过接口把这个服务部署起来。当你业务节点快速增加的时候,你采用这种自动部署的方案可以大幅减少人工干预维护的工作。

7.一次性Hash的负载分配方式

讲到集群,就必须说的是集群中负载的分配方式。举个例子,之前阿里云余额宝是从IOE架构移到阿里云上,当时存在一个很大的一个挑战,余额宝的请求量太大了,mysql数据库性能不够,怎么解决这个问题呢? 常见的方法就是根据账号分数据库、分系统处理,按照账号分配到对应的数据库和处理系统, 这就是负载分配的方式。一般来说,大家一个很直观的想法可能是根据这个帐号做一下hash计算。有三个节点,就除三,余数在哪儿就去哪个节点,这是惯用的思路。但是这里有一个问题,之前的三个节点,后来可能变成四个节点,五个节点,一旦变成四个节点,五个节点以后,原来的Hash的值就不对了,如果加了一个节点以后,后面所有的分配都会不对,数据库什么都要重新调整,整个负载会剧烈的进行一个移动,对增加处理节点是不友好的。

下面是百度上的一个图,这个是一次性Hash的负载分配方式:

假如这是一个环,这个环是从0到2的32次方,我们保证Hash出来的值在这个区间内随机分布。在这个区间内,我们这里只有四个节点,图中蓝色的节点是我们的服务节点。当一个请求来了,或者一个帐号来了,这个请求是由谁来服务呢?我们把这个请求计算一个hash,hash值会落在这个环的其中一个点上,就是图中的这个紫色的点。紫色的点实际上不是一个具体的服务点,它会按方向找最近的点,假如我们以顺时针方向,他就找顺时针最近的一个点。假如在第三和四节点之间,这两个节点的负载增加了,我们就在这两个节点中间加一个节点,把他们中间的负载做一个分担,这样其他的节点负责的这种负载请求不会波动不会发生变化。只有落在我们分配的节点顺时针之前的节点会有一些变化。所以这样就非常容易把一个节点加到里面不影响整个系统的动荡。

相关推荐

Chrome OS 41 用 Freon 取代 X11_chrome os atom

在刚发布的ChromeOS41里,除了常规的Wi-Fi稳定性提升(几乎所有系统的changelog里都会包含这一项)、访客模式壁纸等之外,还存在底层改变。这一更新中Google移除...

苹果iPad Pro再曝光 有望今年六月发布

自进入2015年以后,有关大屏iPad的消息便一直不绝于耳,之前就有不少媒体猜想这款全新的平板电脑将会在三月发布,不过可惜的是我么只在那次发布会上看到了MacBookPro。近日@Ubuntu团队便...

雷卯针对香橙派Orange Pi 5 Max开发板防雷防静电方案

一、应用场景高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居、Linux桌面计算机、Linux网络服务器、Android平板、Android游戏机...

Ubuntu Server无法更新问题解决_ubuntu server not found

上周老家的一台运行UbuntuServer的盒子无法连接上了,中秋这两天回来打开,顺手更新一下发现更新报错。提示`E:Releasefileforhttps://mirrors.aliyun...

虚幻引擎5正式版发布:古墓丽影&巫师新作采用、新一代实时渲染

机器之心报道编辑:杜伟、陈萍虚幻引擎5的目标是「助力各种规模的团队在视觉领域和互动领域挑战极限,施展无限潜能」。...

AMD Milan-X双路霄龙7773X平台基准测试曝光 CPU缓存总量超1.5GB

OpenBenchmarking基准测试数据库刚刚曝光了AMDMilan-X双路霄龙7773X平台的跑分成绩,虽然很快就被撤下,但我们还是知晓了高达1.6GB的总CPU缓存。早些时...

ROS机器人建模_ros机器人硬件搭建

...

全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)

Hello,大家好!近期工作中有涉及到Dify私有化离线部署,特别是针对于一些国产设备。因此特别整理了该教程,实测有效!有需要的小伙伴可以参考下!本文主要针对Dify1.7.2最新版本+国产操作系...

在ubuntu下新建asp.net core项目_创建ubuntu

本文一步步讲述在ubuntu下用visualstudiocode创建asp.netcore项目的过程。step1:环境操作系统:virtualbox下安装的lubuntu。请不要开启“硬件...

在晶晨A311D2处理器上进行Linux硬件视频编码
在晶晨A311D2处理器上进行Linux硬件视频编码

在KhadasVIM4AmogicA311D2SBC上,我更多的时间是在使用Ubuntu22.04。它的总体性能还不错,只不过缺少3D图形加速和硬件视...

2025-08-26 17:22 haoteby

Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!

之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...

电影质量级渲染来了!虚幻引擎5.3正式发布:已开放下载

快科技9月8日消息,日前,Unrealengine正式发布了虚幻引擎5.3,带来了大量全方位的改进。...

2025如何选购办公电脑?极摩客mini主机英特尔系列选购指南

当下,迷你主机的性能越来越强,品类也越来越多。但是CPU是不变的,基本都是AMD和英特尔的。有一个小伙伴在评论区提问,我应该如何在众多机器中选购一台符合自己的迷你主机呢?那今天我们优先把我们的系列,分...

ubuntu 20.04+RTX4060 Ti+CUDA 11.7+cudnn

ububtu添加国内源sudocp/etc/apt/sources.list/etc/apt/sources.list.backupsudovim/etc/apt/sources.lis...

Linux Mint 18将重新基于Ubuntu 16.04 带来更好硬件支持

项目负责人ClementLefebvre在本月6日披露了关于LinuxMint18“Sarah”操作系统的大量信息,包括带来全新扁平化体验的Mint-Y主题。而现在,这款将于年底之前上线的操作...