前文我們介紹了Notion公司創(chuàng)新的定制傳感器,接下來我們繼續(xù)為讀者介紹其背后的故事。
使用微服務(wù)分離開發(fā)和部署
應(yīng)用基礎(chǔ)架構(gòu)本身基于一系列微服務(wù)構(gòu)建,這些微服務(wù)負責數(shù)據(jù)生命周期的不同部分。Docker被用來作為每個微服務(wù)的容器。比如,一個應(yīng)用程序從感應(yīng)器得到事件數(shù)據(jù),并將其發(fā)送給另外一個應(yīng)用來決定煙霧報警器停止了。類似的微服務(wù)用來決定是否需要分析動作數(shù)據(jù)??梢愿嬖V你門是打開還是關(guān)閉的,或者是否有人在敲門。Docker使得開發(fā)人員可以利用現(xiàn)有的維護、監(jiān)控工具,并且和容器整合在一起。“使用Docker的一大好處就是能夠?qū)⑵脚_依賴從開發(fā)中移除,因此可以更有效得推出軟件新版本。”Jordan Stone,Notion的首席軟件架構(gòu)師說。
Notion的開發(fā)團隊從Ruby on Rails開始,構(gòu)建了一個巨大的應(yīng)用程序。團隊仍然在使用Ruby和Ruby on Rails來實現(xiàn)很多服務(wù)。R用來做統(tǒng)計模型。團隊還使用Postgres做用戶賬號數(shù)據(jù)庫。
利用IoT后臺服務(wù)
Notion的開發(fā)團隊重度使用云集成,因此他們能夠更加專注在增加產(chǎn)品價值的開發(fā)上,而無需從頭開始。“集成很長時間以來就是成為連接藍圖一部分的方式,”Stone說。“首先需要確保和聲譽良好的公司合作,你得知道他們的現(xiàn)狀和前景。”
Notion選擇了名為TempoIQ的第三方感應(yīng)器數(shù)據(jù)庫,因為它為大規(guī)模存儲感應(yīng)器數(shù)據(jù)做了優(yōu)化。使用這個數(shù)據(jù)庫使得Notion可以更快得構(gòu)建產(chǎn)品。“我們不是數(shù)據(jù)庫公司,”Stone說。“除了技術(shù)挑戰(zhàn),構(gòu)建IoT應(yīng)用所需的數(shù)據(jù)庫得應(yīng)用程序花費巨大。”名為Crashlytics的嵌入式設(shè)備crash報告服務(wù),會收集該感應(yīng)器節(jié)點的問題數(shù)據(jù)。Crowsnest幫助定位這些問題。后臺部署在Digital Ocean云上,該云花費不多,性能良好。“比起其他云供應(yīng)商,這讓我們能夠彈性擴展的同時花費更少。”Stone說。
和Nest、Home Kit和IFTT平臺的后臺集成已經(jīng)完成,使得可以在這些生態(tài)系統(tǒng)上開發(fā)混合應(yīng)用程序。“我們和Nest這樣的平臺集成,我們自己完成之上的功能開發(fā)。”Stone說。“我們還要通過自己的受OAuth保護的API來支持和其他云的集成。如果有人被盜用了,并且集成是從他們到我們的,我們就可以撤銷他們訪問我們云的權(quán)限。”
云服務(wù)加速開發(fā)
整個軟件開發(fā)交付流程都自動化了,并且對交付加以控制。開發(fā)團隊使用一系列環(huán)境來提供本地開發(fā)環(huán)境,以及大規(guī)模運行的用戶可接受測試運行的環(huán)境。Jira提供軟件開發(fā)功能來支持敏捷,sprint,backlog和新功能。Trello用來支持新功能請求。
一旦新代碼完成,就會被推送到GitHub上,如果單元測試通過,代碼會推送到Quay.io,一個管理私有Docker倉庫的服務(wù)。然后使用Codeship通知所有運行著Docker鏡像的服務(wù)器來下載新的包含更新代碼的鏡像,Codeship是一個持續(xù)集成和交付的服務(wù)。新代碼能夠在四分鐘內(nèi)推送到最大的應(yīng)用里,在60秒之內(nèi)就能推送到其他微服務(wù)上。目前,Notion每天會推送一個到五個新的包含交付代碼的更新到生產(chǎn)環(huán)境或者UAT環(huán)境里。
用戶反饋
Notion愿景的核心部分是最大限度地利用用戶和開發(fā)人員來支持新應(yīng)用程序和服務(wù)。對于移動應(yīng)用,團隊主要關(guān)注用戶測試來確保應(yīng)用程序提供了合適的功能。“所有人都在為此而努力,了解所有需要構(gòu)建的東西。如果我們認為完全理解了行業(yè)以及用戶真實需求,那就太自我為中心了,”Margoles說。“我們的目標是成為不可知論者的平臺,”他補充道。“Notion想擴展這個平臺,并且允許家庭里已有的其他設(shè)備和服務(wù)與之集成。我們的立場是認為行業(yè)已經(jīng)過于擁擠了。我們不想成為控制一切的平臺,而想要提供能為你提供所需信息的感應(yīng)器。”