毫秒

解密双十一小程序云背后毫秒级伸缩的Serverless计算平台:函数计算

a 夏天 提交于 2019-12-05 06:35:35
自2017年第一批小程序上线以来,越来越多的移动端应用以小程序的形式呈现。小程序拥有触手可及、用完即走的优点,这大大减少了用户的使用负担,使小程序得到了广泛的传播。在阿里小程序也被广泛地应用在淘宝/支付宝/钉钉/高德等平台上,例如今年双11大家在淘宝/天猫上参加的活动,大部分都是通过小程序提供的。 一个小程序可以分为客户端和服务端:客户端包括界面的展示和交互逻辑,服务端则包括数据的处理和分析。为了支撑大量的小程序,平台在服务端面临的挑战有: 大量的小程序是不活跃的,传统的至少一台服务器的方式会造成资源浪费 在活动高峰期小程序的调用量激增,要求服务端能够快速进行弹性伸缩 针对小程序场景,阿里云提供了完整的小程序解决方案: 小程序云 。资源的有效利用和弹性伸缩,是小程序云提供的核心能力之一,而这背后依托的,就是阿里云 函数计算 服务。函数计算是一个全托管Serverless计算服务,让开发者无需管理服务器等基础设施,只需编写和上传代码,就能够构建可靠、弹性、安全的服务。下面就以双11小程序场景为例,解析函数计算在弹性伸缩上的核心技术。 小程序架构 让我们先来看一下淘宝小程序的技术架构是什么样的: 用户在手机淘宝点击店铺活动,就进入了小程序。界面及交互由小程序客户端提供 在用户参与活动过程中,需要向服务端请求或者发送数据时,由客户端发起函数调用 函数调用先经过淘宝接入网关

JMeter多个线程定时循环发送消息(RabbitMQ)

谁说我不能喝 提交于 2019-12-05 04:47:54
案列需求:模拟10个生产者每隔1分钟发送消息给交换机。1. 添加线程组(Thread Group) 2. 添加消息生产者(AMQP Publisher)    为了知道是那个线程发送的消息和发送消息的时间,在消息内容中添加如下:     1.获取线程名称:${__groovy(threadName )}     2.获取当前时间:${__time(,)} 注:单位为毫秒(ms) 3.在Thread Group 下添加BeanShell定时器: 设置线程休眠时间为: Thread.sleep(60000)//单位:毫秒 4.查看结果: 来源: https://www.cnblogs.com/angel-devil/p/11907167.html

php Swoole实现毫秒级定时任务

