[Day 2] 聽說你沒來 JSConf 2017?

根號三發表於2019-02-19

上海 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 完美落幕!

整理者 @根號三@一縷殤流化隱半邊冰霜

相關文章