上海 2017 JSConf 大会已经结束,整理的两天大会实录如下:
第一场:Node.js Microservices on Autopilot
开场简单介绍了一下什么是微服务。
微服务有什么帮助
假想步骤:
- 把 corn 服务分解成许多较小服务
- 每个微服务都可以独立部署
- 新的微服务都可以负载均衡
当微服务架构与他们所替代的服务相同时,它们也会面对相同的挑战。
微服务的优势
容忍失败,尽管外部失败后仍可工作。
快速迭代,一次性服务,可独立部署服务。
微服务的反模式
微服务器之间需要负载平衡器
启动顺序很重要
负载平衡无处不在。
Autopilot 模式
可以通过单击来部署和扩展的应用程序。
应用和工作流在我们的笔记本电脑和在云(公有或者私有云)上同样工作
应用和工作流不用强绑在任何特定的架构或者调度上。
Autopilot 应用
- Autopilot 模式的解决方案
- 可以通过 Container 获取服务
Autopilot 实践
- 应用程序由编写的 docker 容易组成
- 服务探索可以用过 consul 或者其他 catalog
- Container 本地健康和服务相应于服务依赖的变化
ContainerPilot
- 自动化一个 Container 的服务探索,生命周期管理和遥测报告
- 功能
- Container-local 健康检查
- PID 1初始化进程
- 服务探索和注册和观察
- 遥测报告给 Prometheus
- 免费以及开源 github.com/joyent/containerpilot
一些 tips :
- 防止那些会发生并会导致服务负担过重的请求。
- 一旦达到相应超时的阈值,阻止以后的服务直到服务能够跟上处理或者恢复
- 是否可以使用负载均衡器实现?
load Balancers at Edge
- 不要将微服务直接暴露在你的组织以外。
- 设置一个能够使用 Consul 的负载均衡器。
- 当通过微服务创造商业价值时 API 网关也比较重要。
第二场: 无服务器架构与API
函数即服务
软件开发需要考虑以下几点:
可运维性
可拓展性
安全性
稳定性
可靠性
高可用性
Xaas 比较
函数计算的应用架构及执行方式
API Gateway & Function Computing
API Gateway 的特点:
防攻击,防重放,请求加密、身份认证、权限管理、流量控制
API 定义、测试、发布、下线生命周期管理
监控、报警、分析、API 市场
Faas 的缺陷
运行环境的不确定性:IP变化
运行环境的数量,对依赖资源的压力:比如数据库的连接数的限制。
第三场:从 REST 到 GraphQL
GraphQL 一个用于 API 的查询语言。
一个简单的 GraphQL query
页面加载时间 = 加载代码 + 加载数据
Web 开发的变迁
早期的 Web 开发:
一个 Web 服务器返回静态的 html 返回给浏览器。
2017年的 Web 开发
Web 服务器返回代码,用户服务、Posts服务、外部 API 返回数据给浏览器。页面会有很多请求,请求各种数据。现在又多了多个终端,浏览器,iOS,Android。
纯 REST - 一个endpoint对应一个资源
优点:
- 灵活
- 解耦
缺点
- 需要很多次请求
- 会获取到不需要的数据
- 复杂的客户端
类 REST - 一个endpoint对应一个视图
优点:
- 一次请求
- 所得即所需
缺点:
- 不够灵活
- 高度耦合
- 很高的维护代价
- 迭代缓慢
我们需要:
- 只需要一次请求
- 所得即所需
- 灵活
- 解耦合
而 GraphQL 能带给我们:
- 只需要一次请求
- 所得即所需
- 解耦合
GraphQL 有以下3点重要的特性:
- 一个用来描述数据类型和关系的 API 定义语言
- 一个可以描述具体需要获取哪些数据的查询语言
- 一个可以 resolve 到数据单个属性的可执行模型
GraphQL resolvers 约等于 REST endpoints
GraphQL 是一个规范,不是一个实现,它在 servers、clients、tools 这些地方都有相应的规范。
第四场:通过React Storybook实现visual testing驱动开发
这一场讲师分享了很多项目中实战踩坑经验,感兴趣的话,建议大家直接看看回看视频。
第五场:Graduating your node.js API to production environment
我们期待的架构类型
什么是生产系统?
有真实用户和数据的系统,日用户至少上千的公开服务。
达到生产级别的水准是?
开发者:代码可以跑,功能测试都可以通过
商业经理:系统能运行,并能给用户带来价值和利润。
库开发者:自己的库被广泛应用。有很好的文档。
运维:运行时环境稳定,可debug,可维护
安全专家:系统通过安全监测。
避免责任缺失
编写产品级代码的必要条件
- 稳定
- 有效
- 可调试
如何跨组件跟踪日志
只是debug是不够的
如何在上游服务故障中存活
Add error handling
如何运行 性能/稳定性 测试
安全性
总结
Thinking:
- 考虑产品上线的各个方面
- 避免责任缺失
Code:
- 适当的日志
- 处理服务故障
- 记录错误内容
- 管理连接
系统:
- 做性能和稳定性测试
- 不要独自去实现所有安全相关的逻辑
第五场:基于 Node.js 开发物联网应用
物联网开发
数据产生 -> 传感器
数据收集 -> 网络传输数据分析 -> 云服务器执行分析结果 -> 执行机构/推送为什么选用 Node.js ?
- 生态
- 高并发
- 易扩展
- 学习曲线
- 开发效率
- 前后端沟通
最后讲师现场演示了一个小车的例子,通过网页上发送前进、后退、左转、右转控制小车的行为。
第六场:Upgrading to Progressive Web Apps
黄玄老师本次分享的内容很多,满满的都是干货。强烈建议大家去看黄玄老师的幻灯片:
本系列笔记是现场记录的,比较仓促,有些地方会存在偏差或理解错误,还请关注官方后续发布的讲师 PPT 和大会视频。
JSConf China 2017 完美落幕!
整理者 、