软件技术学习笔记

个人博客,记录软件技术与程序员的点点滴滴。

NodeJS微服务APM

上微服务时,我们必需有全链路追踪、应用程序性能监测(APM)。开源的Elastic Stack是一个不错的选择,它包含日志、指标、APM、搜索、Kibana等。使用Elastic Stack做NodeJS APM时,使用起来非常方便,代码也无入侵。

只需在程序的前面添加一行代码: const apm = require('elastic-apm-node').start(); 然后添加环境变量ELASTIC_APM_SERVER_URL,正常启动程序: node index.js

能如此方便地使用,也是得益于NodeJS的事件模型、async_hookselastic-apm-node,其中的elastic-apm-node已经帮我们创建好同步或异步流程中的Transaction与Span。大部分时候,我们只需写好自己的业务代码。

样例代码:apm-nodejs-app-aapm-nodejs-app-bapm-nodejs-app-c

继续阅读→

微前端与SSR微服务

随着业务的发展,单页面应用(SPA)开发的前端系统也越来越复杂,这时需要多个团队并行开发。为了提高生产效率,每个团队需要能够独立开发、部署与维护,于是引入了与后端微服务相似的“微”架构:微前端与SSR微服务。即使一个团队,为了新特性不影响其它部分、能够更快速的上线,也引入了“微”架构。无逻辑的前端静态资源服务,就不在讨论之列。

本文主要探讨React与Vue的微前端 + SSR微服务

继续阅读→

使用Elastic Stack观察分布式服务—K8s: Logging, Metrics, Tracing, APM

落地分布式微服务架构时,遥测信息收集是一个重要的环节。如果没有日志收集、指标收集、分布式追踪、应用性能管理,将导致问题定位效率低下、无法自动弹性伸缩、无法自动预警等,最终可能导致微服务架构落地失败。

在K8s中,我们可以使用Elastic Stack完成这些事情。Elasticsearch完成数据存储与搜索;Kibana提供可视化的用户界面;Beats完成数据采集;APM完成分布式追踪、应用性能管理。

在K8s集成Istio之后,虽然Jaeger可以追踪到Mesh边界,但仍需在代码中转发x-request-idx-b3-...等头部信息,也没有比Elastic APM优美。同时,我们大部分时候只关注应用边界的性能,很少关注Mesh边界的性能。因此,在单独K8s或K8s + Istio集群中,Elastic Stack满足了我们的APM需求。

Elastic Stack数据流

继续阅读→

部署Istio与BookInfo样例

Istio是非入侵式的跨语言服务治理方案,与业务代码达到进程解耦,以SideCar模式完成服务治理——流量管理、安全、策略、遥测。Istio架构比Dubbo、Spring Cloud先进。

本文将演示:在K8s集群中部署Istio与其BookInfo样例。

1. 准备条件

  • 安装Helm与Tiller:参考“给K8s安装Helm与Tiller”。
  • 更大的内存。最小内存要求:主节点3GB,2个工作节点各6GB。
继续阅读→

Ubuntu中部署Kubernetes (K8s)集群

Kubernetes (K8s)是云原生生态的基石,是CNCF中第一个毕业的项目,是事实上的“云操作系统”标准;后续的分布式微服务都部署在K8s中。

演练K8s集群(CNI + IPVS模式),我们使用3个虚拟机(Ubuntu Server 18.04),需要SSD磁盘作为存储。K8s本身的微服务就不少,磁盘操作次数比普通的单应用服务的多。如果使用普通的机械磁盘,K8s集群的启动都困难。

节点类型 节点名称 IP地址 最小内存
主节点 k8s-master 192.168.80.90 3G
工作点 k8s-worker-1 192.168.80.91 2G
工作点 k8s-worker-2 192.168.80.92 2G
继续阅读→