文章中主要是一些概念,简单记录这段时间对 Istio 的学习。

对于全栈来说,学习 Istio 还是很有必要的,在此过程中还要学习 K8s、Docker 等基本的运维知识,那么在设计 BFF 层时候也会考虑到部署、扩容、金丝雀发布等问题,提升程序的健壮性。

JavaScript 全栈

在 JavaScript 流行的今天,各种框架层出不穷,无论是学习前端的 3 架马车(React\Vue\Angular)、还是运用后端的 Node.js 框架(Express\Koa\Egg.js)等,最后你都会前后端通吃,它们被 JavaScript 这门语言串联在了一起,尤其是当你去翻阅大量前端使用的 CLI 工具源码的时候,几乎都有 Express 的影子,所以在 JavaScript 技术栈里,前后端(这里的后端不是指复杂的后端架构和设计)本身并不分家。当然复杂的后端或前端工作并不适合全栈工程师去做,那也是后话了。


BFF 层

这些年来提出了 BFF 层的概念,根据业务的不同,不同公司有自己的设计和实现,比如将纯前端从 Nginx 移到了 Node.js Server 运行环境、服务端渲染(SSR)、生成或者拼接业务数据返回给前端使用(Node.js 微服务、GraphQL 等)…


Node.js 微服务

自己也做过很长一段时间的全栈,用 Node.js 开发后端业务,把数据吐给前端,不需要等着后端同事返回数据或者来回沟通的烦恼。现在做后端必定会遇到微服务的概念,不同的微服务有自己的 SDK 等工具帮助完成相关的注册发现,大多数情况下它们对 Java 的支持度最好,Node.js 有时候并不友善,要完善你不得不去写一些代码,比如熔断、报警等等,也是带来大量的开发测试成本。如果不幸公司内部 Java 组选择了不支持 Node.js 的架构,那么简直是灾难。

微服务的 SDK 基本上和网络通讯相关,下文的网络化可以解决这个问题。

Read More

前文简单梳理了Node.js使用child_process模块创建子进程的4种方法,execexecFileforkspawn。接下来我们看看cluster模块如何创建子进程,后续更多内容会介绍cluster.fork启动Net Server时候为何不会因为共同监听同一个端口而不报错。

cluster

  • fork: 衍生出一个新的工作进程,这只能通过主进程调用。

Read More

Node.js 创建子进程的方法常用的有如下几种:

child_process

  • exec: 衍生一个 shell 然后在该 shell 中执行 command,并缓冲任何产生的输出,最大缓存 1024*1024 个字节。
  • execFile: 函数类似exec,但默认情况下不会衍生 shell。 相反,指定的可执行文件file 会作为新进程直接地衍生,使其比exec 稍微更高效。和exec一样,它也有最大 1024*1204 个字节的显示缓存。
  • fork: 是 spawn的一个特例,专门用于衍生新的 Node.js 进程。 与spawn一样返回ChildProcess对象。 返回的ChildProcess将会内置一个额外的通信通道,允许消息在父进程和子进程之间来回传递。
  • spawn: 上诉的几个方法其实都是通过 spawn 实现的。

cluster

  • fork: 衍生出一个新的工作进程,这只能通过主进程调用。

Read More

在网络上查询libuv和EventLoop相关信息的时候,经常看到不同的文章所表达的意思差距较多,主要原因有二吧:

  • 它们的libuvV8大版本不同,导致具体的实现略有差异
  • 另外它们的代码错综复杂,又是大多数JavaScript工作者不擅长的C/C++,只是从上而下的看,或许一些细节无法完全理解或是认知的分歧

与其受他人影响,不如自己来好好梳理下。

版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// libuv
#define UV_VERSION_MAJOR 1
#define UV_VERSION_MINOR 33
#define UV_VERSION_PATCH 1

// V8
#define V8_MAJOR_VERSION 7
#define V8_MINOR_VERSION 8
#define V8_BUILD_NUMBER 279
#define V8_PATCH_LEVEL 17

// Node.js
#define NODE_MAJOR_VERSION 14
#define NODE_MINOR_VERSION 0
#define NODE_PATCH_VERSION 0

没有列出具体版本号的代码分析都是耍流氓,2010年的代码和2020年的代码可能差距甚远,“上古”分析固然在当时是对的,但是在今日也许是错误的。

Read More

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×