云计算时代出现了大量XaaS形式的概念,从IaaS、PaaS、SaaS 到容器云引领的CaaS,再到火热的微服务架构,它们都在试着将各种软、硬件资源等抽象为一种服务提供给开发者使用,让他们不再担心基础设施、资源需求、中间件等等,在减轻心智负担的同时更好地专注于业务。 无服务器架构(Serverless)和 Functions-as-a-Service(FaaS)是云计算的热点趋势。已经有不少文章介绍了无服务器架构这项技术典型的应用场景是在流式任务处理,目前已经受到了越来越广泛的关注。本文将为大家介绍什么是无服务器架构会成为下一代IT基础架构。 去年秋天,由于大流量涌入,澳大利亚统计网在几个小时内便崩溃。 接下来的一个周末,
对于企业来说网站是企业重要的门户,然而不同企业对于网站服务器托管的方式会随着企业的需求而变化。今天我们就来聊一聊如何根据网站类型和企业发展阶段选择服务器吧。 一般来说大型网站都是从小型网站发展而来,初始阶段的网站架构都比较简单,随着业务复杂和用户量的激增,才开始做很多架构上的改进。当它还是小型网站的时候没有太多访客,一般来讲只需要一台服务器就够了,这时应用程序、数据库、文件等所有资源都在一台服务器上。 但随着网站业务的发展和用户量的增加,一台服务器就无法再满足需求了。大量用户访问导致访问速度越来越慢,而逐渐增加的数据也会导致存储空间不足。这时就需要将应用和数据分离,应用和数据分离后整个网站使用 3 台服务器,分别是应用服务器、文
RAID代表Redundant Array of Inexpensive (or Independent) Drive。RAID的优点在于三个方面即可用性(Availability)、容量(Capacity)及性能(Performance)。利用RAID技术于存储系统的好处主要有以下三种: 1、通过把多个磁盘组织在一起作为一个逻辑卷提供磁盘跨越功能 2、通过把数据分成多个数据块(Block)并行写入/读出多个磁盘以提高访问磁盘的速度 3、通过镜像或校验操作提供容错能力 根据实际情况选择适当的RAID级别可以满足用户对存储系统可用性、性能和容量的要求。常用的RAID级别有以下几种:NRAID,JBOD,RAID0,
2、作弊的常见手段 秒杀和抢购收到了海量的请求,实际上水分是很大的。不少用户为了抢到商品,会使用刷票软件等类型的辅助工具,所以就会发送尽可能多的请求到服务器。还有一部分用户,自己制作强大的自动请求脚本,这些都是属于“作弊的手段”,不过有“进攻”就有“防守”。 2.1 、同一个账号,一次性发出多个请求 部分用户通过浏览器的插件或者其他工具,在秒杀开始的时间里,以自己的账号一次发送上百甚至更多的请求。这样的用户破坏了秒杀和抢购的公平性,这种请求在某些没有做数据安全处理的系统里,也可能造成另外一种破坏,导致某些判断条件被绕过。如一个简单的领取逻辑,先判断用户是否有参与记录,如果没有则领取成功,最后写入到参与记录中。这是个非常简
3、高并发下的数据安全 多线程写入同一个文件的时候,会存现“线程安全”的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的)。如果是MySQL数据库,可以使用它自带的锁机制很好的解决问题,但是在大规模并发的场景中,是不推荐使用MySQL的。秒杀和抢购的场景中,还有另外一个问题,就是“超发”,如果在这方面控制不慎,会产生发送过多的情况,比如某些电商搞抢购活动,买家成功拍下后,商家却不承认订单有效,拒绝发货。问题也许并不一定是商家奸诈,而是系统技术层面存在超发风险导致的。 3.1、超发的原因 假设某个抢购场景中,一共只有100个商品,在最后一刻,我们已经消耗了99个商
在网上购物秒抢某个商品,比如说小米手机,这对我们来说都不陌生。这些看似很简单的东西从技术的角度来说对于Web系统是一个巨大的考验,一个Web系统在很短时间内收到很多请求时,系统的优化和稳定至关重要。今天就由小编为大家详细解释一下这些问题。 1、大规模并发带来的挑战 比如说5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常状态。一起来讨论下优化的思路和方法。 1.1、请求接口的合理设计 一个抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是Web后台请求接口。通常静态HTML等内容,是通过CDN的部署,一般压力不大,核
3.实战方案 1)通用方案 日用户流量大,但是比较分散,偶尔会有用户高聚的情况; 场景: 用户签到,用户中心,用户订单等。 说明: 场景中的这些业务基本是用户进入APP后会操作到的,除了活动日(618、双11等),这些业务的用户量都不会高聚集,同时这些业务相关的表都是大数据表,业务多是查询操作,所以我们需要减少用户直接命中DB的查询;优先查询缓存,如果缓存不存在,再进行DB查询,将查询结果缓存起来。 更新用户相关缓存需要分布式存储,比如使用用户ID进行hash分组,把用户分布到不同的缓存中,这样一个缓存集合的总量不会很大,不会影响查询效率。 方案如: 用户签到获取积分: 计
其他业务: 上面例子多是针对用户存储缓存,如果是公用的缓存数据需要注意一些问题,如:公用的缓存数据需要考虑并发下的可能会导致大量命中DB查询,可以使用管理后台更新缓存,或者DB查询的锁住操作。 以上例子是一个相对简单的高并发架构,并发量不是很高的情况可以很好的支撑,但是随着业务的壮大,用户并发量增加,我们的架构也会进行不断的优化和演变,比如对业务进行服务化,每个服务有自己的并发架构,自己的均衡服务器,分布式数据库,NoSQL主从集群,如:用户服务、订单服务。 2)消息队列 秒杀、秒抢等活动业务,用户在瞬间涌入产生高并发请求。 场景:定时领取红包等。 说明: 场景中的定时领取是一个高并发的业
在操作系统中高并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。今天小编就和大家聊一聊基于服务器架构实现高并发性能测试与项目实战方案。 服务器架构 业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。 一个可以支持高并发的服务少不了好的服务器架构,需要有均衡负载,数据库需要主从集群,NoSQL缓存需要主从集群,静态文件需要上传CDN,这些都是能让业务程序流畅运行的强大后盾。 服务器这块多是需要运维人员来配合搭建,具体我就不多说了,点到为止。 大致需要用到的服务器架构如下: 服务器:
这也是受当时的技术限制造成的,因为网络传输限制,必须让所有的根服务器数据能包含在一个512字节的UDP包中,所以根服务器只能限制在13个,并且每个服务器要使用字母表中的单个字母命名,这也是根服务器从A到M命名的原因。 根服务器主要用来管理互联网的主目录,全世界只有13台(这13台根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。 所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理,这13台根服务器可以指挥Firefox或Internet Explorer
现在我们就当已经实现了redisDB和cache这两个组件,具体的细节这里就先不做讨论了,来看看如何使用使用吧。首先需要将两个组件注入到容器中: 到这里你可能会觉得这样以来反而有点繁琐了。cache和redisDB的结构如此之像,完全可以把redis写到cache中而没必要单独分离出来?但是你想过没有,有些数据及时性没那么高而且数量比较大,用redis有点不合适,mongodb是更好的选择;有些数据更新频率更慢,对查询速度也没要求,直接写入文件保存到硬盘可能更为合适;再或者,你的客户觉得redis运维难度有点大,让你给他换成memcache... 这就是为什么把它分离出来了。然后,继续改进代码: 我们新增加了一个接口Backen
依赖注入(Dependency Injection,简称DI)又称控制反转(Inversion of Control,简称IOC),在目前的主流框架中,如ThinkPHP、Laravel等都有实现。什么是依赖注入呢?今天就让小编为大家讲解一下依赖注入的相关知识吧。 举个简单的例子: (1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。 (2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。 (3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子