分布式应用框架Akka详解

分布式应用框架Akka详解,第1张

秒杀系统的架构设计

秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路:

写入内存而不是写入硬盘

异步处理而不是同步处理

分布式处理

用上这三招,不论秒杀时负载多大,都能轻松应对。更好的是,Redis能够满足上述三点。因此,用Redis就能轻松实现秒杀系统。

用我这个方案,无论是电商平台特价秒杀,12306火车票秒杀,都不是事:)

下面介绍一下为什么上述三种性能优化思路能够解决秒杀系统的性能问题:

1  写入内存而不是写入硬盘

传统硬盘的读写性能是相当差的。SSD硬盘比传统硬盘快100倍。而内存又比SSD硬盘快10倍以上。因此,写入内存而不是写入硬盘,就能使系统的能力提升上千倍。也就是说,原来你的秒杀系统可能需要1000台服务器支撑,现在1台服务器就可以扛住了。

你可能会有这样的疑问:写入内存而不是持久化,那么如果此时计算机宕机了,那么写入的数据不就全部丢失了吗?如果你就这么倒霉碰到服务器宕机,那你就没秒到了,有什么大不了?

最后,后面真正处理秒杀订单时,我们会把信息持久化到硬盘中。因此不会丢失关键数据。

Redis是一个缓存系统,数据写入内存后就返回给客户端了,能够支持这个特性。

2 异步处理而不是同步处理

像秒杀这样短时大并发的系统,在性能负载上有一个明显的波峰和长期的波谷。为了应对相当短时间的大并发而准备大量服务器来应对,在经济上是相当不合算的。

因此,对付秒杀类需求,就应该化同步为异步。用户请求写入内存后立刻返回。后台启动多个线程从内存池中异步读取数据,进行处理。如用户请求可能是1秒钟内进入的,系统实际处理完成可能花30分钟。那么一台服务器在异步情况下其处理能力大于同步情况下1800多倍!

异步处理,通常用MQ(消息队列)来实现。Redis可以看作是一个高性能的MQ。因为它的数据读写都发生在内存中。

3 分布式处理

好吧。也许你的客户很多,秒杀系统即使用了上面两招,还是捉襟见肘。没关系,我们还有大招:分布式处理。如果一台服务器撑不住秒杀系统,那么就多用几台服务器。10台不行,就上100台。分布式处理,就是把海量用户的请求分散到多个服务器上。一般使用hash实现均匀分布。

这类系统在大数据云计算时代的今天已经有很多了。无非是用Paxos算法和Hash Ring实现的。

Redis Cluster正是这样一个分布式的产品。

使用Redis实现描述系统

Redis和Redis Cluster(分布式版本),是一个分布式缓存系统。其支持多种数据结构,也支持MQ。Redis在性能上做了大量优化。因此使用Redis或者Redis Cluster就可以轻松实现一个强大的秒杀系统。

基本上,你用Redis的这些命令就可以了。

RPUSH key value

插入秒杀请求

当插入的秒杀请求数达到上限时,停止所有后续插入。

后台启动多个工作线程,使用

LPOP key

读取秒杀成功者的用户id,进行后续处理。

或者使用LRANGE key start end命令读取秒杀成功者的用户id,进行后续处理。

每完成一条秒杀记录的处理,就执行INCR key_num。一旦所有库存处理完毕,就结束该商品的本次秒杀,关闭工作线程,也不再接收秒杀请求。

要是还撑不住,该怎么办

也许你会说,我们的客户很多。即使部署了Redis Cluster,仍然撑不住。那该怎么办呢?

记得某个伟人曾经说过:办法总比困难多!

下面,我们具体分析下,还有哪些情况会压垮我们架构在Redis(Cluster)上的秒杀系统。

脚本攻击

如现在有很多抢火车票的软件。它们会自动发起>现状大数据的前景十分的好,随着大数据应用于各行各业,并正在改变着各行各业,同时也引领大数据人才的变革,在国家及当地政府支持下,大数据在快速发展,企业日后发展将基于大数据计算分析、数据挖掘、数据分析等数据产业的发展,我国也将更加需要更多的数据人才。

