上海 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 完美落幕!
整理者 @根號三、@一縷殤流化隱半邊冰霜