北城余情 提交于 2019-12-05 04:25:15
项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole提供的强大的毫秒定时器。 应用场景举例 我们可能会遇到这样的场景: 场景一:每隔30秒获取一次本机内存使用率 场景二:2分钟后执行报表发送任务 场景三:每天凌晨2点钟定时请求第三方接口,如果接口有数据返回则停止任务,如果接口由于某种原因没有响应或者没有数据返回则5分钟后继续尝试请求该接口,尝试5次后仍然失败则停止该任务 以上的三个场景我们都可以归纳为定时任务的范畴。 Swoole毫秒定时器 Swoole提供了异步毫秒定时器函数: swoole_timer_tick(int $msec, callable $callback) :设置一个间隔时钟定时器,每隔$msec毫秒执行一次$callback,类似于javascript中的 setInterval() 。 swoole_timer_after(int $after_time_ms, mixed $callback_function) :在指定的时间$after_time_ms后执行$callback_function,类似于javascript的 setTimeout() 。 swoole_timer_clear(int

JavaScript获取时间戳

无人久伴 提交于 2019-12-05 04:24:50
有时前后端交互需要传递时间戳。获取时间戳的方法如下: console.log( Date.parse(new Date()) ) // 1574318285000 精确到秒 console.log( (new Date()).valueOf() ) // 1574318285290 精确到毫秒 console.log( new Date().getTime()) // 1574318285290 精确到毫秒 来源: https://www.cnblogs.com/xguoz/p/11905531.html

50 前端学习7之 Bootstrap

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-05 02:59:41
目录 一、jQuery补充 1. 动画效果 2. 补充 2.1 each循环 2.2 data() 二、Bootstrap 1. 布局容器 2. 栅格系统 2.1 栅格参数 2.2 列偏移 3. 表格 4. 表单 5. 按钮 5.1 预定义样式 6. 快速浮动 一、jQuery补充 1. 动画效果 // 基本 show(毫秒数) // 显示 hide(毫秒数) // 隐藏 toggle(毫秒数) // 滑动 slideDown(毫秒数) slideUp(毫秒数) slideToggle(毫秒数) // 淡入淡出 fadeIn(毫秒数) fadeOut(毫秒数) fadeTo(毫秒数) fadeToggle(毫秒数) 2. 补充 2.1 each循环 jQuery.each(collection, callback(indexInArray, valueOfElement)): 描述:一个通用的迭代函数,它可以用来无缝迭代对象和数组。数组和类似数组的对象通过一个长度属性(如一个函数的参数对象)来迭代数字索引,从0到length - 1。其他对象通过其属性名进行迭代。 li =[10,20,30,40] $.each(li,function(i, v){ console.log(i, v);//index是索引,ele是每次循环的具体元素。 }) 输出: 010 120 230 340

ES 调优查询亿级数据毫秒级返回!怎么做到的?--文件系统缓存

六月ゝ 毕业季﹏ 提交于 2019-12-04 10:32:13
 一道面试题的引入:   如果面试的时候碰到这样一个面试题:ElasticSearch(以下简称ES) 在数据量很大的情况下(数十亿级别)如何提高查询效率?   这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有你想象中那么好的。   很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s,坑爹了。   第一次搜索的时候,是 5~10s,后面反而就快了,可能就几百毫秒。   然后你就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 ES,或者就是自己玩玩儿 Demo,被问到这个问题容易懵逼,显示出你对 ES 确实玩的不怎么样?   说实话,ES 性能优化是没有银弹的。啥意思呢?就是不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景。   也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样。   性能优化的杀手锏:Filesystem Cache   你往 ES 里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到 Filesystem Cache 里面去。   整个过程,如下图所示:      ES 的搜索引擎严重依赖于底层的 Filesystem Cache,你如果给 Filesystem Cache 更多的内存

Delphi中怎么结束线程(这个线程是定时执行的)(方案一)

五迷三道 提交于 2019-12-04 09:12:53
转载自 https://www.cnblogs.com/xumenger/p/4453902.html 在线程对象被释放之前,首先要检查线程是否还在执行中,如果线程还在执行中(线程ID不为0,并且线程结束标志未设置),则调用Terminate 过程结束线程。Terminate 过程只是简单地设置线程类的 Terminated标志,如下面的代码: 1 2 3 4 procedure TThread . Terminate; begin FTerminated:= True ; end ;   所以线程仍然必须继续执行到正常结束之后才行,而不是立即终止线程,这一点要注意   在这里说一些题外话:如何才能“立即”终止线程(当前是指用TThread 创建的线程)。结果当然是不行!终止线程的唯一的方法就是让Execute 方法执行完毕, 所以一般来说,要让你的线程能尽快终止,必须在Execute 方法中在较短的时间内不断检查Terminated标志,以便能及时地退出。这是设计线程代码的一个很重要的原则!   当然如果你一定要能“立即”退出线程,那么TThread 类不是一个好的选择,因为如果用API强制终止线程的话,最终会导致TThread 线程对象不能被正确释放,在对象析构时出现 Access Violation。这种情况你只能使用API或者RTL函数来创建线程 比如这样一个例子

Redis中的键值过期操作

廉价感情. 提交于 2019-12-04 06:50:05
1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期; pexpire key milliseconds:设置 key 在 n 毫秒后过期; expireat key timestamp:设置 key 在某个时间戳(精确到秒)之后过期; pexpireat key millisecondsTimestamp:设置 key 在某个时间戳(精确到毫秒)之后过期; 下面分别来看以上这些命令的具体实现。 1)expire:N 秒后过期 127.0.0.1:6379> set key value OK 127.0.0.1:6379> expire key 100 (integer) 1 127.0.0.1:6379> ttl key (integer) 97 其中命令 ttl 的全称是 Time To Live 表示此键值在 n 秒后过期。例如,上面的结果 97 表示 key 在 97s 后过期。 2)pexpire:N 毫秒后过期 127.0.0.1:6379> set key2 value2 OK 127.0.0.1:6379> pexpire key2 100000 (integer) 1 127.0.0.1:6379> pttl key2 (integer) 94524 其中 pexpire key2

Springboot 集成 Redisson 分布式锁:项目集成

风流意气都作罢 提交于 2019-12-04 05:47:59
文章目录 Springboot 集成 Redisson 分布式锁:项目集成 1、POM引入依赖 2、创建配置文件 3、编写配置类 Springboot 集成 Redisson 分布式锁:项目集成 1、POM引入依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.11.2</version> </dependency> 2、创建配置文件 我比较喜欢用YAML 格式,所以此处使用YAML 配置文件 把该配置文件放在与 application.yml 同级的目录下 singleServerConfig : idleConnectionTimeout : 10000 pingTimeout : 1000 connectTimeout : 10000 timeout : 3000 retryAttempts : 3 retryInterval : 1500 reconnectionTimeout : 3000 failedAttempts : 3 password : ****** subscriptionsPerConnection : 5 clientName : null address : 'redis://localhost:6379'

setInterval与setTimeout的区别

限于喜欢 提交于 2019-12-04 01:09:46
在制作网页动态效果时,一定会遇到某些需求,要求某段程序等待多时时间后再开始执行,就像在我们的生活中一样,待会儿再开始做一件事。在JavaScript中主要通过定时器实现此类需求,本文将对定时器做一个概括,正对setTimeout()做一个详细用法总结。 一.setInterval与setTimeout的区别 setInterval setInterval()方法可按照指定的周期来调用函数或者计算表达式(以毫秒为单位) 语法: setInterval(函数表达式,毫秒数); setInterval()会不停的调用函数,直到clearInterval()被调用或者窗口被关闭,由 setInterval()返回的ID值可用作clearInterval()方法的参数。 setTimeout setTimeout()方法用于在指定毫秒数后再调用函数或者计算表达式(以毫秒为单位) 语法: setTimeout(函数表达式,毫秒数); setTimeout()只执行函数一次,如果需要多次调用可以使用setInterval(),或者在函数体内再次调用setTimeout() 区别   通过以上分析可以看出,setTimeout与setInterval的主要区别是:   setTimeout()方法只运行一次,也就是说当达到设定的时间后就出发运行指定的代码,运行完后就结束了