摘要: 从sleep的实现说起 在nodejs中,如果要实现sleep的功能主要是通过“setTimeout + promise”实现,也可以通过“循环空转”来解决。前者是利用定时器实现任务的延迟执行,并通过promise链管理任务间的时序与依赖,本质上nodejs的执行线程并没有真正的sleep,事件循环 阅读全文
posted @ 2020-03-20 17:51 royalrover 阅读(5909) 评论(0) 推荐(4) 编辑
摘要: 实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端。而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如下图),代理服务不仅负责请求反向代理及转发规则设定,同时也负责业务服务伸缩扩容、日志输出与相关资源监 阅读全文
posted @ 2020-03-10 18:16 royalrover 阅读(1749) 评论(0) 推荐(0) 编辑
摘要: 背景 目前微店中台团队为了满足公司大部分产品、运营以及部分后端开发人员的尝鲜和试错的需求,提供了一套基于图形化搭建的服务端接口交付方案,利用该方案及提供的系统可生成一副包含运行时环境定义可立即运行的工程代码,最后,通过 “某种serverless平台” 实现生成后代码的部署、CI、运行、反向代理、进 阅读全文
posted @ 2019-08-20 09:22 royalrover 阅读(1008) 评论(0) 推荐(0) 编辑
摘要: 本文是根据2019.4.13日参加 “Node Party”论坛使用的PPT,加上笔者新的思考与沉淀而来。在此再次感谢 贝贝网前端部门和芋头君以及相关与会人员的支持! —— 微店杨力(曾用名 欲休) 1. Node EE的前世今生 什么是 Node EE Node EE的诞生 Node EE范畴 总 阅读全文
posted @ 2019-05-09 10:51 royalrover 阅读(807) 评论(4) 推荐(1) 编辑
摘要: 场景 实际业务中可能出现重复消费一个可读流的情况,比如在前置过滤器解析请求体,拿到body进行相关权限及身份认证;认证通过后框架或者后置过滤器再次解析请求体传递给业务上下文。因此,重复消费同一个流的需求并不奇葩,这类似于js上下文中通过 deep clone一个对象来操作这个对象副本,防止源数据被污 阅读全文
posted @ 2018-08-20 11:07 royalrover 阅读(1355) 评论(0) 推荐(3) 编辑
摘要: deno node.js之父Ryan Dahl在一个月前发起了名为deno的项目,项目的初衷是 打造一个基于v8引擎的安全的TypeScript运行时 ,同时实现HTML5的基础API。所谓的安全运行时,是将TS代码运行在一个沙盒里,访问受限的文件系统、网络功能,这比较类似于web里的ifram 阅读全文
posted @ 2018-06-30 14:06 royalrover 阅读(10947) 评论(6) 推荐(4) 编辑
摘要: ThreadLocal变量的说法来自于Java,这是在多线程模型下出现并发问题的一种解决方案。 ThreadLocal变量作为线程内的局部变量,在多线程下可以保持独立,它存在于 线程的生命周期内,可以在线程运行阶段多个模块间共享数据。那么,ThreadLocal变量 又如何与node.js扯上关系呢 阅读全文
posted @ 2018-05-28 10:10 royalrover 阅读(1403) 评论(2) 推荐(1) 编辑
摘要: 由表及里 HTTP服务器用于响应来自客户端的请求,当客户端请求数逐渐增大时服务端的处理机制有多种,如tomcat的多线程、nginx的事件循环等。而对于node而言,由于其也采用事件循环和异步I/O机制,因此在高I/O并发的场景下性能非常好,但是由于单个node程序仅仅利用单核cpu,因此为了更 阅读全文
posted @ 2017-07-19 20:26 royalrover 阅读(4454) 评论(0) 推荐(6) 编辑
摘要: socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具。在常规的http服务中,这套模式一切正常,可是一旦server中集成了socket.io服务就会导致ws通道 阅读全文
posted @ 2017-06-01 18:06 royalrover 阅读(9971) 评论(20) 推荐(6) 编辑
摘要: K8s 是什么 Kubernetes 是一个开源的容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。K8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Ku 阅读全文
posted @ 2023-12-20 11:07 royalrover 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 引言 Apple MDM (Mobile Device Management) 字面理解就是一种管理移动设备的方式,覆盖 iOS 5 及更高版本的 iPhone/iPod touch/iPad、Mac OS X 10.7 及更高版本的 Mac、TVOS 9 及更高版本的 Apple TV,标题中的 阅读全文
posted @ 2023-09-12 16:33 royalrover 阅读(2458) 评论(5) 推荐(1) 编辑
摘要: SLA通俗理解 SLA 表征服务方与客户间的服务等级协议,定义服务方需保证的服务质量以及不达标情况下的服务补偿,在SRE领域,SLA 细分为 SLI、SLO 与 SLA: SLI,服务质量指标,服务的某项质量的一个具体的量化指标,如时延、吞吐量、错误率等。 SLO,服务质量目标,服务的某项 SLI  阅读全文
posted @ 2023-04-19 14:50 royalrover 阅读(762) 评论(0) 推荐(0) 编辑
摘要: 背景 由于工程体系的历史原因,很多工程服务并未注册至开放网关而是私自开放接口,每个服务都维护一个client身份表,同一个client在不同开放服务间同步身份数据困难。 在使用过程中,调用方申请client流程割裂、服务认证功能后置导致每个服务提供方认证逻辑同质化、无开放接口权限管控等功能影响服务的 阅读全文
posted @ 2022-04-07 19:51 royalrover 阅读(1051) 评论(0) 推荐(0) 编辑
摘要: 啥是AK AK(Access Key)是一种身份证明,它解决了“资源的使用者是谁”这个问题,比如在生活中,身份证可以证明你是你,而在云计算或程序中,AK能证明你是这个应用的拥有者。 AK和密码的有啥区别呢,密码面对的主体是人,人可以使用密码登录系统证明身份;AK的主体是程序或服务,程序或服务可以使用 阅读全文
posted @ 2022-03-31 17:47 royalrover 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 说明 在Chrome 81版本之上时,通过iframe引入的页面无法正常使用粘贴板。此时,控制台会输出 DOMException: The Clipboard API has been blocked because of a permissions policy applied to the cu 阅读全文
posted @ 2021-05-19 10:30 royalrover 阅读(788) 评论(0) 推荐(1) 编辑
摘要: 问题一 页面异步请求莫名被canceled 原因 浏览器发出请求后,进行了页面级别的跳转(location.href=xxx)或者reload,导致发出的请求被canceled。 问题二 Chrome 的network窗口中接口请求成功但无法查看返回值 原因 尽管Chrome的network选中了p 阅读全文
posted @ 2021-03-03 14:32 royalrover 阅读(560) 评论(0) 推荐(0) 编辑
摘要: 云开发趋势 各大云厂商今年在开发者阵地侧逐渐开始向“云”化开发发展,最为显著的产品就是Cloud IDE,催生出来的趋势就是云端开发。云开发现阶段尽管在各大公司内部无法作为日常开发工具普遍推广,但是在某些特定场景下Cloud IDE云开发是非常让人着迷的: 即开即用,用完即走的场景,如编写函数(天猫 阅读全文
posted @ 2021-03-01 18:23 royalrover 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 阿里云云开发平台助力风变科技Serverless架构升级实战 背景 风变科技 一个希望通过技术去推动下一代基础教育的组织。旗下产品包括第一代的熊猫书院(读书类产品)、第二代的熊猫小课(泛学科综合学习平台),以及现在的风变编程(成人python教育)和风变人生设计(个人职业生涯规划类)。 目前,风变聚 阅读全文
posted @ 2020-11-30 09:25 royalrover 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 昨日17:58:00,笔者的爱女出生啦。小蛮,欢迎加入我们的团队! 阅读全文
posted @ 2020-09-24 11:41 royalrover 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 原因 子进程的stdout及stderr需要被设置为某个文件,根据文档 "setupMaster" 说明,需要设置stdio数组: c.setupMaster({ exec: , stdio: [0, 1, 2, 'ipc'] }) let c = require('cluster'); let f 阅读全文
posted @ 2019-12-11 17:27 royalrover 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 说明 nginx日志按天分片是运维的基本要求,不仅可以减小文件大小,方便检索关键数据,也可以定时删除过期的日志。可是nginx和tengine默认并不支持文件分片,因此需要额外处理。 另外,日志分片需要借助 ngx_http_log_module 模块,默认通过yum安装的nginx并不携带此模块, 阅读全文
posted @ 2019-10-12 15:47 royalrover 阅读(1197) 评论(0) 推荐(0) 编辑
摘要: 远程调试 所谓远程调试,是指在本地IDE或命令行即时调试服务端代码,这在预发环境的测试阶段可以使用。远程调试避免了服务端环境的模拟,可快速定位bug。 node应用调试 本文的教程主要针对采用 VS Code IDE的群体。目前并未搭建一个系统专门支持node应用远程调试,因此需要开发人员手动去对应 阅读全文
posted @ 2019-05-15 18:28 royalrover 阅读(1009) 评论(0) 推荐(0) 编辑
摘要: Rockerjs Core "项目地址" "项目主页" 基于 TypeScript 和注解的轻量级IoC容器,提供了依赖注入、面向切面编程及异常处理等功能。Rockerjs Core可在任意工程中引入,是一个框架无关的IoC容器。 @rockerjs/core 模块不依赖于任何框架,并与现有框架、库 阅读全文
posted @ 2019-03-21 10:13 royalrover 阅读(878) 评论(0) 推荐(1) 编辑
摘要: 一步步学会用docker部署应用 docker是一种虚拟化技术,可以在内核层隔离资源。因此对于上层应用而言,采用docker技术可以达到类似于虚拟机的沙盒环境。这大大简化了应用部署,让运维人员无需陷入无止境繁琐的依赖环境及系统配置中;另一方面,容器技术也可以充分利用硬件资源,做到资源共享。 本文将采 阅读全文
posted @ 2019-02-28 15:56 royalrover 阅读(26042) 评论(0) 推荐(8) 编辑
摘要: 数据库与缓存双写问题 计算机领域任何一个问题都可以通过增加一个抽象“层”来解决。 业务中为了减少热点数据不必要的db查询,往往会增加一层缓存来解决I/O性能。可是I/O多了一层也就多了一层的更新维护与容错保障,当修改db中某些数据时,往往会面临缓存更新的问题,在这里简单介绍 数据库与缓存双写问题以及 阅读全文
posted @ 2018-12-17 08:09 royalrover 阅读(904) 评论(0) 推荐(0) 编辑
摘要: 问题初现 某基于node.js开发的业务系统向外提供了一个dubbo服务,提供向第三方缓存查询、设置多项业务数据并聚合操作结果。在QPS达到800时(两台虚拟机,每台机器4Core8G4node进程),在监控平台上出现了非常多的slow rt警告,平均接口响应达到60+ms,请求报警率达到80%+。 阅读全文
posted @ 2018-10-30 09:49 royalrover 阅读(2939) 评论(1) 推荐(5) 编辑
摘要: 整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文。而且笔者于十月一日将会举办人生大事 婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章。 关于服务端截图,这种使用场景非常少见,大多服务器不同于PC机器并不提供相关图形界面以及图形库,所以对不同的系统的不同版本的服务器需要安装不 阅读全文
posted @ 2018-09-28 09:25 royalrover 阅读(2896) 评论(2) 推荐(1) 编辑
摘要: 背景 目前nodejs应用越来越广泛,但和java的dubbo体系接入困难,所以我们需要实现node端的dubbo provider逻辑。java的dubbo provider是和consumer在一个jar中,提供了服务配置、注册、集群与负载均衡、监控和多种协议。使用nodejs实现一个可用的du 阅读全文
posted @ 2018-07-30 16:37 royalrover 阅读(2780) 评论(0) 推荐(1) 编辑
摘要: TypeScript是什么 TypeScript是JavaScript的一个超集 TypeScript需要编译为JavaScript才能运行(语法糖) TypeScript提供了类型系统,规范类似Java TypeScript提供了ES6的支持,也可以支持部分ES7草案的特性,不用担心TypeScr 阅读全文
posted @ 2018-04-30 11:15 royalrover 阅读(1371) 评论(0) 推荐(3) 编辑
摘要: BTC中的utxo模型 BTC中引入了许多创新的概念与技术, 区块链、PoW共识、RSA加密、萌芽阶段的智能合约 等名词是经常被圈内人所提及,诚然这些创新的实现使得BTC变成了一种有可靠性和安全性保证的封闭生态系统,但是在这个BTC生态中如果没有搭配区块链模式的转账模块,那么货币的流通属性 阅读全文
posted @ 2018-03-30 13:50 royalrover 阅读(1982) 评论(3) 推荐(8) 编辑
摘要: 关于首屏 首屏时间是指从转向该页面到屏幕中该页面所有内容都可见时的时间。已经有太多的关于首屏时间的计算,在本文中并不重复阐述这些已经被提出或者实现的方案,而旨在探索与讨论更多的首屏自动化采集方案,扩大思考范围,你我思想之间互相碰撞往往可以激起更多的稀奇古怪的解决方案,这也正是我写这篇文章的目的。 阅读全文
posted @ 2018-01-27 17:49 royalrover 阅读(1713) 评论(1) 推荐(4) 编辑
摘要: 关于工作 今年,我经历了人生准确意义上的跳槽。此前经历过2015年阿里宝宝的”拥抱变化“事故(虽然侥幸拿到了offer),因此面对跳槽或者异动已有了较强的抵抗和适应能力,所有5月底的离职对我负面影响其实并不大,更何况这是自我做出的并坚信可以把握住的一个追求更好发展的契机。 来到微店,我接触了不 阅读全文
posted @ 2017-12-31 20:58 royalrover 阅读(842) 评论(2) 推荐(2) 编辑
摘要: 背景 terminal(命令行)作为本地IDE普遍拥有的功能,对项目的git操作以及文件操作有着非常强大的支持。对于WebIDE,在没有web伪终端的情况下,仅仅提供封装的命令行接口是完全不能满足开发者使用,因此为了更好的用户体验,web伪终端的开发也就提上日程。 关于终端(tty)与伪终端 阅读全文
posted @ 2017-11-29 10:39 royalrover 阅读(1929) 评论(1) 推荐(3) 编辑
摘要: 服务端推 服务端推,指的是由服务器主动的向客户端发送消息(响应)。在应用层的HTTP协议实现中,“请求 响应”是一个round trip,它的起点来自客户端,因此在应用层之上无法实现简易的服务端推功能。当前解决服务端推送的方案有这几个: 1. 客户端长轮询 2. websocket双向连接 3. i 阅读全文
posted @ 2017-10-31 23:36 royalrover 阅读(19156) 评论(1) 推荐(7) 编辑
摘要: 目标 当前页面需要与当前浏览器已打开的的某个tab页通信,完成某些交互。其中,与当前页面待通信的tab页可以是与当前页面同域(相同的协议、域名和端口),也可以是跨域的。 要实现这个特殊的功能,单单使用HTML5的相关特性是无法完成的,需要有更加巧妙的设计。 畅想 现在我们发现下思维,假设多种场景 阅读全文
posted @ 2017-09-17 12:18 royalrover 阅读(5684) 评论(5) 推荐(5) 编辑
摘要: 背景 在node工程部署中,常常涉及到三方:本地客户端、跳板机和服务器(集群)。在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令执行shell文件启动node服务器,这需要使用一个常用的命令 setsid ,这样当ssh命令执行完毕shell退出后,node服务器仍正 阅读全文
posted @ 2017-05-08 22:01 royalrover 阅读(1787) 评论(3) 推荐(2) 编辑
摘要: sptt sptt是移动端UI自动化测试的一种解决方案,全称为 special tool of test 。sptt提供了一套测试解决方案,并使用命令行完成相关操作,最终可集成在各种后续的流程中。 sptt内部整合了第三方测试框架 appium,由appium层抹平iOS和android环境下的测试 阅读全文
posted @ 2017-04-19 17:10 royalrover 阅读(1075) 评论(0) 推荐(0) 编辑
摘要: Midlog中间件 node服务端开发中少不了日志打点,而在koa框架下的日志打点在多进程环境中日志信息往往无法对应上下文,而且在高并发下直接进行写buffer操作(内核调用writev)也会造成内存泄漏,因此Midlog就是为了缓解这种问题而产生的,其采用多种缓冲调度策略尽可能降低writev的代 阅读全文
posted @ 2017-04-06 16:53 royalrover 阅读(1530) 评论(0) 推荐(0) 编辑
摘要: 本文翻译自 "CSS Ellipsis: How to Manage Multi Line Ellipsis in Pure CSS" ,文中某些部分有些许改动,并添加译者的一些感想,请各位读者谅解。 合理的截断多行文本是件不容易的事情,我们通常采用几种方法解决: 直接隐藏多余的文本 只适用于单行文 阅读全文
posted @ 2017-03-05 23:03 royalrover 阅读(1513) 评论(2) 推荐(4) 编辑
摘要: 本片文章翻译自 "Styling Broken Images" 翻译过程中可能会在原意不变的基础上有些细微改动,望读者见谅 加载失败的图片是比较丑陋的,比如 但是我们可以让结果变得更美好。通过给元素设置CSS相关属性可以实现更美的呈现。 IMG元素你需要知道的两点知识 1. 我们可以针对IMG元素设 阅读全文
posted @ 2017-02-20 09:25 royalrover 阅读(6608) 评论(4) 推荐(13) 编辑