[Day 2] 听说你没来 JSConf 2017?

5,614 阅读5分钟

上海 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

黄玄老师本次分享的内容很多,满满的都是干货。强烈建议大家去看黄玄老师的幻灯片:huangxuan.me/jsconfcn201…

本系列笔记是现场记录的,比较仓促,有些地方会存在偏差或理解错误,还请关注官方后续发布的讲师 PPT 和大会视频。

JSConf China 2017 完美落幕!

整理者 @根号三@一缕殇流化隐半边冰霜