目录
架构、备忘和注意事项
理解IoT事业部网站产品的技术栈
前端 – Node.js
在Node.js诞生之前,Javascript主要用来做客户端的开发。
在Node.js诞生之后,Javascript可以用来做完整的后台开发。
这其中的原理很简单,Node.js的解析器(runtime)就相当于一个Chrome浏览器,并且对于OS拥有全部访问权限。
运行在浏览器上的Javascript受限于浏览器的权限,而运行在Node.js中的Javascript可以完全操作OS。所以,简单来说,就是现在你可以用Javascript来写跟Python、Java一样功能的APP啦。
IoT网站项目前端使用的框架是风头正热的Vue.js。
后端 – Spring Boot
Spring Boot是基于Java编程语言的微服务框架。
我们来看下它的组件逻辑图。可以看到关键的组件有(括号内是实际使用的软件名):
- Gateway – zuul
- Service Discovery – eureka
- Config Service – config server
拓扑
新架构(逻辑拓扑)
我不了解Spring框架,但是作为运维方,我们比较关心的有这些问题:
在Spring Boot自己的API Gateway之前,还有我们的Nginx,如果做HA架构,是否只需单纯地增加反向代理的后端节点?
答案是肯定的。注册到后端微服务框架自身的gateway服务中的业务服务有自己的名字,只要前端对应地访问相应的名字就行。
HA架构下,是否可以有多个Service Discovery、Config Service组件同时工作?
答案是肯定的。现在作为registry组件的方案一般有Eureka, Zookeeper, Consul。
他们都有各自的集群实现方式。
单节点情况下部署的情况
多节点情况下HA部署的情况
可以把上图的Nginx抽出来单独放(在生产环境下应该放在一个public子网),作为一个整体的网关入口,前端服务和后端服务(这些都放在private子网)都用这个网关做负载均衡。
e.g.
前端:
- server_name: registration.product-1.com ==> 192.168.100.1:3001, 192.168.100.2:3001
- server_name: registration.product-2.com ==> 192.168.100.1:3002, 192.168.100.2:3002
- …
后端gateway:
- server_name: aggregated-api-gateway.group.com ==> 192.168.100.1:3001, 192.168.100.2:3001
- …
前端访问后端:
- 访问product-1后端服务 ==> aggregated-api-gateway.group.com/gateway/product-1-user/
- 访问product-2后端服务 ==> aggregated-api-gateway.group.com/gateway/product-2-user/
- …
旧架构(物理拓扑)(待补充)
不补充了,乱七八糟……
参见部署product-3德国站时总结的笔记。
备忘和注意事项
IoT事业部的软件架构中,所谓新旧架构,指的是物理拓扑上的概念,不是逻辑拓扑上的概念。
i.e.
新架构:每个产品使用自己独立的基础设施。
旧架构:有些组件会部署在共用的基础设施上。
旧架构下的网站列表(待补充)
- Ahome.com
新架构下的网站列表(待补充)
- registration.B.com
- registration.C.com
旧的网站项目使用的各个组件的配置文件的仓库
内网环境共用的Service Discovery服务 – 10.20.0.152:8761
其Config Service服务 – 10.20.0.152:8763
http://gitlab.company.com.cn/system_operation/erp-config/tree/master
在这里看到注册进来的具体服务所使用的配置文件。我猜Spring Boot的业务逻辑是:
- Service Discovery启动。
- Config Service和Service Discovery建立会话。
- 其他服务和Service Discovery连接,“注册”到Service Discovery中。
- 可能是由Service Discovery告诉Config Service哪个服务注册进来了,你去拉取(git pull)这个服务的配置文件然后丢给他吧。