云服务器的配置细节影响价格,直接决定计算能力和功能,是购买时需要考虑的重要因素。
维度一:类型
云服务器的“类型”或“系列”是指具有相似设计意图或性能特征的云服务器类别。
一般来说,云提供商提供常见类型的云服务器,例如通用型、计算密集型、内存优化型和图形计算型。
这些类型都对应着一定的合理配比或者目标硬件资源优化,让您更容易针对不同的情况选择最合适的型号。
vCPU数量与内存量(以GB计算)的比例是定义和识别云服务器类型的重要依据之一。
全球均衡型比例通常为1:4,如官网、企业应用的2核8G端服务器等。
如果vCPU与内存的比例为1:2或1:1,则可以用于科学计算、视频编码等重计算负载。
并编译代码。
如果比例为1:8以上,则归类为数据库、缓存服务、大数据分析等应用中比较常见的内存优化,比如8核、64G的组合。
图形计算是具有GPU能力的虚拟机,一般用于机器学习以及机器学习和深度学习模型。
随着人工智能的普及,此类机器越来越多地应用于研发和生产的各个领域。
升级同一台云服务器往往会导致相应硬件CPU的升级换代。
由于CPU不断更新,云服务器的单核性能可能不太一样。
有时,即使两台云服务器的核心数相同,但由于底层芯片的架构和频率不同,性能也可能存在很大差异。
新下一代模型通常与更新的、专门设计的底层物理服务器和虚拟设备相关联,这些服务器和虚拟设备可以提供更高的性价比。
衡量标准三:实例规模
云服务器的实例规模(size)是指硬件计算资源的数量。
我们可以自由选择不同的实例大小来处理所选机器类型和代数中的不同计算负载。
在描述模板大小时,业界经常使用中等、大型和超大等术语。
这些规范基本上已经成为事实上的标准,并被许多主要提供商使用,包括AWS、阿里云和腾讯云。
可以粗略地这样记:标准large对应2vCPU配置,xlarge代表4个vCPU,最大配置一般定义为nxlarge,其中n为xlarge与4vCPU的比例。
例如,8xlarge表示这是一台具有8*4=32vCPU的机器。
如果您想更严格地定义配置,请使用vCPU来指定云服务器处理器的数量,而不是核心数。
由于超线程技术无处不在,一个核心通常会虚拟出两个vCPU的计算能力。
在这些实例中,云服务提供商尽力将物理裸机公开为云产品,主要用于高性能或软件未虚拟化的环境中。
命名云服务器
云服务器型号名称通常是类型、生成和实例大小缩写的组合,有时还带有其他后缀。
AWS命名规则很有代表性(阿里云也采用同样的格式)
一旦了解了云服务器的命名规则,通过查看具体型号,可以快速理解其背后的含义,清楚非字符串立刻就清晰了。
例如,分解r5.4xlarge模型,这首先应该是一台R型第五代内存机器,拥有4×4=16个vCPU,内存大小为16×8=。
128G(基于内存CPU与内存的比例一般为1:8。
)
当然,并不是所有的云都遵循与AWS相同的命名规则。
>例如“E4v3”代表MicrosoftAzure上的第三代内存,4核、32G。
如果您了解Azure的格式特征稍后您可以快速解读标志的特殊含义。
命名公式中有一个可选部分,称为“后缀”,它出现在许多型号名称中。
一般来说,此扩展是对与没有扩展的标准版本相比有一些显着差异或功能的型号的硬件信息的重要补充。
比如阿里云的后缀是“ne”,意思是“改善网络”。
如何确保模型配置符合预期?在Linux环境下,可以使用lscpu命令查找云服务器的CPU信息,并与机器的具体型号名称进行比较。
下图是在AWSm5a上运行的结果>
https://www.wy.cn/computing/wcloud/all?utm_source=wemedia
为什么要集群?
通常,为了提高网站响应速度,热点数据总是存储在内存中,而不是直接从后端数据库读取。
Redis是一个很好的缓存工具。
对于大型网站应用,热点数据量往往很大,几十G、上百G都很正常,这种情况下,如何正确组织Redis呢?
首先,无论我们使用自己的物理主机还是云服务主机,内存资源往往都是有限的。
Scaleup不是一个好方法,我们需要水平扩展,这需要多台服务器。
多个主机协同工作提供服务,即多个分布式Redis实例同时运行。
其次,当前硬件资源成本降低了。
对于多核CPU和几十GB内存的主机来说,Redis的主进程是单线程的,只运行一个实例似乎有点浪费,而且管理大内存相对来说和管理小内存一样高效。
记忆不存在。
因此,在实际使用中,通常会在同一台机器上同时运行多个Redis实例。
解决办法
1.Redis官方集群解决方案Rediscluster
Rediscluster是一种服务器共享技术,目前已经正式提供3.0版本。
在Rediscluster中,分片采用了槽的概念,总共分为16384个槽,这和预分片有些类似。
对于进入Redis的每个键值对,它都被存储为一个键。
它被相应地散列并分配给16384个槽之一。
使用的哈希算法也比较简单,就是CRC16模16384。
Redis集群中的每个节点负责分配自己在这16384个槽中的份额。
也就是说,每个槽对应一个负责处理的节点。
动态增减节点时,需要重新分配16384个槽位,槽位内的键值也必须迁移。
当然,这个过程在目前的实现中仍然是半自动化的,需要人工干预。
Redis集群必须保证16384个槽位对应的节点正常工作。
如果一个节点出现故障,它所负责的槽位也将失效,整个集群将无法运行。
为了增加集群的覆盖范围,官方推荐的方案是将节点配置为主从结构,即1个主节点和n个从节点。
此时如果主节点出现故障,Rediscluster会根据选举算法选出其中一个从节点晋升为主节点,整个集群继续对外提供服务。
这和上一篇文章提到的RedisSharding场景类似。
服务器节点通过Sentinel监控架构形成主从结构,只不过RedisCluster本身提供了故障转移容错能力。
RedisCluster新的节点检测、故障决策和故障转移功能允许集群中的每个节点通过这就是所谓的集群总线。
他们使用一个特殊的端口号,即外部服务端口号加10000。
例如,如果某个节点的端口号为6379,则它用于与其他节点通信的端口号为16379。
节点之间的通信使用特殊的二进制协议。
对于客户端来说,整个集群被视为一个整体。
客户端可以连接到任何节点进行操作,就像当客户端没有分配密钥进行操作时,Redis会返回重定向指令指向正确的节点,这会向浏览器页面返回302。
就像重定向跳转一样。
RedisCluster在Redis3.0之后正式上线。
能够在大规模生产环境下证明其成功的案例并不多。
2.RedisSharding集群
Redis3正式推出官方集群技术,解决了多个Redis实例协同服务的问题。
RedisCluster可以说是服务器端共享技术的体现,这意味着键值按照一定的算法适当地分配给每个实例分片,同时每个实例节点共同提供一致性和通信。
与外部服务。
多个Redis实例服务比单个Redis实例复杂得多,涉及状态、协作、容错、扩展性等技术难点。
在这里,我们提出一种轻量级的客户端重分片技术。
RedisSharing可以说是一种多Redis实例集群方法,通常基于RedisCluster。
它在到达之前就已在工业中使用。
主要思想是使用哈希算法对Redis数据的键进行哈希,通过哈希函数将某个键映射到特定的Redis节点。
这样客户端就知道要在哪个Redis节点上操作数据了。
幸运的是,javaredis客户端驱动jedis已经支持RedisSharding功能,即结合ShardedJedis和ShardedJedisPool缓存池。
Jedis的RediSharing实现具有以下特点:
1.使用一致性哈希算法(ConsistentHashing),同时对key和节点名进行哈希,然后进行映射和匹配,使用的算法是MURMUR_HASH。
使用持久散列而不是简单的类散列模映射的主要原因是,当添加或删除节点时,不会由于重新匹配而发生重新散列。
一致性哈希只影响相邻节点的key分配,影响很小。
2.为了避免持久哈希仅影响相邻节点并造成节点分配压力,ShardedJedis会根据名称虚拟出160个Redis节点(如果没有,Jedis会指定一个默认名称),虚拟节点执行哈希时。
虚拟节点还可虚拟化至权重的160倍。
使用虚拟节点进行映射匹配,可以在增加或减少Redis节点时,让key在Redis节点之间传输和分布更加均匀,而不是仅仅影响相邻节点。
3.ShardedJedis支持keyTagPattern模式,即提取一部分keyTag进行分片,如下所示,通过为键指定适当的名称,可以将一组相关的键放置在同一个Redis节点中。
这避免了跨节点访问,这在相关数据可用时很重要。