部署大数据业务七步走
对于大数据,有三个重要的事实。首先,它并不是新趋势。亚马逊、微软和谷歌自上世纪90年代就开始进行大数据工作。事实上,几十年来,很多公司都一直在挖掘数据。可能由于当时只有资金雄厚的大型公司才能够进行大数据研究,但大数据确实早已存在。现在,基于廉价的计算和存储能力以及新工具和技术,几乎每个人都可以使用高级数据挖掘技术和算法了。
很多人认为大数据只是商业智能(BI)的新名称,虽然这两者有相似之处,但大数据超出了BI的范畴。
第二个事实:“大”是相对的。现在各行业各组织确实正面对创纪录水平的数据增长。据IDC称,我们每秒创造超过58 TB数据,到2020年,将拥有超过35ZB的存储数据。然而,大数据并不一定是巨大的,大数据并不在于其规模,而在于你需要如何处理它。拥有100 TB的小公司可能也存在大数据问题,因为他们需要提取、分析数据,并作出决策。
第三,大数据处理中使用的数据的定义是广泛的,它可以包含结构化和非结构化数据。对于一些公司来说,最重要的是大数据的元数据,或者关于数据的数据。
麦肯锡将大数据定义为“其规模超出传统数据库软件的捕捉、存储、管理和分析能力的数据集”,笔者补充了这一点:“这些数据集需要大量运行在数百甚至数千台服务器(云)的并行软件(系统)来处理。”
以下是大数据成功的7个步骤:
第1步:承认存在问题。 这往往是最难的一步。10年前,我们拒绝承认我们的网络已不再受防火墙和代理服务器设置的保护,而我们不得不为员工远程访问开放基础设施并拥抱互联网。对于大数据,IT领导者需要评估其数据情况:
● 你的数据集让你不堪重负吗?
● 你不知道所有数据的位置?
● 你(或者企业领导者)没有从你的数据中得到所需的信息?
● 企业领导没有基于数据来做决策?
● 有可能提高IT在企业政策和战略决策中的相关性吗?
如果你像大多数公司一样,部分或者所有这些问题的答案都是肯定的,那么是时候控制你的数据,并从中挖掘出情报以提供给领导层做决定。
第2步:认识到大数据带来的大机会。 我们总是被告知要紧密联系业务,“业务技术”这一说法已存在多年,但我们总是很难看到最新的软件和流程如何直接影响收入或者全球经济增长。而大数据却可以。为什么?因为信息就是力量,企业领导需要数据中挖掘出的信息来帮助企业竞争和发展。员工、客户和市场产生的大量数据让整个企业(从销售到营销部门)都不堪重负。而大数据能够为你提供简洁且实时的价值信息,帮助增加收入。[page]
第3步:制定大数据计划。 与任何计划一样,你开始就应该想到结果。企业需要知道什么?他们需要回答的问题是什么?在你开始使用Hadoop前,解决这些问题,并签订联合协议。然后按照下列步骤 *** 作(每个步骤可能需要数周或者数月):
1、隔离属于“大数据”的部分数据
2、分离“产品”大数据和“公司”大数据,例如人力资源分析需要的员工数据和电子商务平台的客户或产品搜索数据需要分离
3、认识和了解你的数据的波峰和波谷
4、了解哪些技术允许实时(或接近实时)大数据处理
5、确定关键的解决方案/供应商
6、从小事做起,评估与发展-先做一个项目,让你可以快速展示成果和ROI,然后转移到下一个大数据项目
7、继续分析、调整和输入-大数据是灵活的,需要随着数据、情报和企业要求的变化进行调整
第4步:利用分布式系统。大数据要求我们转换对系统和基础设施的想法。正如虚拟化从根本上改变了我们利用服务器和应用程序的方式,分布式系统和处理使我们能够管理大数据,因为分布式架构允许我们将问题分解成很多小任务,然后将这些任务分配到多个系统。好消息是,我们拥有了越来越多的攻击和架构框架可以利用,包括Cassandra、Hadoop、VMware、Red Hat等。分布式系统并不新鲜,但大数据将其带入到全新的水平,分布式方法包括:
● 多租户架构
● 分布式数据库
● 虚拟化
● 多线程
● 多核心CPU
● 并行处理
● 分布式文件系统
● 分布式负载平衡
● RAID算法
第5步:从分布式到分散式。 对大多数公司来说,这是真正的范式转变,这也是大数据和云计算结合的地方,鉴于互联网是世界上最大的分布式和分散的系统,我们应该更加充分地利用互联网来实现大数据。
我们很喜欢分布式实例或者计算处理,但分散式往往有种失去控制的感觉。这有必要吗?对于大数据,采用分散式做法是必要的,因为由于过度和孤立的服务,所有未使用的实例和存储容量都将浪费。
更重要的是,单靠分布式组件无法让我们跟上数据增长的步伐。IDC估计,到2020年,产生的数据和数据中心容量之间的差距将达到60%
然而,部分原因在于我们没有充分利用我们已经拥有的容量。Gartner估计,大多数计算机、服务器和网络只运行了30%的容量以准备好应对峰值或者未来增长。虽然我们可能永远不会以90%或者100%的容量运行,但我们可以更好地利用现有的容量,节省数百万美元,提高现有基础设施的总体拥有成本(TCO)。
分散式方法的主要特点:
● 没有中央瓶颈
● 大量的能力
● 有机的,需求推动容量增长
● 充分利用现有的基础设施和边缘设备
● 信息共享
● 假定每个人/每一个节点是“不可信任的”
● 地理分布:
○ 所有权和参与
○ 成本
○ 管理开销
○ 风险
分散式方法存在很多很好的例子,其中最知名的就是开源运动。
分散式方法还有两个新例子,笔者定义为分散式云系统:CloudStack和OpenStack我们仍然位于分散式方法的早期阶段,但随着数据继续增长,这将是未来几年的重要趋势。[page]
第6步:雇佣/培养合适的人才和技能。 云计算并不意味着更少的IT工作,但云计算和大数据的出现却是意味着我们需要发展我们的技能和培养人才。在大数据世界,数据库管理员等现有岗位变得更加重要。你还需要培养和招聘的其他职位包括:
● 数据科学家
● 架构师
● 随机理论师(算法)
● 业务分析师
● UX/UI专家
其中一些职位似乎是合乎逻辑的,但对于业务分析师和UX/UI专家,传统上不属于IT部门,你可以将这些人员安排在生产管理中,而在大数据解决方案中,他们需要携手开发和运营团队。这是因为你不能直接将大数据信息交给业务方面,使用图表和易于理解的分析是关键。
此外,如果你还没有整合开发/运营团队来更好地管理云计算部署,那么现在可以这样做了。这两个团队必须携手合作来实现任何云计算或者大数据战略。
第7步:通过大数据来利用数据。正如IT职位可能开始更倾向于业务,IT需要改变其度量的方式。你的团队中的每个人都应该热衷于追踪和记录关键性能指标(KPI),这些应该符合业务指标,而不只是及时发布和交付高质量代码。技术团队的每个人都应该有明确的指标,并努力寻找新方法来提高指标结果。
大数据可能不是我们所有人想要的答案,但它确实给IT创造了帮助企业提高收入的机会。

目前常用的大数据解决方案包括以下几类

一、Hadoop。Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是Hadoop是以一种可靠、高效、可伸缩的方式进行处理的。此外,Hadoop依赖于社区服务器,因此它的成本比较低,任何人都可以使用。

二、HPCC。HPCC,HighPerformanceComputingand(高性能计算与通信)的缩写。HPCC主要目标要达到:开发可扩展的计算系统及相关软件,以支持太位级网络传输性能,开发千兆比特网络技术,扩展研究和教育机构及网络连接能力。

三、Storm。Storm是自由的开源软件,一个分布式的、容错的实时计算系统。Storm可以非常可靠的处理庞大的数据流,用于处理Hadoop的批量数据。Storm支持许多种编程语言,使用起来非常有趣。Storm由Twitter开源而来

四、ApacheDrill。为了帮助企业用户寻找更为有效、加快Hadoop数据查询的方法,Apache软件基金会近日发起了一项名为“Drill”的开源项目。该项目帮助谷歌实现海量数据集的分析处理,包括分析抓取Web文档、跟踪安装在AndroidMarket上的应用程序数据、分析垃圾邮件、分析谷歌分布式构建系统上的测试结果等等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13371768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存