海量处理
盼盼编程
这个作者很懒,什么都没留下…
展开
-
腾讯面试--原来bitmap也可以用来排序
有40亿个不重复的uint32元素,试排序。内存限制0.6G 大数据,内存限制,想到了bitmap了,但这里是排序,我们之前都用bitmap去重。 其实bitmap也可以排序,因为是不重复的元素的,直接遍历到bitmap中,然后在遍历一次bitmap,就实现了排序 bitmap用处多多,哈哈...原创 2020-10-08 12:13:29 · 12459 阅读 · 5 评论 -
大数据常考--bitmap用来去重占用内存少
大数据,内存限制用bitmap,uint32用2^32表示,对应的bitmap大小0.5G。 这里要去重,直接遍历一次,然后统计bitmap里面的数据就可以达到去重的目的 这里假设读者已懂bitmap,只是简单的说下思路。...原创 2020-10-08 12:14:38 · 12519 阅读 · 5 评论 -
面试常考:bitmap判断其中是否有相同元素
有10亿个uint32元素,判断其中是否有相同元素。内存限制:0.6G 大数据问题,内存有限制,肯定网bitmap的方向想。 uint32是4个字节,2^32可以表示其所有数,2^32对应的bitmap是0.5G,所以这题只能用一个bitmap 遍历这40亿个数,并用bitmap标记,如果出现,则标记对应的位为1,已经是1则不操作。一次遍历完,统计bitmap的为1的个数记为count,count<40亿,则必然有重复的。...原创 2020-10-08 12:17:21 · 12839 阅读 · 5 评论 -
腾讯面试:bitmap统计元素出现次数,使用较少内存
有10亿个uint32元素,判断其中是否有相同元素。内存限制:1.2G 看到这个大数据的题目,还有内存限制,就用bitmap。在数据量比较少的情况下用hash表也是个不错的方法。 这里要用2个bitmap,占用总内存1G。 这里我们算算内存:uint32总共4个字节,根据bitmap的思想,2^32可以存储uint32数。 因为一个是8个位,2^32/8 = 0.5 * 2^30= 0.5G(2^30 = 大约1百万)...原创 2020-10-08 12:18:56 · 12958 阅读 · 6 评论 -
网站的高性能架构--应用服务器优化
1.分布式缓存 当网站遇到性能瓶颈时,第一个想到的解决方案就是使用缓存。 缓存指将数据存储在相对较高访问速度的存储介质中,并且无需重复计算即可直接使用。时间复杂度为O(1)。 2.异步操作:为了改善网站的扩展性,可以使用消息队列将调用异步化 3.使用集群 在网站高并发访问的情况下,使用负载均衡技术为一个应用构建一个由多台服务器组成的集群,将并发访问请求分发到多台服务器上处理 4.代码优化 :多线程 ...原创 2020-09-07 22:47:08 · 13036 阅读 · 4 评论 -
网站的高性能架构--web前端优化
1.浏览器访问优化:减少HTTP请求数,主要可通过合并CSS、JavaScript、图片(CSS偏移)。使用浏览器缓存启用压缩,在服务器端对文件进行压缩,在浏览器端对文件解压缩, 减少Cookie传输的数据量。静态资源使用独立域名访问,避免请求静态资源时发送Cookie,减少Cookie传输的次数。 2.CDN加速:CDN的本质仍然是一个缓存,只是部署在离用户最近的网络运营商的机房,一般缓存的都是静态资源。 3.反向代理:代理服务器位于网站机房一侧,代理网站Web...原创 2020-09-07 22:43:30 · 13182 阅读 · 3 评论 -
网站的高性能架构-性能测试方法
性能测试(合理范围):在资源可接受范围内,是否能达到性能预期。 负载测试(性能最高时的临界值):对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值。这时继续施压系统的处理能力将会下降。 压力测试(最大能承受的访问值):对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。 稳定性测试(长时间运行):给系统加载一定业务压力,使系统运行一段较长时间,检测系统是否稳定。...原创 2020-09-07 22:40:13 · 12951 阅读 · 3 评论 -
网站的高性能架构--性能测试指标
1.响应时间:指应用执行一个操作从发出请求到最后收到响应数据所需要的时间 2.并发数 指系统能够同时处理请求的数目,这个数字也反映了系统的负载性能。对于网站而言,并发数指网站用户同时提交请求的用户数目。 3.吞吐量 指单位时间内系统处理的请求数量。可用“请求数/秒”或“页面数/秒”或“访问人数/天”或“处理业务数/小时”等来衡量。 TPS(每秒事物数)是吞吐量的一个常用量化指标。HPS(每秒HTTP请求数)、QPS(每秒查询数)。 4.性能计数器 指操作系统的一些...原创 2020-09-07 22:39:27 · 13323 阅读 · 4 评论 -
大型网站演化发展历程之三
第六阶段:使用反向代理和CDN加速加速网站响应,CDN和反向的基本原理都是缓存,CDN部署在网络提供商的机房,使用用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据。反向代理服务器可以缓存用户所有需要的资源,如果有可以直接返回给用户。第七阶段:使用分布式文件系统和分布式数据库系统。第八阶段:使用NOSQL和搜索引擎,NOSQL提供存储,搜索引擎提供检索第九阶段:业务拆分。通过使用分而治之的手段将整个网站业务分成不同的产品线,每个服务独立部署维护,这些业...原创 2020-09-06 22:34:29 · 12926 阅读 · 3 评论 -
大型网站演化发展历程之二
第三阶段:使用缓存改善网站性能。80%的业务集中在20%的数据上,如果把这常用的20%的数据缓存在内存中,就可以减小数据库的压力。可以使用本地缓存,本地内存不够,然后使用分布式缓存。第四阶段:使用应用服务器集群改善网站的并发处理能力第五阶段:数据库读写分离,这需要数据库有数据同步功能。...原创 2020-09-06 22:33:58 · 12947 阅读 · 3 评论 -
大型网站架构模式之三
1.冗余。防止某台服务器突然宕机 2.自动化。在无人值守的情况下网站可以正常运行,自动化架构设计主要集中在发布运维方面 3.安全。防范网站有可能遭受的攻击。原创 2020-09-06 22:31:44 · 12879 阅读 · 4 评论 -
大型网站架构模式之二
1.分布式。分割和分层的目的是为了将切分后的模块进行分布式部署。 2.集群。多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。 3.缓存。缓存是改善软件性能的第一手段。CDN,反向代理,本地缓存,分布式缓存...原创 2020-09-06 22:31:04 · 12924 阅读 · 3 评论 -
大型网站核心架构要素--扩展性
网站的扩展性架构直接关注网站的功能需求,因为功能不断扩展,网站要能快速响应需求变更。 网站可扩展架构的主要手段是事件驱动架构和分布式服务。 事件驱动架构主要通过消息队列实现。 分布式服务则是将业务和可复用服务分离出来。...原创 2020-09-06 22:27:53 · 12960 阅读 · 4 评论 -
大型网站核心要素--伸缩性
伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。 对于应用服务器,只要服务器上不保存数据,可以随时向集群中添加服务器。 对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,需要改进缓存路由算法保证缓存数据的可访问性。 NOSQL数据库产品,对伸缩性的支持很好。...原创 2020-09-06 22:22:35 · 12975 阅读 · 4 评论 -
大型网站核心架构要素--可用性
服务器宕机是一个重大的事故。 网站的可用手段是冗余,应用部署在多台服务器同时提供访问,数据在多台服务器上互相备份,利用负载均衡,排除掉宕机的节点。 可用性还需要开发过程质量保证。通过预发布验证,自动化测试,自动化发布,灰度发布等手段,减少将故障引入线上环境的可能性,便秘事故范围扩大。...原创 2020-09-06 22:17:37 · 12926 阅读 · 4 评论 -
大型网站核心架构要素--性能
性能,性能是网站的一个重要指标。 在浏览器端,可以通过浏览器缓存,使用页面压缩,合理布局页面,减少cookie传输等手段改善性能。 使用CDN 在应用服务器端,使用本地缓存和分布式缓存 使用异步操作将用户发送至消息队列等待后续处理 应用服务器组成一个集群共同对外服务。 在代码层面,使用多线程,改善内存管理 在数据库服务器端,索引,缓存,sql优化。NOSQL数据库通过优化数据模型,存储结构,伸缩性等手段 ...原创 2020-09-06 22:11:44 · 9165 阅读 · 4 评论 -
大型网站架构模式之一
1.分层。将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上下层对下层的依赖和调用组成一个完整的系统。通过分层,可以更好地将一个庞大的软件系统切分成不同的部分,便于分工合作开发和维护;各层之间具有一定的独立性,只要维持接口不变。 2.分割。将系统纵向方面进行切分。网站越大,功能越复杂,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,可以有助于软件的开发的维护和分布式部署。 3.分布式。分割和分层的目的是为了将切分后的模块进行分布...原创 2020-09-06 22:01:19 · 9157 阅读 · 4 评论 -
大型网站演化发展历程
大型网站都是从小型网站发展而来,下面看下大型网站的演变过程。 第一阶段:初始阶段网站架构。应用程序,数据库,文件所有资源都放在同一台服务器上。 第二阶段: 应用服务和数据服务分离。应用程序,数据库,文件资源分别用不同的服务器,这样从第一阶段的一个服务到第二阶段的三个服务器。 第三阶段:使用缓存改善网站性能。80%的业务集中在20%的数据上,如果把这常用的20%的数据缓存在内存中,就可以减小数据库的压力。可以使用本地缓存,本地内存不够,然后使用分布式缓存。...原创 2020-09-06 21:41:33 · 9307 阅读 · 4 评论